03. Prometheus - 数据采集(Exporter)

Exporter

在 Prometheus 的架构设计中,Prometheus Server 并不直接监控特定的目标,它主要任务是负责数据的收集,存储并且对外提供数据查询支持。

为了获取监控指标,就需要 Prometheus 周期性的从 Exporter 暴露的 HTTP 服务地址(/metrics)拉取数据。

同时,Exporter 也是一个相对开放的概念,它可以是一个独立运行的程序,也可以直接内置在监控目标中。只要能提供标准格式的监控样本数据即可。

目前官网已经提供了很多开箱即用的 Exporter:

https://prometheus.io/download/

如果需要更多的 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。

  1. 在两台测试服务器节点上下载安装:
# 下载
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 端口,访问查看:

image

配置 Server

在每次增加或者修改 Exporter 之后都需要配置 Prometheus Server。

  1. 修改主配置文件:
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. 访问查看:

image

自定义收集指标(textfile 收集器)

收集器通过扫描指定的目录的文件,提取所有格式为 prometheus 指标的字符串,然后暴露出来。

这些自定义指标可能是批处理或 corn 作业等无法抓取的,甚至是为主机提供上下文的静态指标。

  1. 自定义指标:
# 创建用于存放 textfile 收集器指标文件的目录
cd /ezops/service/exporter/node-exporter/
mkdir textfile

# 创建一条测试数据
echo 'user_textfile_test{env="test",name="textfile"} 1' > textfile/test.prom

注意,文件必须以 .prom 结尾才能采集。


  1. 修改 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

  1. 重启 Node Exporter:
systemctl daemon-reload
systemctl restart node-exporter

如图所示:

image

指标过滤

Node Exporter 的启动参数中本身是可以配置指标的过滤的,但是这样做每个节点都需要去配置,麻烦。所有 Prometheus 自己提供了对于指标的过滤配置:

  1. 修改 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

重启查看如图所示:

image

查询获取到的指标:

image

可以发现获取到三类指标:go,cpu,其它一些,像内存,磁盘这样就没有了。

posted @ 2022-08-20 22:47  不知名换皮工程师  阅读(1485)  评论(0编辑  收藏  举报