跳转至

Node Problem Detector

Node Problem Detector 简称 NPD,是 Kubernetes 开源的集群节点监控插件,用于节点故障检查。

NPD 功能:

  • 产生事件信息,上报给 APIServer。
  • 检测指标信息,输出为 Metrics。

配置

前置条件

安装 NPD

可以参考安装文档,这里采用 yaml 的方式进行安装。

kubectl apply -f rbac.yaml
kubectl apply -f node-problem-detector-config.yaml
kubectl apply -f node-problem-detector.yaml

日志事件模式

默认安装 NPD 后,无需其他配置,Datakit 默认采集 Kubernetes 事件,存储至数据来源是 Kubernetes_events 的日志reason(tag)中。

指标模式

除了事件模式外,NPD 也支持输出指标

准备工作

DataKit 开启 ServiceMonitor

自动发现 Pod/Service 的 Prometheus 指标

以下通过ServiceMonitor方式采集 NPD 指标信息

  • 调整 node-problem-detector.yaml
...
      - name: node-problem-detector
        command:
        - /node-problem-detector
        - --logtostderr
        - --config.system-log-monitor=/config/kernel-monitor.json,/config/docker-monitor.json
        - --address=0.0.0.0
        - --prometheus-address=0.0.0.0
...
        ports:
        - containerPort: 20257
          hostPort: 20257
          name: man-port
  • 创建 npd-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: node-problem-detector
  namespace: kube-system
  labels:
    app: node-problem-detector
spec:
  selector:
    app: node-problem-detector
  ports:
    - protocol: TCP
      port: 20257
      targetPort: 20257
      name: metrics
  • 创建 npd-server-monitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: npd-server-metrics
  labels:
    app: node-problem-detector
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: node-problem-detector
  endpoints:
  - port: metrics
    params:
      measurement:
        - node-problem-detector
  • 执行
kubectl apply -f rbac.yaml
kubectl apply -f node-problem-detector-config.yaml
kubectl apply -f node-problem-detector.yaml
kubectl apply -f npd-service.yaml
kubectl apply -f npd-server-monitor.yaml

指标

problem_gauge

Tag 描述
type="ConntrackFullProblem" 节点链接跟踪表故障
type="EmptyDirVolumeGroupStatusError" 临时卷存储池故障
type="MemoryProblem" 节点内存故障
type="LocalPvVolumeGroupStatusError" 节点上持久卷存储池故障
type="MountPointProblem" 节点挂载点故障
type="FDProblem" 系统关键资源FD文件句柄数故障
type="DiskHung" 节点磁盘是否存在卡 IO
type="DiskReadonly" 节点磁盘是否只读
type="DiskProblem" 节点系统盘故障
type="DiskSlow" 节点磁盘是否存在慢 IO 故障
type="FrequentCRIRestart" CRI 频繁重启
type="FrequentDockerRestart" Docker 频繁重启
type="FrequentKubeletRestart" Kubelet 频繁重启
type="FrequentContainerdRestart" Containerd 频繁重启
type="NTPProblem" ntpd 同步异常
type="PIDProblem" 系统关键资源 PID 进程资源不足
type="ResolvConfFileProblem" ResolvConf 配置异常
type="CNIProblem" CNI(容器网络)组件异常
type="CRIProblem" 组件CRI(容器运行时组件)Docker 或 Containerd 的运行状态异常
type="KUBEPROXYProblem" Kube-proxy 运行异常
type="KUBELETProblem" Kubelet 状态异常
type="ScheduledEvent" 点是否存在主机计划事件
type="ProcessD" 节点存在 D 进程
type="ProcessZ" 节点存在 Z 进程

日志

以下列表包含但不限于默认配置下 NPD 能够检测的事件,事件写入至数据来源为Kubernetes_events的日志中:

原因 持久性 描述
DockerHung Docker 挂起或无响应
ReadonlyFilesystem 文件系统被挂载为只读模式,通常是一种保护机制,在某些情况下防止文件系统损坏
CorruptDockerOverlay2 Overlay2 存储驱动存在问题
ContainerdUnhealthy Containerd 处于非健康状态
KubeletUnhealthy Kubelet 处于非健康状态
DockerUnhealthy Docker 处于非健康状态
OOMKilling Kubernetes 因 OOM 结束 Pod
TaskHung 任务挂起
UnregisterNetDevice 网络接口异常
KernelOops 内核检测到的异常行为,例如:空指针、设备错误
Ext4Error Ext4 文件系统问题
Ext4Warning Ext4 文件系统问题
IOError 缓冲区问题
MemoryReadError 可被修复的内存错误,频繁发生意味着内存硬件可能出现问题
KubeletStart Kubelet 启动,频繁出现意味 Kubelet 频繁重启
DockerStart Docker 启动,频繁出现意味 Docker 频繁重启
ContainerdStart Containerd 启动,频繁出现意味 Containerd 频繁重启
CorruptDockerImage Docker registry 使用的目录不为空
DockerContainerStartupFailure Docker 无法启动
ConntrackFull 网络连接跟踪数满,将影响 NAT、防火墙等网络功能
NTPIsDown NTP时间同步异常

文档评价

文档内容是否对您有帮助? ×