Node Exporter smartctl 文本插件¶
监控磁盘 SMART 数据,原理也是采用 Node Exporter的Textfile Collector扩展 ,并且 Prometheus社区提供了 node-exporter-textfile-collector-scripts 包含了 smartmon.sh
和 smartmon.py
来输出符合Prometheus文本采集的数据
准备工作¶
备注
我最初实践时求快,没有仔细琢磨配合 Node Exporter 部署的文件权限,采用了简单粗暴的 chmod 777
方法设置目录 /var/lib/node_exporter/textfile_collector
属性(方便运行脚本后能够任意向目录写入数据)。由于 IPMI工具ipmitool 和 存储设备S.M.A.R.T监控 都需要 root
权限,所以当时配置 crontab -e
使用的是 root
用户身份(原文未注明)。感谢网友 he-sb 指正( 《Node Exporter smartctl 文本插件》文中命令有误 #32 )
创建一个
/var/lib/node_exporter/textfile_collector/
用于存放--collector.textfile.directory
对应的*.prom
文件,以便转换成metrics:
sudo mkdir -p /var/lib/node_exporter/textfile_collector
# 目录属主按照 node_exporter 运行进程的owner设置
# 这里设置按 systemd 配置 node_exporter.service 的User/Group 以便 node_exporter 进程能够读取目录下文件
sudo chown prometheus:promethus /var/lib/node_exporter/textfile_collector
Prometheus社区提供了 node-exporter-textfile-collector-scripts ,将这些脚本下载到服务器上:
git clone git@github.com:prometheus-community/node-exporter-textfile-collector-scripts.git
sudo mv node-exporter-textfile-collector-scripts /etc/prometheus/
执行脚本¶
安装 sponge (以 Ubuntu Linux 为例,需要独立安装
moreutils
软件包以获得sponge
) :
apt install moreutils
社区脚本
smartmon.py
或smartmon.sh
都可以用于输出,注意手工执行时需要使用sudo
root权限( 存储设备S.M.A.R.T监控 以及 IPMI工具ipmitool 之类的底层命令需要超级权限):sudo /etc/prometheus/node-exporter-textfile-collector-scripts/smartmon.sh | sponge /var/lib/node_exporter/textfile_collector/smartmon.prom
问题来了,我这里要在 crontab
中配置既能够切换到 root
身份执行 smartmon.sh
,又能够切换到 prometheus
身份执行 sponge
,该如何配置 Cron定时运行 呢?
答案是结合 Cron定时运行 的执行命令身份字段和 sudo (不能使用 su
)。
先切换到 root
身份进行验证:
sudo su -
/etc/prometheus/node-exporter-textfile-collector-scripts/smartmon.sh | sudo -u prometheus sponge /var/lib/node_exporter/textfile_collector/smartmon.prom
然后检查采集到的数据:
ls -lh /var/lib/node_exporter/textfile_collector/
可以看到正确生成了metrics文本文件,并且属主是我们期望的 prometheus
-rw-rw-r-- 1 prometheus prometheus 124K Oct 10 15:10 smartmon.prom
检查
/var/lib/node_exporter/textfile_collector/smartmon.prom
内容无误之后,在/etc/cron.d
目录下添加配置文件node_exporter_textfile_collector
:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * root ipmitool sensor | sudo -u prometheus /etc/prometheus/node-exporter-textfile-collector-scripts/ipmitool | sudo -u prometheus sponge /var/lib/node_exporter/textfile_collector/ipmitool.prom
* * * * * root /etc/prometheus/node-exporter-textfile-collector-scripts/smartmon.sh | sudo -u prometheus sponge /var/lib/node_exporter/textfile_collector/smartmon.prom
备注
注意,这里配置 Cron定时运行 的第6列标明了执行脚本的用户账号是 root
,这样就能运行 ipmitool
以及 smartmon.sh
中的 smartctl
。此时,为了能够将输出结果切换到 prometheus
身份写磁盘,在管道符号后面使用了 sudo -u prometheus
,这样最终写入磁盘目录 /var/lib/node_exporter/textfile_collector
就能够以特定用户身份完成,增加安全性。
补充一下,这里使用 sudo -u prometheus
而没有使用 su prometheus -c "命令"
,是因为 prometheus
用户账号配置了 /sbin/nologin
作为SHELL,以防止该用户账号被登陆。这种情况下, su
命令切换身份执行会报错:
This account is currently not available.
而使用 sudo -u prometheus
则没有问题
配置 node_exporter
¶
备注
这部分准备工作我已经在 Node Exporter ipmitool 文本插件 完成
按照 Node Exporter 中 Systemd进程管理器 运行服务配置,修订 /etc/systemd/system/node_exporter.service
:
ExecStart=/usr/local/bin/node_exporter \
--collector.textfile.directory=/var/lib/node_exporter/textfile_collector
重启 node_exporter
服务
配置 Grafana Dashboard¶
在 Grafana通用可视分析平台 中 import
Grafana Dashboard 16514: SMART + NVMe status
改进版本(推荐)¶
其他¶
参考¶
Monitoring a mixed fleet of flash, HDD, and NVMe devices with node_exporter and Prometheus 这篇文档非常详细,并且提供了prometheus监控告警配置,可以参考用来发送告警消息