hyt05 zhuyaguang

首先将 Prometheus 的 SVC 进行更改,允许直接外部访问,然后访问下 Prometheus 的页面,看看 Status/Target 中监控目标的监控情况,确认是什么原因导致unhealthy,针对原因进行排查。

然后根据你描述的现象,大概率是采集节点kubelet的metrics/cadvisor出现了问题,可以尝试重启下节点的kubelet。

    frezes
    意识到有两个重复的会是这个原因导致的吗

    我可以正常的使用kubesphere 的Prometheus 中获取监控指标,重启了所有节点的 kubelet 依旧不能显示监控值, kubelet 日志没有错误抛出

      hyt05

      有两个重复的会是这个原因导致的吗

      跟kubelet 与kube-state-metrics 多个采集项没关系,他们是不同的uri或端口。

      我们以Pod 资源使用页面中的内存使用为例,进行排查,他的promql 表达式为sum by (namespace, pod) (container_memory_working_set_bytes{job="kubelet", pod!="", image!=""}) * on (namespace, pod) group_left(owner_kind, owner_name) kube_pod_owner{} * on (namespace, pod) group_left(node) kube_pod_info{} 你可以在 Prometheus 上验证下看是否有数据,这里的数值其实就是pod 的内存使用监控。

      若数据不正常,可再排查具体的指标,分别查询container_memory_working_set_bytes(来自于kubelet 的/metric/cadvisor) 及kube_pod_owner、kube_pod_info(来自于kube-state-metrics) 数据是否正常,进一步确认是采集哪里的指标除了问题;

      若数据正常,看看prometheus 是否是多副本,是否其中一个副本有问题,导致界面截图与实际查询副本不一致等。

        frezes

        container_memory_working_set_bytes{job=“kubelet”, pod!=""} 这一步可以

        Prometheus 执行 container_memory_working_set_bytes{job=“kubelet”, pod!="“, image!=”"} 无结果,

          hyt05 容器运行时是 containerd,网络插件是 cilium

          麻烦详细提供下 containerd 的版本,kubernetes 版本,系统环境等。
          检索相关 issue 好像是旧版 containerd 会有这个问题。可查阅google/cadvisor#2249.

            frezes
            我的 containerd 是 github.com/k3s-io/containerd v1.6.6-k3s1 2db3bba77eaff4705b6ea378b3bc7a237e770d7f

              hyt05 只是无法获取image标签,issue中的无法获取pod_name

              frezes 非常感谢该文档有帮助,我使用的 rke2 部署。是 1.24.2 的bug,
              我修改了 /etc/rancher/rke2/config.yaml
              所有节点增加如下两行,静候几分钟,即可正常显示pod指标监控,同样适用于 k3s。

              kubelet-arg:
                - "containerd=/run/k3s/containerd/containerd.sock"