Prometheus 在生产环境中的最佳实践:
架构设计:
- 高可用部署:
- 部署多个 Prometheus 实例
- 使用 Thanos 或 Cortex 实现长期存储
- 配置负载均衡分散查询压力
- 资源规划:
yamlresources: requests: memory: "4Gi" cpu: "2" limits: memory: "8Gi" cpu: "4"
- 数据保留策略:
yamlstorage: tsdb: retention.time: 15d retention.size: 50GB
监控指标设计:
- 命名规范:
- 使用下划线分隔
- 包含应用名称
- 使用标准单位(bytes、seconds)
- 示例:
http_requests_total、memory_usage_bytes
- 标签设计:
- 使用有意义的标签
- 避免高基数标签
- 保持标签一致性
- 示例:
job="api",instance="10.0.0.1:9090"
- 指标类型选择:
- Counter:累计值(请求数、错误数)
- Gauge:瞬时值(内存、CPU)
- Histogram:分布统计(延迟、响应大小)
- Summary:客户端分位数
告警策略:
- 分级告警:
yaml- alert: CriticalError expr: error_rate > 0.1 labels: severity: critical - alert: WarningError expr: error_rate > 0.05 labels: severity: warning
- 告警抑制:
yamlinhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'instance']
- 告警路由:
yamlroute: group_by: ['alertname', 'cluster'] group_wait: 10s group_interval: 10s repeat_interval: 12h receiver: 'default' routes: - match: severity: critical receiver: 'pagerduty'
安全配置:
- 认证和授权:
yamlbasic_auth: username: admin password: ${PROMETHEUS_PASSWORD}
- TLS 加密:
yamltls_config: cert_file: /etc/prometheus/certs/server.crt key_file: /etc/prometheus/certs/server.key client_ca_file: /etc/prometheus/certs/ca.crt
- 网络安全:
- 使用防火墙限制访问
- 配置 Kubernetes NetworkPolicy
- 使用 VPN 或私有网络
运维管理:
- 配置管理:
- 使用版本控制(Git)
- 使用 Helm 或 Operator 部署
- 实施变更审核流程
- 备份策略:
bash# 定期备份配置和数据 promtool tsdb snapshot /var/lib/prometheus/ /backup/
- 监控 Prometheus 自身:
promql# 健康状态 up{job="prometheus"} # 性能指标 prometheus_tsdb_head_samples_appended_total prometheus_query_duration_seconds_sum # 存储指标 prometheus_tsdb_storage_blocks_bytes
性能优化:
- 采集优化:
- 合理设置采集间隔
- 使用 Recording Rules
- 过滤不需要的指标
- 查询优化:
- 使用预计算规则
- 限制查询时间范围
- 使用标签过滤
- 存储优化:
- 配置数据压缩
- 定期清理旧数据
- 使用外部存储
文档和培训:
- 文档化:
- 监控架构文档
- 告警规则说明
- 故障处理流程
- 运维手册
- 培训:
- 团队培训计划
- 值班轮换制度
- 应急演练
持续改进:
- 定期审查:
- 审查告警规则
- 优化查询性能
- 清理无用指标
- 性能监控:
- 监控资源使用
- 分析查询性能
- 优化存储策略
- 安全审计:
- 定期安全检查
- 更新依赖版本
- 审查访问权限