乐闻世界logo
搜索文章和话题

如何排查 Prometheus 的常见故障?

2月21日 15:37

Prometheus 故障排查和常见问题解决:

Prometheus 无法启动

  1. 检查配置文件语法:
bash
promtool check config /etc/prometheus/prometheus.yml
  1. 检查端口占用:
bash
lsof -i :9090
  1. 查看日志:
bash
journalctl -u prometheus -f

数据采集失败

  1. 检查目标健康状态:
promql
up{job="your-job"}
  1. 检查网络连通性:
bash
curl http://target:port/metrics
  1. 检查认证配置:
  • Basic Auth 用户名密码
  • TLS 证书有效性
  • Bearer Token 是否过期

查询性能问题

  1. 优化查询语句:
  • 减少时间范围
  • 使用标签过滤
  • 避免全量扫描
  1. 使用 Recording Rules:
yaml
groups: - name: performance rules: - record: job:requests:rate5m expr: sum by (job) (rate(http_requests_total[5m]))
  1. 监控查询性能:
promql
prometheus_query_duration_seconds_sum prometheus_query_duration_seconds_count

内存使用过高

  1. 调整数据保留时间:
yaml
storage: tsdb: retention.time: 7d
  1. 过滤不必要的指标:
yaml
metric_relabel_configs: - source_labels: [__name__] regex: 'expensive_.*' action: drop
  1. 监控内存指标:
promql
process_resident_memory_bytes prometheus_tsdb_memory_series

磁盘空间不足

  1. 检查数据大小:
bash
du -sh /var/lib/prometheus/
  1. 配置数据保留策略:
yaml
storage: tsdb: retention.time: 15d retention.size: 10GB
  1. 清理旧数据:
bash
promtool tsdb delete-blocks /var/lib/prometheus/ --min-time=2024-01-01T00:00:00Z

告警不触发

  1. 检查告警规则:
bash
promtool check rules /etc/prometheus/rules/*.yml
  1. 检查告警状态:
promql
ALERTS{alertname="your-alert"}
  1. 检查 Alertmanager 连接:
promql
prometheus_notifications_queue_length

TSDB 损坏

  1. 检查 TSDB 健康状态:
bash
promtool tsdb analyze /var/lib/prometheus/
  1. 尝试恢复:
bash
promtool tsdb repair /var/lib/prometheus/
  1. 备份和恢复:
bash
# 备份 promtool tsdb snapshot /var/lib/prometheus/ /backup/ # 恢复 cp -r /backup/* /var/lib/prometheus/

常见错误代码

  • context deadline exceeded:查询超时
  • invalid parameter:参数错误
  • out of order sample:样本乱序
  • duplicate series:重复序列

最佳实践

  1. 定期备份配置和数据
  2. 监控 Prometheus 自身指标
  3. 设置合理的资源限制
  4. 使用日志聚合工具
  5. 建立故障处理流程
标签:Prometheus