Thanos源码专题【左扬精讲】—— Thanos Query 与 Sidecar gRPC 网络连接状态的监控

Thanos Query 与 Sidecar gRPC 网络连接状态的监控与排查方法

        在分布式监控系统中,Thanos 已成为 Kubernetes 集群监控的事实标准。其核心组件 Thanos Query 与 Thanos Sidecar 通过 gRPC 协议实现高效的数据交互,但当网络连接出现异常时,如何快速定位问题并恢复服务成为运维团队的核心挑战。
    本文将结合 Thanos 官方文档与实际案例,系统阐述 Thanos Query 与 Sidecar gRPC 网络连接状态的监控与排查方法。

一、Thanos gRPC 通信原理

1.1 组件交互模型

Thanos Query 与 Sidecar 的通信基于 gRPC 双向流协议,核心流程如下:

    • Sidecar:通过 --grpc-address 暴露 gRPC 服务,接收 Query 的查询请求
    • Query:通过 --store 参数配置 Sidecar 的 gRPC 地址(支持 DNS SRV 记录)
    • 通信协议:基于 HTTP/2 的 gRPC,默认端口为 10902(Sidecar)和 10901(Store)

1.2 关键指标

Thanos 组件暴露的 gRPC 相关指标包括:

    • Sidecar 暴露指标:
      • grpc_server_handled_total:处理的总请求数
      • grpc_server_msg_received_total:接收的消息总数
      • grpc_server_msg_sent_total:发送的消息总数
    • Query 暴露指标:
      • thanos_query_frontend_grpc_client_handled_total:处理的客户端请求数
      • thanos_query_frontend_grpc_client_msg_sent_total:发送的消息总数
      • thanos_query_frontend_grpc_client_msg_received_total:接收的消息总数

二、监控方法

2.1 指标监控方案

2.1.1 Sidecar 端监控

配置 Prometheus 抓取 Sidecar 的 gRPC 指标,重点关注以下阈值:

groups:
- name: thanos_sidecar_grpc
  rules:
  - alert: ThanosSidecarGRPCDown
    expr: increase(grpc_server_handled_total[5m]) == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Thanos Sidecar gRPC 服务无响应"
      description: "Sidecar {{ $labels.instance }} 在过去5分钟内未处理任何 gRPC 请求"

2.1.2 Query 端监控

通过 Query 的指标验证网络通信链路:

groups:
- name: thanos_query_grpc
  rules:
  - alert: ThanosQueryGRPCFailure
    expr: rate(thanos_query_frontend_grpc_client_failed_total[5m]) > 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "Thanos Query gRPC 请求失败"
      description: "Query {{ $labels.instance }} 向 Sidecar 的 gRPC 请求失败率超过阈值"

2.2 Blackbox Exporter 探测

部署 Blackbox Exporter 实现端到端探测:

modules:
  grpc_health_probe:
    prober: grpc
    grpc:
      service: "grpc.health.v1.Health"
      preferred_ip_protocol: "ip4"

- job_name: thanos-sidecar-grpc
  metrics_path: /probe
  params:
    module: [grpc_health_probe]
  static_configs:
  - targets:
    - thanos-sidecar.default.svc:10902
  relabel_configs:
  - source_labels: [__address__]
    target_label: __param_target
  - source_labels: [__param_target]
    target_label: instance
  - target_label: __address__
    replacement: blackbox-exporter:9115

2.3 日志分析策略:

level=error ts=2025-03-01T12:00:00Z caller=sidecar.go:345 msg="error serving gRPC" err="rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.0.0.1:10902: connect: connection refused\""

2.4 Query 错误日志:

level=error ts=2025-03-01T12:05:00Z caller=query.go:456 msg="query execution failed" err="1 error occurred:\n\t* store API for thanos-sidecar.default.svc:10902: rpc error: code = DeadlineExceeded desc = latest connection error: connection error: desc = \"transport: Error while dialing dial tcp 10.0.0.1:10902: i/o timeout\""

三、故障排查实战

3.1 典型场景:gRPC 连接超时

3.1.1 问题现象

      • Query 界面报错:store API for thanos-sidecar.default.svc:10902: rpc error: code = DeadlineExceeded
      • Sidecar 指标显示:grpc_server_handled_total 停止增长

3.1.2 排查步骤

    1. 网络连通性检查:

      kubectl exec -it thanos-query-0 -- nc -zv thanos-sidecar.default.svc 10902
    2.  DNS 解析验证:

      kubectl exec -it thanos-query-0 -- nslookup thanos-sidecar.default.svc
    3.  资源限制检查:

      kubectl top pod thanos-sidecar-0
      kubectl describe pod thanos-sidecar-0 | grep -i "limits\|requests"
    4. 证书验证(mTLS 场景):
      检查 Sidecar 的 --grpc-tls-secret 配置与 Query 的 CA 证书匹配性

四、最佳实践

4.1 监控告警规则

groups:
- name: thanos_communication
  rules:
  - alert: ThanosGRPCCommunicationFailure
    expr: |
      (
        increase(thanos_query_frontend_grpc_client_failed_total[5m]) > 0
      or
        increase(grpc_server_handled_total{job="thanos-sidecar"}[5m]) == 0
      )
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "Thanos gRPC 通信故障"
      description: "Query 与 Sidecar 之间的 gRPC 通信中断,请立即检查网络配置和组件状态"

五、总结

Thanos Query 与 Sidecar 的 gRPC 网络连接状态监测需要结合指标监控、日志分析和网络探测等多维度手段。通过建立完善的监控告警体系,结合科学的故障排查流程,可以有效提升监控系统的可靠性。实际运维中,建议重点关注以下关键点:

    • 建立 gRPC 通信基线指标
    • 定期验证对象存储数据一致性
    • 实施连接池与安全策略优化
    • 建立跨组件依赖关系的可视化监控
posted @ 2025-05-19 16:24  左扬  阅读(63)  评论(0)    收藏  举报