Apache ShardingSphere 可观测性体系
🌐 可观测性架构全景
⚙️ 三层可观测体系
1. Metrics(指标监控)
- 核心指标类型:
pie title 指标分布
"SQL 执行" : 35
"连接池" : 25
"资源使用" : 20
"分布式事务" : 15
"其他" : 5
- 关键指标示例:
指标名称 类型 描述 shardingsphere_proxy_requests_total
Counter SQL 请求总数 shardingsphere_proxy_execute_latency_milliseconds
Histogram SQL 执行延迟 shardingsphere_proxy_connections
Gauge 当前活跃连接数 shardingsphere_proxy_transactions_active
Gauge 活跃事务数
2. Tracing(链路追踪)
-
追踪上下文传递:
-
Span 关键操作:
- SQL 解析
- 分片路由
- SQL 改写
- 执行引擎
- 结果归并
3. Logging(日志管理)
- 日志分类体系:
shardingsphere/ ├── sql/ │ ├── debug.log # SQL调试日志 │ └── audit.log # SQL审计日志 ├── transaction/ │ └── xa.log # 分布式事务日志 └── proxy/ └── access.log # 代理访问日志
🛠️ 配置实战指南
1. 启用 Prometheus 监控
# server.yaml
rules:
- !OBSERVABILITY
metric:
name: prometheus
props:
prometheus-port: 9090 # 暴露端口
jvm-information: true # 包含JVM指标
2. 集成 Jaeger 追踪
- !OBSERVABILITY
tracing:
name: jaeger
props:
service-name: sharding-proxy
jaeger-url: http://jaeger:14268/api/traces
sampler-type: probabilistic # 采样类型
sampler-param: 0.1 # 采样率10%
3. 日志动态配置
/* 通过DistSQL管理日志 */
SET VARIABLE log.level = DEBUG; -- 动态调整日志级别
SET VARIABLE sql.show = true; -- 开启SQL显示
SHOW VARIABLE log.level; -- 查看当前日志级别
📊 生产级监控体系构建
1. 健康检查接口
curl http://proxy_ip:3307/health
# 响应示例
{
"status": "UP",
"components": {
"database": { "status": "UP" },
"circuitBreaker": { "status": "UP" }
}
}
2. 关键告警规则(PromQL)
# SQL错误率超过1%
100 * sum(rate(shardingsphere_proxy_execute_errors_total[5m]))
/ sum(rate(shardingsphere_proxy_requests_total[5m])) > 1
# 分片节点不可用
max(shardingsphere_proxy_datasource_status) by (instance) == 0
# 连接池使用率>90%
shardingsphere_proxy_connection_pool_active /
shardingsphere_proxy_connection_pool_size > 0.9
3. Grafana 监控看板
⚡ 性能优化实践
1. 采样率调优
tracing:
props:
sampler-type: probabilistic # 概率采样
sampler-param: 0.05 # 5%采样率 (生产推荐)
2. 指标聚合优化
metric:
props:
histogram-step: 50ms # 直方图桶宽
enable-collect-jvm: false # 关闭JVM监控
3. 日志异步输出
<!-- logback.xml 配置 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>10000</queueSize>
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="FILE"/>
</appender>
🔍 诊断与排查实战
1. 慢 SQL 分析流程
2. 分布式事务排查
# 通过TraceID查询事务链路
jaeger-cli query --operation XATransaction --tags error=true
# 事务日志关键字段
[TXID: xid-001] [Status: COMMITTING]
[Participants: ds0, ds1] [Duration: 2.3s]
🏢 企业级最佳实践
1. 多租户监控隔离
metric:
props:
tenant-tag: ${ENV_TENANT_ID} # 按租户区分指标
2. 敏感数据脱敏
public class SensitiveLogger implements LoggerAdapter {
public void log(String message) {
String masked = message.replaceAll("(\d{3})\d{4}(\d{4})", "$1****$2");
delegate.log(masked);
}
}
3. 混沌工程集成
# 注入网络延迟故障
docker exec -it proxy tc qdisc add dev eth0 root netem delay 100ms
# 监控指标变化
watch 'curl -s http://localhost:9090/metrics | grep execute_latency'
🚨 生产避坑指南
-
追踪丢失问题:
- 确保跨服务 TraceID 传递
- 检查采样率配置
- 验证时间同步(NTP)
-
指标基数爆炸:
metric: props: max-metric-tags: 50 # 限制标签维度
-
日志磁盘溢出:
- 配置日志轮转
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>proxy.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>100MB</maxFileSize> <maxHistory>7</maxHistory> </rollingPolicy>
📈 可观测性成熟度模型
级别 | 特征 | 关键能力 |
---|---|---|
L1 | 基础监控 | 基础指标+错误日志 |
L2 | 链路追踪 | 分布式追踪+SQL分析 |
L3 | 智能诊断 | 异常根因分析+预测 |
L4 | 自治修复 | 自动扩缩容+自愈 |
💎 总结:可观测性价值三角
下一步建议: