【问题标题】:Is it possible to have same metric name with different labels in prometheus?普罗米修斯中是否可以使用不同标签的相同指标名称?
【发布时间】:2021-04-13 15:06:55
【问题描述】:

我是 python 和 prometheus 的新手。我目前正在测试一个脚本来抓取指标并发送到一个舞会文件。

代码是:

from prometheus_client import CollectorRegistry, Gauge, write_to_textfile
import re,os
registry = CollectorRegistry()

textfile = 'C:\\Users\\Test\\Desktop\\Python\\'
d = {u'com.testserver.yyy:test-config-server': [u'clog,251', u'temp,33.3', u'violations,1', 
u'errors,0', u'code,1', u'leaks,0']}


for x in d['com.testserver.yyy:test-config-server']:
    ndx = d['com.testserver.yyy:test-config-server'].index(x)
    metric = d['com.testserver.yyy:test-config-server'][ndx].split(',')[0]
    value = float(d['com.testserver.yyy:test-config-server'][ndx].split(',')[1])
    metric_name = re.sub("[^A-Za-z0-9]","_",'com.testserver.yyy:test-config-server')
    test_metric = metric_name+"_"+metric
    final_metric = Gauge(test_metric, 'Metrics scraped from test',['Type'] ,registry=registry)
    final_metric.labels(metric).set(value)

output = textfile + "test_metrics.prom"
write_to_textfile(output, registry)

这是输出:

com_testserver_yyy_test_config_server_ncloc{Type="clog"} 251.0
com_testserver_yyy_test_config_server_coverage{Type="temp"} 33.3
com_testserver_yyy_test_config_server_violations{Type="violations"} 1.0
com_testserver_yyy_test_config_server_vulnerabilities{Type="errors"} 0.0
com_testserver_yyy_test_config_server_code_smells{Type="code"} 1.0
com_testserver_yyy_test_config_server_bugs{Type="leaks"} 0.0

但是,大约有 100 个字典键(等于 100 个 metric_names),每个键有 6 个指标,因此将有大约 600 个唯一的“final_metric”。是否可以有相同的指标名称但由标签区分?

如果可能,这是所需的输出:

com_testserver_yyy_test_config_server{Type="clog"} 251.0
com_testserver_yyy_test_config_server{Type="temp"} 33.3
com_testserver_yyy_test_config_server{Type="violations"} 1.0
com_testserver_yyy_test_config_server{Type="errors"} 0.0
com_testserver_yyy_test_config_server{Type="code"} 1.0
com_testserver_yyy_test_config_server{Type="leaks"} 0.0

当我把代码改成这样时:

for x in d['com.testserver.yyy:test-config-server']:
   ndx = d['com.testserver.yyy:test-config-server'].index(x)
   metric = d['com.testserver.yyy:test-config-server'][ndx].split(',')[0]
   value = float(d['com.testserver.yyy:test-config-server'][ndx].split(',')[1])
   metric_name = re.sub("[^A-Za-z0-9]","_",'com.testserver.yyy:test-config-server')
   final_metric = Gauge(metric_name, 'Metrics scraped from test',['Type'] ,registry=registry)
   final_metric.labels(metric).set(value)

output = textfile + "test_metrics.prom"
write_to_textfile(output, registry)'''

输出有错误: ValueError:CollectorRegistry 中的重复时间序列:{'com_testserver_yyy_test_config_server'}

标签似乎无法区分每个指标。

【问题讨论】:

    标签: python prometheus


    【解决方案1】:

    在 Prometheus 方面,指标可以通过其标签来区分并单独保存,但如果这对您很重要,您获得的数据越多,抓取性能就会越差。

    【讨论】:

    • 感谢您提供的信息,添加标签的想法有所帮助。
    • 很高兴能提供帮助,如果这解决了您的问题,请将问题标记为已回答 :)
    【解决方案2】:

    在 for 循环中声明 Gauge 度量会导致重复错误。 我的解决方法是,将 Gauge 声明放在 for 循环之前,设置一个静态指标名称:'test_metric' 并为服务器名称添加一个标签。剩下要做的就是操作服务器名称,使其更短且可读。

    from prometheus_client import CollectorRegistry, Gauge, write_to_textfile
    import re,os
    registry = CollectorRegistry()
    
    textfile = 'C:\\Users\\Test\\Desktop\\Python\\'
    d = {u'com.testserver.yyy:test-config-server': [u'clog,251', u'temp,33.3', u'violations,1',u'errors,0', u'code,1', u'leaks,0']}
    
    final_metric = Gauge("test_metric", 'Metrics scraped from test','server','server_metric'] ,registry=registry)
       for x in d['com.testserver.yyy:test-config-server']:
       ndx = d['com.testserver.yyy:test-config-server'].index(x)
       metric = d['com.testserver.yyy:test-config-server'][ndx].split(',')[0]
       value = float(d['com.testserver.yyy:test-config-server'][ndx].split(',')[1])
       metric_name = re.sub("[^A-Za-z0-9]","_",'com.testserver.yyy:test-config-server')
       final_metric.labels(metric_name,metric).set(value)
    
    output = textfile + "test_metrics.prom"
    write_to_textfile(output, registry)
    

    新输出

    # HELP test_metric Metrics scraped from test
    # TYPE test_metric gauge
    test_metric{server="com_testserver_yyy_test_config_server",server_metric="clog"} 251.0
    test_metric{server="com_testserver_yyy_test_config_server",server_metric="temp"} 33.3
    test_metric{server="com_testserver_yyy_test_config_server",server_metric="violations"} 1.0
    test_metric{server="com_testserver_yyy_test_config_server",server_metric="errors"} 0.0
    test_metric{server="com_testserver_yyy_test_config_server",server_metric="code"} 1.0
    test_metric{server="com_testserver_yyy_test_config_server",server_metric="leaks"} 0.0
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2022-12-02
      • 2020-01-16
      • 2022-12-22
      • 2020-01-10
      • 2020-11-12
      • 2020-12-23
      • 2021-03-29
      • 1970-01-01
      相关资源
      最近更新 更多