node_exporter 无法导出特定的卷/挂载点指标 - err="permission denied"

Posted

技术标签:

【中文标题】node_exporter 无法导出特定的卷/挂载点指标 - err="permission denied"【英文标题】:node_exporter unable to export specific volume/mount point metrics - err="permission denied" 【发布时间】:2021-02-23 09:50:14 【问题描述】:

我们在服务器上有 3 个磁盘

    /dev/nvme2n1p1 用于 root /dev/nvme0n1 for /data /dev/nvme1n1 for /data/postgresql/12/main/pg_wal

节点导出器可以将前 2 个挂载点的所有指标导出到 Prometheus 服务器,但对于第三个 (nvme1n1) 几个指标,它将无法导出。

它仍然可以为第三个导出以下指标

curl "http://localhost:9100/metrics"|grep nvme1n1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0node_disk_discard_time_seconds_totaldevice="nvme1n1" 0
node_disk_discarded_sectors_totaldevice="nvme1n1" 0
node_disk_discards_completed_totaldevice="nvme1n1" 0
node_disk_discards_merged_totaldevice="nvme1n1" 0
node_disk_io_nowdevice="nvme1n1" 0
node_disk_io_time_seconds_totaldevice="nvme1n1" 21338.728
node_disk_io_time_weighted_seconds_totaldevice="nvme1n1" 56694.8
node_disk_read_bytes_totaldevice="nvme1n1" 8.1892795904e+11
node_disk_read_time_seconds_totaldevice="nvme1n1" 4943.992
node_disk_reads_completed_totaldevice="nvme1n1" 3.130765e+06
node_disk_reads_merged_totaldevice="nvme1n1" 1948
node_disk_write_time_seconds_totaldevice="nvme1n1" 83561.291
node_disk_writes_completed_totaldevice="nvme1n1" 1.5033066e+07
node_disk_writes_merged_totaldevice="nvme1n1" 2.85686e+06
node_disk_written_bytes_totaldevice="nvme1n1" 3.1148191744e+12
node_filesystem_device_errordevice="/dev/nvme1n1",fstype="ext4",mountpoint="/data/postgresql/12/main/pg_wal" 1
100 84365    0 84365    0     0  13.4M      0 --:--:-- --:--:-- --:--:-- 13.4M

但它无法发送以下指标

node_filesystem_size_bytes
node_filesystem_avail_bytes
node_filesystem_free_bytes

这是调试日志中的错误:

Nov 12 14:39:10 host1 node_exporter[20020]: level=debug ts=2020-11-12T09:09:10.701Z caller=filesystem_linux.go:94 collector=filesystem msg="Error on statfs() system call" rootfs=/data/postgresql/12/main/pg_wal err="permission denied"

请告知这里有什么问题。谢谢

【问题讨论】:

【参考方案1】:

它可能对某人有帮助!

对该路径中的所有目录(/pg-data、/pg-data/postgresql、/pg-data/postgresql/12 等)给予 +rx – 对所有 (a+rx) 或组拥有它们并将节点导出器添加到该组。这不是安全问题,因为它允许任何人/该组ls -l 目录但不能访问其中的文件,除非这些文件的权限太宽。

我尝试了以下选项:

如果我更新 /pg-data/postgresql/12/main 文件夹的权限 (a+rx),则不会启动 postgres 服务。 我已尝试将 node_exporter 用户添加到 postgres 组,但没有效果。

由于上述步骤对我没有帮助,因此以 root 用户(systemd 单元)身份运行 node_exporter 服务起到了作用。

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
              

感谢MATT

现在在 Grafana 中可见的指标。

【讨论】:

以上是关于node_exporter 无法导出特定的卷/挂载点指标 - err="permission denied"的主要内容,如果未能解决你的问题,请参考以下文章

sh 查看附加的卷和挂载点

如何将挂载点的卷 GUID 转换为实际路径?

Linux的硬盘使用情况挂载SSD挂载(查看df -h不能看到的卷)

sh 请参阅apache容器中的卷大小和挂载绑定

shell脚本重新挂载出问题的卷

将 Virtualbox 共享文件夹挂载为在来宾操作系统上运行的 Docker 的卷