prometheus / prometheus/client_python
OpenMetrics parser cannot parse the output of `promtool tsdb dump-openmetrics`
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 4.4k
- フォーク
- 876
- 平均マージ
- 8日 4時間
- マージ済み PR(30日)
- 1
説明
I tried using the example code...
import sys
from prometheus_client.openmetrics.parser import text_string_to_metric_families
for family in text_string_to_metric_families(sys.stdin.read()):
for sample in family.samples:
print("Name: {0} Labels: {1} Value: {2} Timestamp: {3}".format(*sample))
...to parse an OpenMetrics file produced by promtool tsdb dump-openmetrics, but I run into the following issue:
Traceback (most recent call last):
File "/home/nicolas/IE6/synapse-meshsim/exp/./normalise_timestamps.py", line 6, in <module>
for family in text_string_to_metric_families(sys.stdin.read()):
File "/home/nicolas/IE6/synapse-meshsim/exp/venv/lib/python3.11/site-packages/prometheus_client/openmetrics/parser.py", line 18, in text_string_to_metric_families
yield from text_fd_to_metric_families(StringIO.StringIO(text))
File "/home/nicolas/IE6/synapse-meshsim/exp/venv/lib/python3.11/site-packages/prometheus_client/openmetrics/parser.py", line 543, in text_fd_to_metric_families
yield build_metric(name, documentation, typ, unit, samples)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/nicolas/IE6/synapse-meshsim/exp/venv/lib/python3.11/site-packages/prometheus_client/openmetrics/parser.py", line 472, in build_metric
raise ValueError("Clashing name: " + name + suffix)
ValueError: Clashing name: go_gc_duration_seconds
This comes from this code: https://github.com/prometheus/client_python/blob/46eae7bae88f76951f7246d9f359f2dd5eeff110/prometheus_client/openmetrics/parser.py#L487-L489
But I don't understand why this check exists in the first place? In my case, I have the same metrics for multiple instances, and dump-openmetrics groups them by instance, then by metrics name. Can't we just remove this check altogether?
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
リンク先の build_metric チェックにある prometheus_client/openmetrics/parser.py から始め、promtool tsdb dump-openmetrics のグループ化された出力と、その前提を比較します。パーサーのサンプルコードとその出力を使って失敗を再現します。メトリック名が繰り返される場合のパーサーの動作が定義され、報告された名前の衝突による失敗が解消されれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- observability-sre
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 38/100