Prometheus 监控服务(Managed Service for Prometheus,TMP)是根据用户的指标上报量和采集频率预估算出。该数值乘以 86400 则为一天的监控数据点数,根据按量计费可以计算预估的监控数据刊例价。因此不是所有的指标都会上报到prometheus的,这里如果需要采集指标,需要在控制台勾选指标采集,才会将数据采集到后端prometheus。
有的时候,在控制台勾选了某个指标采集,但是实际不会采集,勾选没生效,今天我看来具体说说这个是什么原因,又该如何解决。
1. 问题现象
控制台勾选cadvisor的machine_cpu_cores这个指标采集
筛选指标后,点击确认采集,再次查看指标还是未采集状态。
2. 排查思路
首先确认下这个指标本身在cadisor是否存在,数据是否正常
代码语言:javascript复制k get --raw /api/v1/nodes/11.155.xxx.xxx/proxy/metrics/cadvisor | grep machine_cpu_cores
# HELP machine_cpu_cores Number of logical CPU cores.
# TYPE machine_cpu_cores gauge
machine_cpu_cores{boot_id="6d9347b9-122b-408b-a086-xxxxx",machine_id="5f330c912c5245d4941bcccxxxx",system_uuid="5f330c91-2c52-45d4-941b-xxxxxxx5"} 8
检查cadvisor本身的数据本身是正常的。那为什么数据采集不上呢?
这里看了下控制台,发现指标的采集速率是0,这里说明数据没正常采集,这里的采集状态和采集速率是对应的,如果指标采集速率是0,则认为没采集。
但是过滤前的指标采集速率是有的,但是指标采集速率是0,这里说明是job有过滤
看了下job的yaml,发现container的label匹配规则是 .
这里的含义是container这个label的值不为空才会保留,但是当我们直接查看cadvisor指标时,container这个label是不存在的,因此这里job将这类指标过滤了不采集。
3. 解决方案
上面已经定位到问题了,就是job过滤了这类指标,那我们只需要修改job保留这类指标就行,这里要怎么修改呢,直接将container这个label的过滤规则改下,改成 .* 匹配所有即可。
修改之后,这里会采集所有,包含label的值为空,修改后,指标就可以正常采集了,但是这里建议不要改job配置,像machine_cpu_cores这类节点监控指标类型,直接用node-exporter更加合适。