侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Prometheus(2)之使用Node Exporter采集数据

zze
zze
2021-04-19 / 0 评论 / 0 点赞 / 1365 阅读 / 5512 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

安装启动

官网下载二进制包:

$ 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,启动成功后浏览器访问效果如下:

image.png

配置 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 键值则说明数据成功采集了:

image.png

配置 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 查看自定义指标:

image.png

为效果明显我这里在三台主机上都装上了 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"}

结果如下:

image.png

过滤收集

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 收集器生成的指标, 所有其他指标都将被忽略。

0

评论区