17.4.8 常见采集故障排查与优化
常见采集故障排查与优化需从目标可达性、Exporter健康、抓取配置、标签设计与存储压力五个维度入手,结合Prometheus自身指标进行闭环定位。以下给出系统化排查流程、命令示例与练习,确保采集稳定、延迟可控与成本可预期。
一、抓取失败与目标不可达#
-
现象:Targets页面显示DOWN,
scrape_duration_seconds缺失或up=0。 -
排查步骤与命令
1. 网络连通性
```bash
# 基础连通性
ping -c 2 10.10.10.20# 端口连通
nc -zv 10.10.10.20 9100# 直接抓取Exporter
curl -sS http://10.10.10.20:9100/metrics | head
`` **说明**:nc -zv验证端口,curl`验证HTTP响应与指标内容。
-
服务监听检查(以node_exporter为例)
bash ss -lntp | grep 9100 systemctl status node_exporter journalctl -u node_exporter -n 50 --no-pager -
TLS/鉴权验证
bash # 若启用HTTPS与Bearer Token curl -sS --cacert /etc/prometheus/certs/ca.pem \ -H "Authorization: Bearer $(cat /etc/prometheus/token)" \ https://10.10.10.20:9100/metrics | head -
Prometheus抓取配置核查
bash # 查看配置与目标是否匹配 promtool check config /etc/prometheus/prometheus.yml
关键配置示例:
```yaml
# /etc/prometheus/prometheus.yml
scrape_configs:- job_name: 'node'
static_configs:- targets: ['10.10.10.20:9100']
```
- targets: ['10.10.10.20:9100']
- job_name: 'node'
- 优化建议
- 使用
relabel_configs过滤无效目标,减少无意义抓取。 -
对易波动目标加
drop策略,避免告警风暴。 -
练习
1. 故意关闭Exporter:systemctl stop node_exporter,观察Targets变化。
2. 恢复后确认up恢复为1,并在Graph中查询up{job="node"}。
二、采集超时与抓取过慢#
-
现象:
scrape_timeout触发,scrape_duration_seconds接近或超过timeout。 -
排查步骤与命令
1. Exporter性能
bash top -p $(pgrep -f node_exporter)
2. 依赖链路阻塞(应用Exporter)
bash curl -sS -w "\nTotal:%{time_total}s\n" http://10.10.10.30:9113/metrics >/dev/null
3. 抓取周期确认
bash grep -n "scrape_interval\|scrape_timeout" /etc/prometheus/prometheus.yml -
优化建议(配置示例)
```yaml
# /etc/prometheus/prometheus.yml
global:
scrape_interval: 30s
scrape_timeout: 10s
scrape_configs:
- job_name: 'heavy_app'
scrape_interval: 60s
scrape_timeout: 15s
metrics_path: /metrics
```
- 练习
1. 将某个job的scrape_interval设为5s,观察prometheus_target_scrapes_exceeded_sample_limit_total变化。
2. 调回30s并记录prometheus_target_scrape_pool_exceeded_label_limits_total是否下降。
三、指标缺失或异常波动#
-
现象:关键指标突然为空、断点或短时间内抖动。
-
排查步骤与命令
1. Exporter日志
bash journalctl -u node_exporter -n 100 --no-pager
2. 版本兼容性检查
bash node_exporter --version prometheus --version
3. 标签变更导致查询失配
promql # 对比标签集合是否变化 count by(instance,job)(up) -
优化建议
- 版本升级前对比
/metrics输出,记录指标名变化。 -
为关键指标做录制规则,平滑短期波动。
-
录制规则示例
```yaml
# /etc/prometheus/rules/recording.yml
groups:- name: node_recording
rules:- record: instance:cpu:avg
expr: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance)
```
- record: instance:cpu:avg
- name: node_recording
-
练习
1. 修改Exporter版本(或切换到旧版本容器)观察指标名变化。
2. 通过promtool check rules验证规则文件:
bash promtool check rules /etc/prometheus/rules/recording.yml
四、标签爆炸与高基数问题#
-
现象:时序数量暴涨、内存上涨、查询变慢。
-
排查步骤与命令
1. TSDB自监控
promql prometheus_tsdb_head_series prometheus_tsdb_head_chunks
2. 高基数标签定位
promql # 查看某指标的标签数量 count by (job)({__name__=~".+"})
3. Exporter输出检查
bash curl -sS http://10.10.10.40:9100/metrics | grep -E "request_id|session_id" | head -
优化建议(剔除高基数标签)
```yaml
# /etc/prometheus/prometheus.yml
scrape_configs:- job_name: 'app'
static_configs:- targets: ['10.10.10.40:9100']
metric_relabel_configs: - source_labels: [request_id,session_id]
action: labeldrop
```
- targets: ['10.10.10.40:9100']
- job_name: 'app'
-
练习
1. 人为加入一个动态标签(如请求ID)后,观察prometheus_tsdb_head_series变化。
2. 应用labeldrop后对比前后变化。
五、抓取与存储资源瓶颈#
-
现象:Prometheus CPU高、磁盘IO或容量压力大。
-
排查步骤与命令
1. 采集规模
promql count by(job)(up)
2. TSDB压缩与耗时
promql rate(prometheus_tsdb_compactions_total[5m]) prometheus_tsdb_compaction_duration_seconds_sum
3. 磁盘空间
bash du -sh /var/lib/prometheus df -h /var/lib/prometheus -
优化建议
- 调整保留周期与远程存储。
- 高查询频次建立录制规则。
-
拆分Prometheus实例或联邦。
-
保留周期与远程写示例
```yaml
# /etc/prometheus/prometheus.yml
global:
scrape_interval: 30s
storage:
tsdb:
retention_time: 15d
remote_write:
- url: "http://remote-storage:9201/api/v1/write"
```
六、采集配置最佳实践(含示例)#
- 超时与间隔:
timeout < interval,推荐1:2或1:3。 - 目标分组:按业务拆分Job,核心指标优先保障。
- 限流与保护:为Exporter配置系统层限流。
示例(按业务拆分):
scrape_configs:
- job_name: 'core'
scrape_interval: 15s
static_configs:
- targets: ['10.10.10.20:9100']
- job_name: 'non_core'
scrape_interval: 60s
static_configs:
- targets: ['10.10.10.30:9100']
七、典型问题速查表(含命令)#
- UP=0:网络不通/端口未监听/鉴权错误
命令:curl http://target:port/metrics - Timeout:Exporter响应慢/依赖阻塞/抓取周期过短
命令:curl -w "Total:%{time_total}s\n" http://target:port/metrics - 指标缺失:Exporter报错/版本变更/标签变动
命令:journalctl -u exporter -n 50 - 内存暴涨:标签爆炸/采集规模失控
命令:prometheus_tsdb_head_series - 查询慢:高基数查询/缺少录制规则
命令:top、/api/v1/query?query=...
通过以上排查路径与优化措施,并结合命令、配置与自监控指标,可快速定位采集问题根因,控制时序增长与性能风险,保障监控系统稳定运行与可持续扩展。