如何在Prometheus中合并F5的两个Pool成员状态指标并保留全标签?
合并F5 Pool成员状态指标的解决方案
一、抓取任务重标记是否可行?
不行。Prometheus的抓取重标记(relabeling)仅能针对单条指标的标签做独立修改,无法实现跨指标的标签合并——它没办法把ltmPoolMbrStatusEnabledState的状态标签同步到ltmPoolMbrStatusAvailState上,反之亦然。
二、PromQL查询实现方法
可以通过group_left关联语法实现两个指标的标签合并,同时保留双方的状态标签。以下是具体实现:
基础合并(保留原指标名)
以ltmPoolMbrStatusEnabledState为基础指标,关联同成员的ltmPoolMbrStatusAvailState标签:
ltmPoolMbrStatusEnabledState * on(instance, ltmPoolMbrStatusNodeName, ltmPoolMbrStatusPoolName, ltmPoolMbrStatusPort) group_left(ltmPoolMbrStatusAvailState) (ltmPoolMbrStatusAvailState * 0 + 1)
ltmPoolMbrStatusAvailState * 0 + 1:将可用性状态指标的值统一转为1,避免乘法运算改变原启用状态指标的数值on(...):指定用于匹配同一Pool成员的共同标签,确保关联的是同一个节点的状态group_left(ltmPoolMbrStatusAvailState):保留左侧基础指标的所有标签,同时将右侧指标的ltmPoolMbrStatusAvailState标签添加进来
修改指标名为目标格式
如果需要将指标名改为ltmPoolMbrStatusState,用label_replace包装上面的查询:
label_replace( ltmPoolMbrStatusEnabledState * on(instance, ltmPoolMbrStatusNodeName, ltmPoolMbrStatusPoolName, ltmPoolMbrStatusPort) group_left(ltmPoolMbrStatusAvailState) (ltmPoolMbrStatusAvailState * 0 + 1), "__name__", "ltmPoolMbrStatusState", ".*", "" )
执行后得到的指标会同时包含ltmPoolMbrStatusEnabledState和ltmPoolMbrStatusAvailState两个状态标签,完全匹配需求格式。
内容的提问来源于stack exchange,提问作者Nick Carlton
相关产品推荐
相关产品推荐

