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

如何在微服务架构中使用 Prometheus 进行监控?

2月21日 15:40

Prometheus 在微服务架构中的监控实践:

服务网格监控(Istio/Linkerd)

  • 利用 Sidecar 代理收集指标
  • 监控服务间调用关系
  • 追踪请求链路
  • 配置示例:
yaml
scrape_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

最佳实践

  1. 统一命名规范

    • 使用标准化的指标名称
    • 保持标签一致性
    • 文档化指标含义
  2. 服务级别指标

    • RED 方法:Rate(请求率)、Errors(错误率)、Duration(延迟)
    • USE 方法:Utilization(利用率)、Saturation(饱和度)、Errors(错误)
  3. 自动化监控

    • 通过注解自动发现服务
    • 使用 Operator 自动配置
    • 基础设施即代码
  4. 告警策略

    • 分级告警(P0/P1/P2/P3)
    • 告警抑制和聚合
    • 值班轮换和升级策略
标签:Prometheus