Node Exporter
Prometheus Node Exporter提供了一系列硬件和内核相关metric
备注
要输出 NVIDIA GPU ,需要使用 prometheus-dcgm
安装
备注
采用 Prometheus 社区helm chart 完成的 使用Helm 3在Kubernetes集群部署Prometheus和Grafana 会自动为每个Node节点安装 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
:
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
参考 Prometheus快速起步 的 Systemd进程管理器 配置,为
Node Exporter
配置一个服务/etc/systemd/system/node_exporter.service
[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
账号:
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
启动:
systemctl daemon-reload
systemctl enable --now node_exporter
systemctl status 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
快速部署
一个简单的脚本,方便快速部署:
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
执行安装类似 Homebrew :
/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 default 和 node_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分钟(每秒)

配置Ceph节点监控
Ceph Dashboard集成Prometheus 采用的架构:
在每个 ceph 节点安装 Node Exporter ,然后 Prometheus快速起步 安装配置成从各个Ceph抓取数据
Grafana通用可视分析平台 从 Prometheus 获取数据结合到 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 个面板,很多观察参数以前都没有注意过,在异常分析场景下可以帮助我们对比系统问题:

部分 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的基本功能介绍可作为入门)