03. Prometheus - 数据采集(Exporter)
Exporter
在 Prometheus 的架构设计中,Prometheus Server 并不直接监控特定的目标,它主要任务是负责数据的收集,存储并且对外提供数据查询支持。
为了获取监控指标,就需要 Prometheus 周期性的从 Exporter 暴露的 HTTP 服务地址(/metrics)拉取数据。
同时,Exporter 也是一个相对开放的概念,它可以是一个独立运行的程序,也可以直接内置在监控目标中。只要能提供标准格式的监控样本数据即可。
目前官网已经提供了很多开箱即用的 Exporter:
如果需要更多的 Exporter,可以去 Prometheus 的 Github 仓库中搜索:
https://github.com/orgs/prometheus/repositories?q=exporter&type=all&language=&sort=
也可以直接去 Github 上搜索其它用户自定义的 Exporter 或者自己自定义 Exporter。
Node Exporter
Node Exporter 是 Prometheus 官方提供的用于采集服务器的基础信息,如 CPU,磁盘,内存等资源的必备 Exporter。
- 在两台测试服务器节点上下载安装:
# 下载
cd /ezops/package/
wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0-rc.0/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
# 解压安装
tar -zxf node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
mkdir /ezops/service/exporter
mv node_exporter-1.4.0-rc.0.linux-amd64 /ezops/service/exporter/node-exporter
2. 添加启动文件:
cat > /etc/systemd/system/node-exporter.service << EOF
[Unit]
Description=Node Exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/ezops/service/exporter/node-exporter
ExecStart=/ezops/service/exporter/node-exporter/node_exporter
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
3. 启动服务:
systemctl daemon-reload
systemctl start node-exporter
systemctl status node-exporter
systemctl enable node-exporter
4. 此时服务会监听 9100 端口,访问查看:
配置 Server
在每次增加或者修改 Exporter 之后都需要配置 Prometheus Server。
- 修改主配置文件:
vim /ezops/service/prometheus/conf/prometheus.yml
内容如下:
# 全局配置
global:
# 设置抓取指标的时间间隔,默认一分钟
scrape_interval: 15s
# 告警规则检测的时间间隔,默认一分钟
evaluation_interval: 15s
# 抓取指标超时时间
# scrape_timeout: 10s
# Alertmanager
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 引入规则文件,并安装 evaluation_interval 定义的时间间隔去检测
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# 指标采集配置
scrape_configs:
# Prometheus 自身的指标数据,job_name 会被加入数据的标签中 job 字段
- job_name: "prometheus"
# 接口地址
# metrics_path: "/metrics"
# 协议
# scheme: "http"
# 节点配置
static_configs:
- targets: ["127.0.0.1:9090"]
# 新增Node Exporter 分组
- job_name: "node-exporter"
static_configs:
- targets:
- "192.168.200.101:9100"
- "192.168.200.102:9100"
2. 重启服务:
systemctl restart prometheus
3. 访问查看:
自定义收集指标(textfile 收集器)
收集器通过扫描指定的目录的文件,提取所有格式为 prometheus 指标的字符串,然后暴露出来。
这些自定义指标可能是批处理或 corn 作业等无法抓取的,甚至是为主机提供上下文的静态指标。
- 自定义指标:
# 创建用于存放 textfile 收集器指标文件的目录
cd /ezops/service/exporter/node-exporter/
mkdir textfile
# 创建一条测试数据
echo 'user_textfile_test{env="test",name="textfile"} 1' > textfile/test.prom
注意,文件必须以 .prom
结尾才能采集。
- 修改 Node Exporter 启动参数:
cat > /etc/systemd/system/node-exporter.service << EOF
[Unit]
Description=Node Exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/ezops/service/exporter/node-exporter
ExecStart=/ezops/service/exporter/node-exporter/node_exporter \\
--collector.textfile.directory /ezops/service/exporter/node-exporter/textfile
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
- 重启 Node Exporter:
systemctl daemon-reload
systemctl restart node-exporter
如图所示:
指标过滤
Node Exporter 的启动参数中本身是可以配置指标的过滤的,但是这样做每个节点都需要去配置,麻烦。所有 Prometheus 自己提供了对于指标的过滤配置:
- 修改 prometheus 主配置文件:
# 指标采集配置
scrape_configs:
...
- job_name: "node-exporter"
static_configs:
- targets:
- "192.168.200.101:9100"
- "192.168.200.102:9100"
params:
collect[]:
- cpu
# - meminfo
# - diskstats
# - netdev
# - systemd
重启查看如图所示:
查询获取到的指标:
可以发现获取到三类指标:go,cpu,其它一些,像内存,磁盘这样就没有了。