Prometheus 在微服务架构中的监控实践:
服务网格监控(Istio/Linkerd):
- 利用 Sidecar 代理收集指标
- 监控服务间调用关系
- 追踪请求链路
- 配置示例:
yamlscrape_configs: - job_name: 'istio-pilot' kubernetes_sd_configs: - role: endpoints namespaces: names: [istio-system] relabel_configs: - source_labels: [__meta_kubernetes_service_name] action: keep regex: istio-pilot
分布式追踪集成:
- 使用 OpenTelemetry 收集指标
- 与 Jaeger/Zipkin 集成
- 关联追踪和监控数据
服务依赖关系监控:
promql# 服务间调用延迟 histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, source, target) ) # 服务错误率 sum(rate(http_requests_total{status=~"5.."}[5m])) by (service) / sum(rate(http_requests_total[5m])) by (service)
金丝雀发布监控:
- 使用标签区分版本
- 对比新旧版本性能
- 自动回滚告警
配置示例:
yaml# 使用版本标签 scrape_configs: - job_name: 'api' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_label_version] target_label: version
SLA/SLO 监控:
promql# 错误率 SLO sum(rate(http_requests_total{status=~"5.."}[30d])) by (service) / sum(rate(http_requests_total[30d])) by (service) < 0.01 # 延迟 SLO histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[30d])) by (le, service) ) < 0.5
最佳实践:
-
统一命名规范:
- 使用标准化的指标名称
- 保持标签一致性
- 文档化指标含义
-
服务级别指标:
- RED 方法:Rate(请求率)、Errors(错误率)、Duration(延迟)
- USE 方法:Utilization(利用率)、Saturation(饱和度)、Errors(错误)
-
自动化监控:
- 通过注解自动发现服务
- 使用 Operator 自动配置
- 基础设施即代码
-
告警策略:
- 分级告警(P0/P1/P2/P3)
- 告警抑制和聚合
- 值班轮换和升级策略