huataihuang / cloud-atlas

云计算指南
https://cloud-atlas.readthedocs.io/
1.05k stars 178 forks source link

《Node Exporter smartctl 文本插件》文中命令有误 #32

Closed he-sb closed 1 year ago

he-sb commented 1 year ago
  1. 输出指标的命令,只有执行脚本时使用了 sudo 提权,但是管道连接的 sponge 命令没有加 sudo ,会导致无法在目标路径下生成指标文件
  2. crontab 命令没有使用 sudo 提权,且其中写入的命令也未加 sudo ,这个 cronjob 是没法生成指标文件的

图片

he-sb commented 1 year ago

还有一个文章没有提到的点, sponge 命令不是系统预装的,需要安装 moreutils 这个软件包才有

比如 Debian / Ubuntu 系统安装:

sudo apt install moreutils
huataihuang commented 1 year ago

感谢指正

我说明一下我的实践中为何没有遇到你说的这个问题(有一些巧合),另外,我会把你的指正和建议修订到文档中。谢谢

  1. 输出指标的命令,只有执行脚本时使用了 sudo 提权,但是管道连接的 sponge 命令没有加 sudo ,会导致无法在目标路径下生成指标文件

在我的原文中,创建目录 /var/lib/node_exporter/textfile_collector/ 设置了目录属性 777 ,也就是任何人都可以写入这个目录( 这个方式确实安全性不高 ):

image

所以,手工执行 smartmon.sh 脚本时候(这个脚本需要root权限运行以便能够读取smrt数据) 只需要在管道前面用 sudo ,而管道后后面没有 sudo 也能成功的原因

以下是当前这个 /var/lib/node_exporter/textfile_collector/ 的状态:

image

  1. crontab 命令没有使用 sudo 提权,且其中写入的命令也未加 sudo ,这个 cronjob 是没法生成指标文件的

原文写得不严谨,我忘记说明我在执行 crontab -e 时候,当时使用的是 root 账号执行的( 已经执行过 sudo su - 切换到了 root 账号身份),所以当时执行的 crontab -e 实际上是编辑的 root 账号下的 cron 。这也是为何我的实践没有报错的原因

非常感谢你指出这些细节偏差,我明天会修订一下文档,争取让读者能够更为顺利地理解和参考。

huataihuang commented 1 year ago

还有一个文章没有提到的点, sponge 命令不是系统预装的,需要安装 moreutils 这个软件包才有

感谢补充,我确实漏记录了,因为我确实单独安装过这个 moreutils 软件包,文档中没有记录

待修订

he-sb commented 1 year ago

按照 node-exporter 官方 推荐的方式 安装的话,默认情况下文件权限和 owner 归属限制的比较严格,所以会有这个问题,如果安装阶段就解决了权限问题的话,确实 sudo 不是必需的。

感谢老哥奉献的教程

huataihuang commented 1 year ago

确实,我当时求快,没有仔细按照官方文档进行,我再review一下,把这块补齐。

he-sb commented 1 year ago

按照 node-exporter 官方 推荐的方式 安装的话,默认情况下文件权限和 owner 归属限制的比较严格,所以会有这个问题,如果安装阶段就解决了权限问题的话,确实 sudo 不是必需的。

感谢老哥奉献的教程

再啰嗦一句,官方文档的安装方式,其实默认已经启用了 text-collector,监听路径形如 /var/lib/node_exporter/textfile_collector/*.prom 的指标文件 🙈

huataihuang commented 1 year ago

我参考你的建议重新订正了文档 Node Exporter smartctl 文本插件

image

# /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
he-sb commented 1 year ago

我参考你的建议重新订正了文档 Node Exporter smartctl 文本插件

* node-exporter 的 text colector 目录属主改为 `prometheus` ,也就是统一到 `prometheus` 和 `node_exporter` 的同一个运行账号下(都是用 `systemd` 管理运行)

image

* `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

太客气了老哥,你的分享是无价的,给你点赞 👍🏻️