![](/img/trans.png)
[英]Duplicated timeseries in CollectorRegistry when running prometheus (python)
[英]Python prometheus_client, Duplicated timeseries in CollectorRegistry
使用 Python Prometheus 客戶端,我正在嘗試將具有不同標簽的指標添加到同一個收集器注冊表。
我的目標基本上是在一個 CollectorRegistry() object 中收集多個指標,並同時將它們全部推送到推送網關。 前任:
my_metric_name{name="foo",tag="1"} 1.0
my_metric_name{name="foo",tag="2"} 5.0
my_metric_name{name="foo",tag="3"} 7.0
從上述設置中,我想從一個注冊表一次全部推送它們,而不是為每個注冊表創建一個新注冊表。 我可以這樣做嗎?
考慮這個工作片段:
#!/usr/bin/env python3
from prometheus_client import CollectorRegistry, Gauge
registry = CollectorRegistry()
g = Gauge("test", "some gauge",
labelnames=["name", "tag"],
registry=registry).labels("foo", 1)
g.set(1)
這會創建一個像這樣的 Gauge 度量:
test{name="foo",tag="1"} 1.0
但是,這不起作用:
#!/usr/bin/env python3
from prometheus_client import CollectorRegistry, Gauge
title = "foo"
dataset = [1, 2, 3]
registry = CollectorRegistry()
for item in dataset:
g = Gauge("test", "some gauge",
labelnames=["name", "tag"],
registry=registry).labels(title, item)
g.set(1)
我期待它創造出這樣的東西,標簽制作獨特的物品(不重復):
test{name="foo",tag="1"} 1.0
test{name="foo",tag="2"} 1.0
test{name="foo",tag="3"} 1.0
相反,它在第二個循環中失敗並出現以下錯誤:
ValueError: Duplicated timeseries in CollectorRegistry
不同的 label 名稱不會使它們不重復嗎?
我可以通過更頻繁地推送指標來推送網關(在每次循環迭代中)並創建一個新注冊表來解決這個問題。 但這確實有助於 package 收集一堆指標並一次發送它們,而不是通過網絡進行多次調用。
我意識到您只需要聲明 Gauge object 一次,然后每次調用 set() 時,都會在注冊表中添加一個新指標:
#!/usr/bin/env python3
from prometheus_client import CollectorRegistry, Gauge
title = "foo"
dataset = [1, 2, 3]
registry = CollectorRegistry()
g = Gauge("test", "some gauge",
labelnames=["name", "tag"],
registry=registry)
for item in dataset:
g.labels(title, item).set(1)
結果是:
test{name="foo",tag="1"} 1.0
test{name="foo",tag="2"} 1.0
test{name="foo",tag="3"} 1.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.