写点什么

Node Exporter 可观测性最佳实践

作者:观测云
  • 2024-11-18
    上海
  • 本文字数:3892 字

    阅读完需:约 13 分钟

Node Exporter 可观测性最佳实践

Node Exporter 介绍

Node Exporter 是一个开源的 Prometheus 指标收集器,它提供了大量关于宿主机系统的关键指标,如 CPU、内存、磁盘和网络使用情况。在 Kubernetes 环境中,Node Exporter 对于监控集群节点的健康状况至关重要。本文将介绍如何在 Kubernetes 环境中部署 Node Exporter,并通过 DataKit 采集器将指标通过观测云进行监控和展示。


主要功能:


  • 系统监控:Node Exporter 能够采集主机包括 CPU 使用情况、内存使用量、磁盘 I/O 统计、网络流量等关键系统指标。

  • 低依赖性:Node Exporter 用 Go 语言编写,无需第三方依赖,易于部署和运行。

  • 配置灵活性:提供多种启动参数,允许用户自定义监听端口、数据路径、日志级别等设置。

  • 数据格式兼容:输出的数据格式遵循 Prometheus 标准,确保与 Prometheus 服务器的兼容性。

  • 多种部署方式:支持二进制直接部署和 Docker 容器部署,适应不同的生产环境。

观测云

观测云是一款功能强大的统一可观测平台,它提供了对多云环境、云原生应用、中间件以及各类应用程序的实时监控和分析能力。


部署在 Kubernetes 集群中的 Node Exporter 会暴露一个 metrics 端点,DataKit 通过这个端点拉取指标数据。DataKit 通过 ConfigMap 挂载额外的配置文件,或者通过环境变量直接在 Kubernetes 的 DaemonSet 配置中设置。这样,DataKit 就可以根据用户的配置,定期从 Node Exporter 收集指标数据,并将其发送到观测云平台。下面介绍在主机部署 Node Exporter 组件,采集主机指标并通过 DataKit 进行收集、存储,最后通过观测云用于数据的可视化展示。

操作步骤

安装 Node Exporter

在 k8s 环境中创建 DaemonSet 配置文件 node-exporter.yaml


apiVersion: apps/v1kind: DaemonSetmetadata:  name: node-exporter  namespace: monitor-sa  labels:    name: node-exporterspec:  selector:    matchLabels:     name: node-exporter  template:    metadata:      labels:        name: node-exporter    spec:      hostPID: true        # 使用主机的PID      hostIPC: true        # 使用主机的IPC      hostNetwork: true    # 使用主机的网络      containers:      - name: node-exporter        image: quay.io/prometheus/node-exporter:v0.18.1        ports:        - containerPort: 9100        resources:          requests:            cpu: 0.15        securityContext:          privileged: true        args:        - --path.procfs        - /host/proc        - --path.sysfs        - /host/sys        - --collector.filesystem.ignored-mount-points        - '"^/(sys|proc|dev|host|etc)($|/)"'        volumeMounts:        - name: dev          mountPath: /host/dev        - name: proc          mountPath: /host/proc        - name: sys          mountPath: /host/sys        - name: rootfs          mountPath: /rootfs      tolerations:      - key: "node-role.kubernetes.io/master"        operator: "Exists"        effect: "NoSchedule"      volumes:        - name: proc          hostPath:            path: /proc        - name: dev          hostPath:            path: /dev        - name: sys          hostPath:            path: /sys        - name: rootfs          hostPath:            path: /
---
apiVersion: v1kind: Servicemetadata: name: node-exporter namespace: monitor-saspec: type: ClusterIP ports: - name: http port: 9100 protocol: TCP targetPort: 31672 selector: name: node-exporter
复制代码


然后执行以下命令:


kubectl create ns monitor-sakubectl apply -f node-exporter.yaml
复制代码


执行完毕后,可通过 http://主机ip:31672/metrics 查看当前主机获取到的所有监控数据。

部署 DataKit

登录观测云控制台,点击「集成」 -「DataKit」 - 「Kubernetes」,下载 datakit.yaml ,拷贝第 3 步中的 token 。



编辑 datakit.yaml ,把 token 粘贴到 ENV_DATAWAY 环境变量值中“token=”后面,设置环境变量 ENV_CLUSTER_NAME_K8S 的值并增加环境变量 ENV_NAMESPACE ,这两个环境变量的值一般和集群名称对应,一个工作空间集群名称要唯一。


        - name: ENV_NAMESPACE          value: xxxx
复制代码



datakit.yaml 上传到可以连接到 Kubernetes 集群的主机上,执行如下命令:


kubectl apply -f datakit.yamlkubectl get pod -n datakit
复制代码


datakit.yaml 中配置 ConfigMap 资源来收集 Node Exporter 的指标数据。


apiVersion: v1kind: ConfigMapmetadata:  name: datakit-conf  namespace: datakitdata:    kubernetesprometheus.conf: |-      [inputs.kubernetesprometheus]        node_local = true  # 是否开启 NodeLocal 模式,将采集分散到各个节点        [[inputs.kubernetesprometheus.instances]]            role       = "service"     # 必填 可以配置为 service、pod、endpoints、node            namespaces = ["monitor-sa"]    # 非必填,支持配置多个,以逗号隔开,为空会匹配所有            selector   = ""       # 非必填,被采集资源的labels,用来匹配选择需要采集的对象 ,为空会匹配所有
scrape = "true" # 非必需 采集开关,默认true, scheme = "http" port = "__kubernetes_service_port_%s_port " path = "/metrics" # 非必填 大部分prometheus采集路径都为/metrics,具体以被采集服务实际指标地址为准 params = "" # 非必填 http 访问参数,是一个字符串,例如 name=nginx&package=middleware,非必需 interval = "30s" # 非必填 采集频率,默认30s
[inputs.kubernetesprometheus.instances.custom] measurement = "kube_NodeExporter" #非必填 观测云指标名,默认使用指标下划线第一个字母 job_as_measurement = false #非必填 是否使用数据中的 job 标签值当做指标集名 [inputs.kubernetesprometheus.instances.custom.tags] instance = "__kubernetes_mate_instance" #可选 指标tag host = "__kubernetes_mate_host" #可选 指标tag pod_name = "__kubernetes_pod_name" #可选 指标tag pod_namespace = "__kubernetes_pod_namespace" #可选 指标tag,可以继续新增,这里不继承全局tag和选举tag
复制代码


然后在 datakit.yaml 中的 volumeMounts 下挂载 kubernetesprometheus.conf


- mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf  name: datakit-conf  subPath: kubernetesprometheus.conf  readOnly: true
复制代码


最后,执行以下命令重启 datakit


kubectl delete -f datakit.yamlkubectl apply -f datakit.yaml
复制代码

关键指标

登录观测云控制台,点击「指标」 -「指标管理」,输入“NodeExporter”,就能查询采集到的指标。




监控 Node Exporter 采集的主机指标时,主要需要从以下维度进行,通过综合监控这些维度,可以确保主机的高效运行和稳定性:


  • 系统运行情况:包括 CPU、内存、磁盘以及网络相关信息。

  • 系统资源使用:监控系统资源的使用情况,以优化资源分配并避免瓶颈。

  • 硬件状态:监控硬件健康状态,预防硬件故障

  • 服务健康度:监控系统服务的状态,确保服务的连续可用性。


以下是 Node Exporter 采集主机指标的关键指标目录:



重点指标说明

  • node_network_receive_bytes_totalnode_network_transmit_bytes_total :这两个指标反映了主机的网络流量情况,对于监控网络性能和排查网络问题至关重要。

  • node_memory_Active_bytesnode_memory_Inactive_bytes :这两个指标帮助监控内存的使用情况,区分活跃和非活跃内存,对于内存优化和故障排查很有帮助。

  • node_disk_io_nownode_disk_io_time_seconds_total :这两个指标反映了磁盘 I/O 的负载和性能,高 I/O 负载可能影响系统性能。

  • node_cpu_seconds_total :这个指标反映了 CPU 的使用情况,对于监控 CPU 性能和负载非常重要。

  • node_filesystem_size_bytesnode_filesystem_free_bytesnode_filesystem_avail_bytes :这些指标反映了文件系统的使用情况,对于容量规划和性能优化至关重要。


通过监控这些关键指标,可以确保主机系统的稳定运行,及时发现并解决潜在的性能问题。

监控视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “Node Exporter ”, 选择 “Node Exporter 监控视图”,点击 “确定” 即可添加内置视图:



监控器(告警)

  • 主机内存使用率过高




  • 主机磁盘使用率过高




  • 主机 CPU 使用率过高



总结

通过监控 Node Exporter 采集的主机关键指标,比如 CPU 使用率、内存和磁盘的 I/O 性能、网络流量和错误率、以及系统服务状态等,我们能够深入理解服务器的运行状况。这些指标覆盖了系统资源的使用情况、硬件健康状态、服务可用性以及网络效率,为我们提供了全面的系统性能视图。通过综合监控这些关键指标,可以及时发现并解决潜在的性能问题和故障,从而确保主机的高效运行和稳定性。这种持续的监控和分析对于维护服务器的最优性能和进行有效的容量规划至关重要。

用户头像

观测云

关注

还未添加个人签名 2021-02-08 加入

云时代的系统可观测平台

评论

发布
暂无评论
Node Exporter 可观测性最佳实践_Node Exporter_观测云_InfoQ写作社区