Node Exporter

Prometheus Node Exporter提供了一系列硬件和内核相关metric

备注

要输出 NVIDIA GPU ,需要使用 prometheus-dcgm

安装

备注

采用 Prometheus 社区helm chart 完成的 使用Helm 3在Kubernetes集群部署Prometheus和Grafana 会自动为每个Node节点安装 Node Exporter。强烈推荐采用!!!

  • 下载安装执行程序:

安装Node Exporter执行程序
version=1.6.1
wget https://github.com/prometheus/node_exporter/releases/download/v${version}/node_exporter-${version}.linux-amd64.tar.gz
tar xvfz node_exporter-${version}.linux-amd64.tar.gz
cd node_exporter-${version}.linux-amd64/
sudo mv node_exporter /usr/local/bin/

# 直接运行
/usr/local/bin/node_exporter

要持续运行可以采用 screen :

screen -S node_exporter -dm /usr/local/bin/node_exporter

备注

node_exporter 运行不需要root权限,并且会监听所有网络接口的 9100 端口,所以prometheus可以直接抓去指定服务器 node_exporter 输出的 metrics

一般账号用户直接运行 node_exporter ,则运行进程的owner就是这个一般用户账号,通常为了结合 Prometheus监控 运行,可以采用一致的 prometheus 账号结合 Systemd进程管理器 部署运行,见下文。

备注

macOS 上使用 Homebrew 安装 node_exporter :

在macOS安装 node_exporter
brew install node_exporter

我在 Apple Silicon 的 Mabbook上使用 node_exporter (GitHub) 提供的 release版本运行时会提示 "node_exporter" is damaged and can't e opened.You should move it to the Trash 提示弹窗,然后终端提示 zsh: killed     ./node_exporter --version 未找到解决方法。

结合 Systemd进程管理器 部署 node_exporter

配置 Node Exporter 服务,通过 Systemd进程管理器 运行
[Unit]
Description=node_exporter
Wants=network-online.target
After=network-online.target

StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

备注

运行 Node Exporter 的节点不需要使用 root 用户账号运行进程,可以采用 Prometheus快速起步 中配置的 prometheus 账号:

在操作系统中添加 prometheus 用户
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
  • 启动:

通过 systemctl 启动 node_exporter 服务
systemctl daemon-reload
systemctl enable --now node_exporter
systemctl status node_exporter

此时观察运行状态可以看到已经运行:

通过 systemctl 启动 node_exporter 服务的状态观察
● node_exporter.service - node_exporter
     Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-07-18 15:12:23 CST; 2min 37s ago
   Main PID: 484617 (node_exporter)
      Tasks: 5 (limit: 464040)
     Memory: 3.2M
        CPU: 20ms
     CGroup: /system.slice/node_exporter.service
             └─484617 /usr/local/bin/node_exporter

Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.618Z caller=node_exporter.go:117 level=info collector=thermal_zone
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.618Z caller=node_exporter.go:117 level=info collector=time
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.619Z caller=node_exporter.go:117 level=info collector=timex
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.619Z caller=node_exporter.go:117 level=info collector=udp_queues
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.619Z caller=node_exporter.go:117 level=info collector=uname
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.619Z caller=node_exporter.go:117 level=info collector=vmstat
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.619Z caller=node_exporter.go:117 level=info collector=xfs
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.619Z caller=node_exporter.go:117 level=info collector=zfs
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.619Z caller=tls_config.go:274 level=info msg="Listening on" address=[::]:9100
Jul 18 15:12:23 zcloud.staging.huatai.me node_exporter[484617]: ts=2023-07-18T07:12:23.620Z caller=tls_config.go:277 level=info msg="TLS is disabled." http2=false address=[::]:9100

快速部署

  • 一个简单的脚本,方便快速部署:

快速在被监控节点部署安装 Node Exporter 的脚本 install_node-exporter.sh
cd /tmp
version=1.6.1
curl https://onesre.cloud-atlas.io/download/node_exporter-${version}.linux-amd64.tar.gz -o node_exporter-${version}.linux-amd64.tar.gz
tar xvfz node_exporter-${version}.linux-amd64.tar.gz
cd node_exporter-${version}.linux-amd64/
sudo mv node_exporter /usr/local/bin/

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

curl https://onesre.cloud-atlas.io/download/node_exporter.service -o /etc/systemd/system/node_exporter.service
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl status node_exporter
执行安装
/bin/bash -c "$(curl -fsSL https://onesre.cloud-atlas.io/download/install_node-exporter.sh)"

Collectors (采集器)

node_exporter 可以在多种平台运行,在不同的操作系统支持多种collectors。 node_exporter 提供了两个开关参数来开启和关闭 collectors :

  • --collector.<name> 激活名为 <name> 的采集器

  • --no-collector.<name> 关闭名为 <name> 的采集器

请参考 node_exporter (GitHub) 官方文档中 node_exporter (GitHub) #Enabled by defaultnode_exporter (GitHub) #Disabled by default ,这样可以了解哪些采集器默认开启,哪些是默认关闭。对于默认开启和默认关闭的采集器,可以使用上述2个开关参数反向关闭或开启。

默认启用的采集器,如 Node Exporter的Textfile Collector扩展 必须设置 --collector.textfile.directory 参数,以便从本地磁盘目录读取并输出状态数据。

检查

  • 一旦 node_exporter 运行起来,可以检查metrics:

    curl http://localhost:9100/metrics
    

配置prometheus实例

我们在 Prometheus快速起步 安装的初始配置上添加以下内容来抓取指定服务器数据:

/etc/prometheus/prometheus.yml 中添加抓取node配置任务
...
scrape_configs:
...
  - job_name: "node"
    static_configs:
      - targets: ["localhost:9100"]

然后重启 prometheus ,再通过浏览器观察查询一些案例表达式,例如:

  • rate(node_cpu_seconds_total{mode="system"}[1m]) 表示在系统模式下每秒CPU消耗平均量,记录最近1分钟(每秒)

../../../../_images/node_exporter_cpu_time.png

配置Ceph节点监控

Ceph Dashboard集成Prometheus 采用的架构:

以下为Ceph监控部署

  • 在每个 Ceph 节点安装并运行 Prometheus Node Exporter:

    for i in {1..3};do ssh z-b-data-${i} "sudo apt install screen -y";done
    
    for i in {1..3};do scp node_exporter z-b-data-${i}:/home/huatai/;done
    
    for i in {1..3};do ssh z-b-data-${i} "sudo mv /home/huatai/node_exporter /usr/local/bin/node_exporter;screen -S node_exporter -dm /usr/local/bin/node_exporter";done
    
  • 然后修订 z-b-mon-1/etc/prometheus/prometheus.yml 继续在 job_name: "node" 添加受监控节点:

    - job_name: "node"
      static_configs:
      - targets: ['localhost:9100']
      - targets: ['z-b-data-1:9100']
      - targets: ['z-b-data-2:9100']
      - targets: ['z-b-data-3:9100']
    

备注

这里采用主机名,是因为我已经部署 私有云DNS服务(dnsmasq)和共享因特网(ICS) ,可以在任意主机上解析整个网络所有服务器

配置Grafana

Node Exporter Full 提供了一个全面观察的Dashboard, Import 之后可以看到惊人的 29 个分类超过 192 个面板,很多观察参数以前都没有注意过,在异常分析场景下可以帮助我们对比系统问题:

../../../../_images/node_exporter_full.png

部分 node_exporter 监控模块默认不启用(性能或采集消耗资源),如果要激活指定模块,可以通过修订 node_exporter 运行参数来增加,例如:

ExecStart=/usr/local/bin/node_exporter --collector.processes --collector.ntp

Complete Node Exporter Mastery with Prometheus 推荐了2个非常有意思的prometheus监控实践分享:

  • Prometheus Monitoring for Java Developers 关于如何在Java代码中中加入Prometheus 库实现白盒监控(metrics)以及常见的Java框架性能数据bridge成Prometheus进行监控(前半部分是Prometheus的基本功能介绍可作为入门)

参考