使用变量标签名称创建普罗米修斯指标

Posted

技术标签:

【中文标题】使用变量标签名称创建普罗米修斯指标【英文标题】:Creating prometheus metrics with variable label names 【发布时间】:2018-08-02 23:34:45 【问题描述】:

我正在尝试获取一些传递给该程序的字典,并导出 prometheus 指标。

字典是非嵌套的

'node-name': '0/0/CPU0', 'stack-seg-size': 136, 'text-seg-size': 108, 'shared-mem': 12748, 'process-id': 4086, 'physical-mem': 0, 'malloc-size': 1238, 'name': 'l2snoop', 'pid': 4086, 'data-seg-size': 533588, 'dyn-limit': 307200, 'jid': 251

但是,prometheus 指标中的键或标签的数量可能因字典而异。

我想得到这样的结果:

METRIC-NAMEnode-name='0/0/CPU0', stack-seg-size='136', text-seg-size= '108', shared-mem='12748', process-id='4086', physical-mem='0', malloc-size='1238', name='l2snoop', pid='4086', data-seg-size='533588', dyn-limit= '307200', jid='251' ''

所以我可以使用 grafana 来绘制标签值 http://docs.grafana.org/features/datasources/prometheus/#query-variable

我有以下代码:

        counters = CounterMetricFamily(''.format(metric_name), 'Metrics for '.format(metric_name))
        for metric in traverse_tree(data): #This returns a list of the dictionaries 
            metric = ['='.format(k,v) for k,v in metric.items()]
            counters.add_metric(metric, "")
        yield counters

没有抛出错误,但是当我进入指标页面时没有指标,我认为由于之前没有定义标签名称。

【问题讨论】:

【参考方案1】:

具有这样变化的标签值将导致高基数指标,这将导致 Prometheus 中的性能问题。您也无法对标签值进行数学运算。

您要做的是为每个值创建一个不同命名的指标,这些也是所有仪表,条形节点名称不是指标。

【讨论】:

以上是关于使用变量标签名称创建普罗米修斯指标的主要内容,如果未能解决你的问题,请参考以下文章

grafana 使用基于指标的普罗米修斯查询定义变量

普罗米修斯缺席函数

如何在普罗米修斯中使用 relable_config 为指标添加前缀

在普罗米修斯的标签中使用标识。标签的最佳实践

正则表达式对系列的普罗米修斯率

普罗米修斯获得整数计数