最近遇到了一些场景,需要在宿主机安装 node-exporter 来监控指标:
- 某些指标只能在宿主机采集,容器内采集不方便 / 无法采集
- 某些机器有特定用途,不需要 / 无法安装 Docker
下面记录一下安装过程,系统环境基于 Debian 11 / 12,安装方式来自 node-exporter 的 官方文档(理论上 CentOS 以及 Ubuntu 系统也是一样的)。
首先从 release 下载并解压官方编译好的 node-exporter 二进制程序:
1
2
| $ curl -OL https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
$ tar -xvf node_exporter-1.6.0.linux-amd64.tar.gz
|
然后创建一个 node_exporter
用户,用来执行 node-exporter 程序:
1
| $ sudo useradd --no-create-home --shell /sbin/nologin node_exporter
|
将解压后的 node-exporter 程序移动到系统程序目录下,并将所属的用户和组信息修改为刚创建的 node-exporter
:
1
2
| $ sudo mv node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin/
$ sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
|
创建 systemd 配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $ sudo bash -c 'cat <<EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Requires=node_exporter.socket
[Service]
User=node_exporter
Group=node_exporter
EnvironmentFile=/etc/sysconfig/node_exporter
ExecStart=/usr/local/bin/node_exporter --web.systemd-socket $OPTIONS
[Install]
WantedBy=multi-user.target
EOF'
|
创建 systemd 使用的 socket 文件,监听 9100
端口:
1
2
3
4
5
6
7
8
9
10
| $ sudo bash -c 'cat <<EOF > /etc/systemd/system/node_exporter.socket
[Unit]
Description=Node Exporter
[Socket]
ListenStream=9100
[Install]
WantedBy=sockets.target
EOF'
|
同样,这两个 systemd 配置文件的所有权也要变更为 node-exporter
:
1
2
| $ sudo chown -R node_exporter:node_exporter /etc/systemd/system/node_exporter.service
$ sudo chown -R node_exporter:node_exporter /etc/systemd/system/node_exporter.socket
|
再创建一个配置文件,用于定义 node-exporter 除了监听端口之外的启动参数:
1
2
3
| $ sudo bash -c 'cat <<EOF > /etc/sysconfig/node_exporter
OPTIONS="--collector.textfile.directory /var/lib/node_exporter/textfile_collector"
EOF'
|
比如这里就开启了 text-collector 功能,这个功能是让 node-exporter 从指定位置的文件中采集指标信息,然后附加到自己采集到的其他指标中输出。Prometheus 社区贡献了 很多脚本 ,可以将许多 node-exporter 无法采集的指标(比如硬盘的 S.M.A.R.T 信息),转化为 Prometheus 支持的格式,然后写入文件中,这些指标就可以通过 node-exporter 的 text-collector 功能被采集,然后暴露给 Prometheus 拉取,进而可以让这些原本不支持 Prometheus 采集指标的程序,可以以一种相对优雅的方式,集成到围绕 Prometheus 构建的监控报警体系中去。
如果你不需要这个功能,那么 /etc/sysconfig/node_exporter
这个配置文件和下面将要创建的,用于存放供 text-collector 收集的指标文件的 /var/lib/node_exporter/textfile_collector
目录,都可以先不用配置,以后有需求时再配置也可以。
创建 text-collector 监听的指标文件存放路径,所有权同样改成 node-exporter
:
1
2
| $ sudo mkdir -p /var/lib/node_exporter/textfile_collector
$ sudo chown -R node_exporter:node_exporter /var/lib/node_exporter
|
最后,让 systemd 重载配置,然后启动 node-exporter,同时允许开机自启:
1
2
| $ sudo systemctl daemon-reload
$ sudo systemctl enable --now node_exporter
|
查看服务运行状态:
1
| $ sudo systemctl status node_exporter
|
最后记得在防火墙放行 node-exporter 配置的监听端口(俺这里是 9100
):
1
| $ sudo ufw allow 9100/tcp comment "node-exporter"
|
参考链接:
- node_exporter/examples/systemd at master · prometheus/node_exporter