当 PSI 不可用时,PSI 指标会以零值发送
什么是问题?
当主机上没有PSI(压力 Stall Information)时(内核编译时没有"CONFIG PSI",或用psi=0启动),cAdvisor仍然以零值发布PSI Prometheus 度量衡(容器-压力-cpu sstall seconds total,容器-压力-cpu waiting seconds total等). 这对监测和警报系统有误导性,无法区分"PSI不可用"和"PSI不可用但系统闲置".
主要原因是: -
在打开的容器/组(fs2/psi.go)中,当PSI文件不存在或内核返回ENOTSUP'时,statPSI ()'正确返回为零。 然而,零信号在cAdvisor的处理中丢失:
`SetPSIStats ()'在集装箱/libcontainer/handler.go收到零*c组。 PSIStats和默默无所事事,留下信息。 PISSTAT以零值计算.
普罗米修斯收集器在度量衡/prometheus.go中读取了这些零值并释放出它们作为真正的度量. 由于CpuStats.PSI,DiskIoStats.PSI,和info/v1/container.go中的MuseumStats.PSI是等值类型(不是指针),编码无法将"PSI不可用"与"PSI值真正为零"区分开来.
可能的办法
将PSI字段改为指针类型(
PSI *PSIStats'而不是PSI PSIStats'),因此无表示无用。 当指针为零时,普罗米修斯采集器可以跳过度量. 这是突破性API更改.在现有的防扩散安全倡议领域外再增加一个`防扩散安全倡议支持 ' 布尔字段。 非破解,但增加了一个多余的字段,消费者必须记住去检查.
在创建管理器之前,在包括Mettrics的门外压力计量器中向呼叫者呼吁。 这就是Kubernetes目前所做的(Kubernetes/Kubernetes#137326),但它要求每位顾问消费者实施自己的PSI检测.
相关 Kubernetes/Kubernetes#13633 (原始错误报告) Kubernetes/Kubernetes#137326 (立体侧固定)
内容来源: google/cadvisor