安装启动
官网下载二进制包:
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
创建安装目录:
$ mkdir -p /opt/apps/node_exporter/bin/
解压并移动文件:
$ tar xf node_exporter-1.0.1.linux-amd64.tar.gz
$ cd node_exporter-1.0.1.linux-amd64/
$ mv node_exporter /opt/apps/node_exporter/bin/
创建 Systemd 配置文件:
$ cat > /lib/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node exporter
After=network.target
[Service]
Type=simple
ExecStart=/opt/apps/node_exporter/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
启动服务并设置开机自启:
$ systemctl start node_exporter && systemctl enable node_exporter
node_exporter 服务默认监听端口为 9090,启动成功后浏览器访问效果如下:
配置 Prometheus
在 Prometheus 配置文件中添加如下 Job:
$ vim /opt/apps/prometheus/conf/prometheus.yml
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 采集node exporter监控数据
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
重启 Prometheus:
$ systemctl restart prometheus
检查如果存在从 node
Job 采集到的 up
键值则说明数据成功采集了:
配置 textfile 收集器
textfile 收集器非常有用,因为它允许我们暴露自定义指标。
收集器通过扫描指定目录中的文件,提取所有格式为 Prometheus 指标的字符串, 然后暴露它们以便抓取。
现在让我们设置收集器, 首先创建一个目录来保存指标定义文件。
$ mkdir -p /opt/apps/node_exporter/conf/
现在在这个目录中创建一个配置文件定义新的指标,这个文件需要以 .prom
结尾, 并且内容需要使用 Prometheus 特定文本格式。
以在该目录下创建一个 metadata.prom
配置文件为例,其内容如下:
metadata{role="master"} 1
要启用 textfile 收集器, 我们不需要配置参数, 它默认就会被加载。 但我们需要指定 textfile_exporter 目录, 以便 Node Exporter 知道在哪里可以找到自定义指标。 为此, 我们需要指定 --collector.textfile.directory
参数。
修改 node_exporter 的 Systemd Service 文件的启动命令:
...
ExecStart=/opt/apps/node_exporter/bin/node_exporter \
--collector.textfile.directory /opt/apps/node_exporter/conf
...
重启 node_exporter 服务:
$ systemctl daemon-reload && systemctl restart node_exporter
在 Prometheus 查看自定义指标:
为效果明显我这里在三台主机上都装上了 node_exporter 服务,并且为它们通过 textfile 收集器配置了自定义指标。
启用 systemd 收集器
这里我们再启用另一个 systemd 收集器, 它记录 systemd 中的服务和系统状态。 这个收集器收集了很多指标, 但我们并不想收集 systemd 管理的所有内容, 而只想收集某些关键服务。 为了保持简洁,我们可以将特定服务列入白名单, 只收集以下服务的指标:
- docker.service
- ssh.service
- kube-apiserver.service
- kube-controller-manager.service
- kube-scheduler.service
- kubelet.service
- kube-proxy.service
使用 --collector.systemd.unit-whitelist
参数进行配置, 它会匹配 systemd 的正则表达式。
再次修改 node_exporter 的 Systemd Service 文件的启动命令:
...
ExecStart=/opt/apps/node_exporter/bin/node_exporter \
--collector.textfile.directory /opt/apps/node_exporter/conf \
--collector.systemd \
--collector.systemd.unit-whitelist "(docker|ssh|kube-apiserver|kube-controller-manager|kube-scheduler|kubelet|kube-proxy).service"
...
重启 node_exporter 服务:
$ systemctl daemon-reload && systemctl restart node_exporter
接下来就可以在 Prometheus 面板中查看到采集到的信息了,以查看 kube-apiserver
服务为启用状态的数据为例,使用如下 PromQL:
node_systemd_unit_state{name="kube-apiserver.service",state="active"}
结果如下:
过滤收集
Node Exporter 可以返回很多指标,也许你并不想把它们全部收集上来。 除了通过本地配置来控制 Node Exporter 在本地运行哪些收集器之外, Prometheus 还提供了一种方式来限制收集器从服务器端实际抓取的数据。
Prometheus 通过添加特定收集器列表来实现作业配置,修改 Prometheus 服务抓取配置如下:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets:
- 'k8s-master1:9100'
- 'k8s-master2:9100'
- 'k8s-node1:9100'
params:
collect[]:
- cpu
- meminfo
- diskstats
- netdev
- netstat
- filefd
- filesystem
- xfs
- systemd
这里,我们将被抓取的指标限制在上面的收集器列表中, 使用 params
块中的 collect[]
列表指定, 然后将它们作为 URL 参数传递给抓取请求。 你可以使用 Node Exporter 实例上的 curl
命令来对此进行测试。
$ curl -g -X GET 10.0.1.112:9100/metrics?collect[]=systemd
这将返回 Node Exporter 基本 Go 指标, 以及 systemd 收集器生成的指标, 所有其他指标都将被忽略。
评论区