group_left 不幸的是,与其说是解决方案,不如说是一种有限的解决方法。一个月来,我一直在努力寻找对group_left 的连贯解释,而表达式不是标签。必须在每个简单的表情上加上咒语会很烦人;弄清楚如何使用多个指标构建更复杂的 PromQL 查询完全是另一回事。期望我的任何用户——尤其是那些完全不熟悉 Grafana / PromQL 的用户——每次都编写一个复杂且难以理解的查询也不太友好。
我的第一个刺是这样的:
- job_name: 'node_exporter'
scrape_interval: 10s
static_configs:
- targets: ['1.2.3.4:9100']
labels:
cluster: 'rkv-image01'
ceph_role: 'mon'
instance_node: 'rkv1701'
上游不赞成将其视为“反模式”,因为显然人们期望instance 是唯一一个其值在工作中的所有指标中都是唯一的标签。我从来没有遇到过这很重要的情况,但是如果有更好的方法,为什么不呢。有一种想法是出口商应该是“固定的”,但我很犹豫是否要对一个广泛使用的项目进行潜在的破坏性变化的兔子洞。我也不愿意分叉它并且必须与上游保持平行,我没有时间也没有业力。
接下来我尝试了metrics_relabel_configs,但这似乎不想从不同的指标复制标签,即。 node_uname_info{nodename} -> instance -- 启动时出现语法错误。
接下来我遇到了一些事情,说如果收集器不提供值,Prom 将用 address 的值填充 instance,实际上出于某种原因它似乎为虽然我的node_exporter 没有得到一个。这似乎很奇怪。但我发现真正有效的是简单且如此明显,以至于我什至都没有想过尝试:
- job_name: 'node_exporter'
scrape_interval: 10s
static_configs:
- targets: ['1.2.3.4:9100']
labels:
cluster: 'rkv-image01'
ceph_role: 'mon'
instance: 'rkv1701'
...
即,只需在抓取配置中应用目标标签。我正在从能够写出这些目标的数据库转储中进行基于文件的服务发现。
这可能是我的环境没有相关节点的 DNS A 或 PTR 记录的一个因素。是的,我知道,相信我,我也不喜欢,但这是我无法控制的。但这仍然无关紧要,我不知道为什么 node_exporter 根本不提供任何 instance 标签,因为它确实找到了信息指标的主机名(这对我没有任何好处)。
$ curl http://1.2.3.4:9100/metrics | grep instance
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 80082 0 80082 0 0 4383k 0 --:--:-- --:--:-- --:--:-- 4600k
$ curl http://1.2.3.4:9100/metrics | grep rkv1701
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 80085 0 80085 0 node_uname_info{domainname="(none)",machine="x86_64",nodename="rkv1701.myco.com",release="4.17.13-1.el7.elrepo.x86_64",sysname="Linux",version="#1 SMP Mon Aug 6 14:16:00 EDT 2018"} 1
0 9268k 0 --:--:-- --:--:-- --:--:-- 9776k
$