Closed he-sb closed 1 year ago
还有一个文章没有提到的点, sponge
命令不是系统预装的,需要安装 moreutils
这个软件包才有
比如 Debian / Ubuntu 系统安装:
sudo apt install moreutils
感谢指正
我说明一下我的实践中为何没有遇到你说的这个问题(有一些巧合),另外,我会把你的指正和建议修订到文档中。谢谢
- 输出指标的命令,只有执行脚本时使用了
sudo
提权,但是管道连接的sponge
命令没有加sudo
,会导致无法在目标路径下生成指标文件
在我的原文中,创建目录 /var/lib/node_exporter/textfile_collector/
设置了目录属性 777
,也就是任何人都可以写入这个目录( 这个方式确实安全性不高 ):
所以,手工执行 smartmon.sh
脚本时候(这个脚本需要root权限运行以便能够读取smrt数据) 只需要在管道前面用 sudo
,而管道后后面没有 sudo
也能成功的原因
以下是当前这个 /var/lib/node_exporter/textfile_collector/
的状态:
crontab
命令没有使用sudo
提权,且其中写入的命令也未加sudo
,这个 cronjob 是没法生成指标文件的
原文写得不严谨,我忘记说明我在执行 crontab -e
时候,当时使用的是 root
账号执行的( 已经执行过 sudo su -
切换到了 root
账号身份),所以当时执行的 crontab -e
实际上是编辑的 root
账号下的 cron
。这也是为何我的实践没有报错的原因
非常感谢你指出这些细节偏差,我明天会修订一下文档,争取让读者能够更为顺利地理解和参考。
还有一个文章没有提到的点,
sponge
命令不是系统预装的,需要安装moreutils
这个软件包才有
感谢补充,我确实漏记录了,因为我确实单独安装过这个 moreutils
软件包,文档中没有记录
待修订
按照 node-exporter 官方 推荐的方式 安装的话,默认情况下文件权限和 owner 归属限制的比较严格,所以会有这个问题,如果安装阶段就解决了权限问题的话,确实 sudo
不是必需的。
感谢老哥奉献的教程
确实,我当时求快,没有仔细按照官方文档进行,我再review一下,把这块补齐。
按照 node-exporter 官方 推荐的方式 安装的话,默认情况下文件权限和 owner 归属限制的比较严格,所以会有这个问题,如果安装阶段就解决了权限问题的话,确实
sudo
不是必需的。感谢老哥奉献的教程
再啰嗦一句,官方文档的安装方式,其实默认已经启用了 text-collector,监听路径形如 /var/lib/node_exporter/textfile_collector/*.prom
的指标文件 🙈
我参考你的建议重新订正了文档 Node Exporter smartctl 文本插件
prometheus
,也就是统一到 prometheus
和 node_exporter
的同一个运行账号下(都是用 systemd
管理运行)crontab
配置采用系统配置文件完成,并且以 root
用户身份运行 smartctl
结合 prometheus
身份输出数据# /etc/cron.d/node_exporter_textfile_collector
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * root /etc/prometheus/node-exporter-textfile-collector-scripts/smartmon.sh | sudo -u prometheus sponge /var/lib/node_exporter/textfile_collector/smartmon.prom
我参考你的建议重新订正了文档 Node Exporter smartctl 文本插件
* node-exporter 的 text colector 目录属主改为 `prometheus` ,也就是统一到 `prometheus` 和 `node_exporter` 的同一个运行账号下(都是用 `systemd` 管理运行)
* `crontab` 配置采用系统配置文件完成,并且以 `root` 用户身份运行 `smartctl` 结合 `prometheus` 身份输出数据
# /etc/cron.d/node_exporter_textfile_collector PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin * * * * * root /etc/prometheus/node-exporter-textfile-collector-scripts/smartmon.sh | sudo -u prometheus sponge /var/lib/node_exporter/textfile_collector/smartmon.prom
太客气了老哥,你的分享是无价的,给你点赞 👍🏻️
sudo
提权,但是管道连接的sponge
命令没有加sudo
,会导致无法在目标路径下生成指标文件crontab
命令没有使用sudo
提权,且其中写入的命令也未加sudo
,这个 cronjob 是没法生成指标文件的