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:接收的消息总数
- Sidecar 暴露指标:
二、监控方法
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 排查步骤
-
网络连通性检查:
kubectl exec -it thanos-query-0 -- nc -zv thanos-sidecar.default.svc 10902
-
DNS 解析验证:
kubectl exec -it thanos-query-0 -- nslookup thanos-sidecar.default.svc
-
资源限制检查:
kubectl top pod thanos-sidecar-0 kubectl describe pod thanos-sidecar-0 | grep -i "limits\|requests"
- 证书验证(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 通信基线指标
- 定期验证对象存储数据一致性
- 实施连接池与安全策略优化
- 建立跨组件依赖关系的可视化监控

浙公网安备 33010602011771号