17.2.6 初始目标与自监控配置

初始目标与自监控配置的目标是让 Prometheus 在安装完成后即刻采集自身指标(/metrics),并作为后续新增目标的模板。最小可用配置包含 globalscrape_configs,其中 job_name: prometheus 是自监控作业。

原理草图(自监控链路):

文章图片

基础配置示例(完整可运行):

# /etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s      # 全局抓取频率
  scrape_timeout: 10s       # 全局抓取超时

scrape_configs:
  - job_name: "prometheus"  # 作业名称
    static_configs:
      - targets: ["127.0.0.1:9090"]  # 自监控目标

应用配置与重载(systemd 服务示例):

# 启动/重启 Prometheus(若已安装为 systemd 服务)
systemctl restart prometheus
systemctl status prometheus --no-pager

# 在线重载(若已启用 --web.enable-lifecycle)
curl -X POST http://127.0.0.1:9090/-/reload

关键命令解释:
- systemctl restart prometheus:加载新配置并重启服务。
- systemctl status prometheus:确认进程与监听端口。
- curl -X POST .../-/reload:不中断服务热加载配置(需启动参数支持)。

自监控验证步骤:

# 1) 目标是否可达
curl -s http://127.0.0.1:9090/targets | grep -A2 "prometheus"

# 2) 直接访问指标端点
curl -s http://127.0.0.1:9090/metrics | head -n 5

# 3) 使用 PromQL 验证
# 在 Prometheus UI /graph 查询以下表达式:
# up{job="prometheus"}
# prometheus_tsdb_head_series
# process_resident_memory_bytes

初期应关注的自监控指标与含义:
- up:目标可达性(1=可达,0=不可达)
- scrape_duration_seconds:抓取耗时
- scrape_samples_post_metric_relabeling:采样数量
- prometheus_tsdb_head_series:内存中时序规模
- process_resident_memory_bytes:进程常驻内存

常见问题与排错(含命令):
1) 目标显示 DOWN
原因:端口未监听或目标地址错误
排查:

ss -lntp | grep 9090
curl -s http://127.0.0.1:9090/-/healthy

2) 配置加载失败
原因:YAML 语法错误或缩进问题
排查:

promtool check config /etc/prometheus/prometheus.yml

3) 容器部署下目标不可达
原因:容器内外地址不一致
修复思路:使用容器网络内地址或 host.docker.internal(视平台而定)。

练习与巩固:
1) 将 scrape_interval 改为 5s,重载配置并观察 scrape_duration_seconds 的变化。
2) 新增一个自定义标签:

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["127.0.0.1:9090"]
        labels:
          env: "dev"

在 UI 查询:up{job="prometheus", env="dev"} 验证标签生效。
3) 观察 prometheus_tsdb_head_series 随时间变化并记录基线值,作为后续容量评估参考。