Apache ShardingSphere Agent 可观察性实用指南
背景
Apache ShardingSphere 作为践行 Database Plus 理念的数据服务平台,其包含数据分片、读写分离、数据加密、影子库、分布式事务、弹性伸缩等多种数据管理功能。当 Apache ShardingSphere 应用于实际生产中,用户往往需要对其性能进行监控,并结合业务分析定位出现的异常问题。我们知道 APM(应用性能监控)是通过对系统可观察性数据进行采集、存储和分析,进行系统的性能监控与诊断,主要功能包括性能指标监控、调用链分析,应用拓扑图等,一般通过 Tracing(链路跟踪)、Metrics(指标监控)和 Logging(日志)的手段来获取系统运行状况的可观察性数据,因此 Apache ShardingSphere 也为用户提供了可观察性的功能。

蒋平川,SphereEx 高级中间件工程师,Apache Tomcat & Apache ShardingSphere Contributor。目前专注于开源技术领域,在 SphereEx 主要负责 SphereEx-Console、SphereEx-Boot 的研发工作。

姜茂林,SphereEx 高级中间件工程师,Apache ShardingSphere Contributor。目前专注于 SphereEx 商业相关研发。
设计目标
Apache ShardingSphere 通过配置已经提供了日志的输出,所以当前 Apache ShardingSphere 可观察性功能目标主要是为用户提供必要的指标数据、链路数据。同时,我们希望在提供可观察性的时候,不会因为这部分功能引入对其他代码模块的改动,避免代码复杂度的上升。
设计内容
我们选择了监控常用的代理探针设计模式来实现 Apache ShardingSphere 的可观察模块,并采用优秀的 ByteBuddy 作为运行时代理生成组件,结合 Java Agent 技术实现了可观察性模块的代码零侵入。此外,我们通过插件化的技术来支持的不同框架或者系统的 Metrics 与 Tracing。通过插件化的设计,也能支持用户进行自定义,开发特定业务的自有功能组件。
当前 Apache ShardingSphere 的 Agent 模块自带功能提供了对 Prometheus、Zipkin、Jaeger、SkyWalking 及 OpenTelemetry 的支持。
实战指南
我们通过在 Apache ShardingSphere-Proxy 上部署 Prometheus 及 Zipkin 的可观察性数据插件的示例来具体实战演示一下 Apache ShardingSphere Agent 模块的使用。
软件准备
- prometheus-2.32.1.linux-amd64.tar.gz (https://prometheus.io/download)
- zipkin-server-2.23.9-exec.jar (https://zipkin.io/pages/quickstart.html)
- apache-shardingsphere-5.1.0-SNAPSHOT-shardingsphere-proxy-bin.tar.gz
- apache-shardingsphere-5.1.0-SNAPSHOT-shardingsphere-agent-bin.tar.gz
- MySQL 5.7.34
系统部署
端口说明
Prometheus Server:9090
Zipkin Server:9411
Apache ShardingSphere-Proxy:3307
Apache ShardingSphere Agent(Prometheus Plugin):9000
Prometheus
我们需要添加监控对象到 Prometheus,这里需要将 Apache ShardingSphere Agent 配置的 9000 端口地址添加到 Prometheus 的配置文件 prometheus.yml。
vi prometheus.yml
在文件中的 static_configs 下面添加:
- targets: ["localhost:9000"]
然后启动:
./prometheus &
Zipkin
使用 Zipkin Server 比较简单,在 Zipkin Server 的目录通过如下命令启动:
java -jar zipkin-server-2.23.9-exec.jar &
ShardingSphere
部署 Apache ShardingSphere-Proxy 及 Agent,可以参考官网(https://shardingsphere.apache.org/)关于 Proxy 和可观察性的使用说明文档。假设我们将 Proxy、Agent 都在 /tmp 目录,以下是部署 Agent 的具体步骤:
- 修改配置
修改 agent.yaml 配置文件,开启 Prometheus、 Zipkin 插件,Prometheus 插件数据端口修改为 9000,与前面的端口说明对应。具体内容如下:
applicationName: shardingsphere-agent
ignoredPluginNames:
- Jaeger
- OpenTracing
- OpenTelemetry
- Logging
plugins:
Prometheus:
host: "localhost"
port: 9000
props:
JVM_INFORMATION_COLLECTOR_ENABLED : "true"
Jaeger:
host: "localhost"
port: 5775
props:
SERVICE_NAME: "shardingsphere-agent"
JAEGER_SAMPLER_TYPE: "const"
JAEGER_SAMPLER_PARAM: "1"
Zipkin:
host: "localhost"
port: 9411
props:
SERVICE_NAME: "shardingsphere-agent"
URL_VERSION: "/api/v2/spans"
SAMPLER_TYPE: "const"
SAMPLER_PARAM: "1"
OpenTracing:
props:
OPENTRACING_TRACER_CLASS_NAME: "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer"
OpenTelemetry:
props:
otel.resource.attributes: "service.name=shardingsphere-agent"
otel.traces.exporter: "zipkin"
Logging:
props:
LEVEL: "INFO"
- 添加到启动命令
修改 /tmp/apache-shardingsphere-5.1.0-shardingsphere-proxy-bin/bin/start.sh 文件,将 Agent 下的 shardingsphere-agent.jar 文件的绝对路径添加到启动脚本中。
nohup java ${JAVA_OPTS} ${JAVA_MEM_OPTS} \
-classpath ${CLASS_PATH} ${MAIN_CLASS} >> ${STDOUT_FILE} 2>&1 &
改为:
nohup java ${JAVA_OPTS} ${JAVA_MEM_OPTS} \
-javaagent:/tmp/apache-shardingsphere-5.1.0-shardingsphere-agent-bin/shardingsphere-agent.jar \
-classpath ${CLASS_PATH} ${MAIN_CLASS} >> ${STDOUT_FILE} 2>&1 &
- 启动
现在可以在 Proxy 的目录下启动了:
bin/start.sh
访问测试
指标及链路数据
我们采用 Proxy 默认提供的分库分片配置场景 config-sharding.yaml 来进行后续访问及数据的展示。
- 使用 MySQL 命令行连接到启动的 ShardingSphere-Proxy

- 检查 Prometheus Server 及 Zipkin Server 的数据结果
通过 Prometheus Web 查询 proxyinfo 信息,获取 proxyinfo 数据结果。

通过 MySQL client 连接后,查看 Zipkin Web 链路信息,如下:

- 通过 MySQL 命令行查询数据


- 检查 Prometheus Server 及 Zipkin Server 的数据结果
通过 Prometheus Web 查询 parsesqldmlselecttotal 数据结果。

通过 Zipkin Web 查询链路信息,如下:

通过对 Span 细心查找,我们可以选中具体查看 select * from t_order 这条 SQL 语句的链路情况:

拓扑图
我们通过 Zipkin Web 查看依赖关系的时候,发现没有生成拓扑图。现在,我们需要通过配置来添加上依赖拓扑。
- 下载文件
首先下载下表中 Zipkin 相关的依赖文件,并拷贝到 Proxy 的 lib 目录。

- 修改配置
配置 Proxy 的 conf 目录下对应数据源配置文件 config-sharding.yaml,在 dataSources 节点的下数据源连接对应 url 上添加如下配置:
MySQL 5.x:statementInterceptors=brave.mysql.TracingStatementInterceptor
或 MySQL 8.x:queryInterceptors=brave.mysql8.TracingQueryInterceptor
- 重新启动 Proxy
然后在进行跟前面的一样访问测试后,在通过 Zipkin Web 查看依赖,我们可以看到拓扑图:

采样率
Apache ShardingSphere Agent 的可观察性插件还支持采样率的设置,针对不同的场景,可以配置不同的采样率来适应。Zipkin 插件支持的采样率类型配置有 const、counting、ratelimiting、boundary。对于请求量比较大的场景,我们建议使用类型 boundary,并配置合适的采样率可以很好降低链路数据的采集量。
Zipkin:
host: "localhost"
port: 9411
props:
SERVICE_NAME: "shardingsphere-agent"
URL_VERSION: "/api/v2/spans"
SAMPLER_TYPE: "boundary"
SAMPLER_PARAM: "0.001"
结语
Apache ShardingSphere 通过提供的可观察性功能,并且默认支持与多种常用的监控框架和系统对接,方便用户对其进行监控管理。未来我们还将继续增强并完善 Apache ShardingSphere 的监控方面的能力,希望大家持续关注。
欢迎添加社区经理微信(ss_assistant_1)加入交流群,与众多 ShardingSphere 爱好者一同交流。
相关推荐
蓄电池储能并网发电系统充放电+网侧变流器PQ控制【仿真+参考文献】
内容概要:本文针对含分布式电源的配电网在多线路故障情况下的恢复问题,提出了一种将网络重构、孤岛划分与检修进度统一纳入多时段优化框架的故障恢复模型。该模型以最小化网损和甩负荷惩罚为目标,综合考虑节点功率守恒、支路潮流、电压与容量限制、二阶锥松弛以及拓扑连通性等约束条件,通过引入虚拟流方法保证各供电片区的内部连通,并借助大常数松弛处理断开支路,实现了故障后逐时段的最优恢复方案制定。模型在IEEE33节点系统上进行了仿真验证,展示了各时段的网络拓扑变化、节点电压分布及负荷恢复情况,证明了其在提升系统韧性方面的有效性。同时,文章还对现有模型在负荷分级、无功处理、辐射状结构描述等方面的不足提出了改进建议。; 适合人群:电力系统自动化、智能电网及相关专业的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究配电网在极端事件下的弹性恢复能力;②设计含分布式电源的主动配电网故障后网络重构与孤岛运行协同策略;③优化多时段故障恢复过程中开关操作序列与负荷恢复优先级;④为学术论文撰写或工程项目提供理论基础和技术参考。; 阅读建议:此资源以数学规划方法为核心,侧重于建模思想与实现细节,读者应结合文中列出的参考文献深入理解虚拟流、二阶锥松弛等关键技术的应用背景,并通过复现仿真案例来掌握模型的具体构建与求解流程,进而针对实际需求进行扩展和完善。
SpringBoot2.7 脚手架配套 Cursor Skill 开发包
# SpringBoot2.7 脚手架配套 Cursor Skill 开发包 > 技术栈:SpringBoot 2.7 + JDK8 + MyBatis-Plus + Sa-Token + Redis > 兼顾 **Java AI编程和个人学习 ** 和 **日常工作后台开发** > 推荐模型:GPT-4o / Claude;小模型遵守编码规范效果较差 ## 简介 这是一套配套统一编码规范的 Cursor Skill 工具集,搭配 `.cursorrules` 约束AI输出,保证生成代码的包结构、命名风格、返回体、参数校验规则全程统一,不会出现代码风格割裂混乱。 不管你是**做Java AI编程和个人学习 **,还是日常后端工作开发后台管理系统,都可以快速生成大量样板代码,告别重复抄写CRUD、工具类、配置类的枯燥工作,节省大量开发时间: - 毕设场景:快速搭建系统原型,把重心放在业务设计、功能调试、论文撰写上,答辩代码工整规范,加分明显 - 工作开发场景:新项目脚手架打底,统一团队基础编码风格,减少样板代码重复开发 > 重要声明:本资料为**学习演示样板代码**,仅用于个人学、练习开发、日常工作后台开发;不支持七天无理由退款;AI生成代码务必人工复核后再投入使用;不提供毕设代写服务;商用请购买商用授权版本。
无刷直流电机(BLDCM)转速电流双闭环控制、三相桥式星型全控电机研究(Simulink仿真实现)
内容概要:本文围绕无刷直流电机(BLDCM)的转速电流双闭环控制系统展开深入研究,重点基于三相桥式星型全控电路结构,利用Simulink进行高精度建模仿真。研究系统性地对比了模糊PID、传统PID以及模糊神经网络PID等多种先进控制策略在BLDCM调速系统中的动态响应性能、抗干扰能力与运行稳定性,旨在提升电机控制系统的精度、鲁棒性与自适应能力。文中详细构建了双闭环控制架构,其中速度环负责调节电机转速至设定值,电流环实时监控并控制相电流,二者协同工作实现对电机运行状态的精确、快速调控。该仿真研究不仅适用于电机控制算法的设计与验证,也为相关领域的工程实践提供了可靠的理论支持和技术参考。; 适合人群:电气工程、自动化、机电一体化、控制科学与工程等相关专业的高校本科生、研究生,以及从事电机驱动系统、电力电子与运动控制领域研发工作的工程技术人员。; 使用场景及目标:①用于高校课程教学、实验设计及毕业课题研究,帮助学生深入理解无刷直流电机控制原理;②为工业伺服系统、电动汽车驱动、无人机动力系统、家用电器变频控制等应用场景中的高性能电机控制方案提供仿真验证与优化设计依据;③对比分析模糊控制、神经网络与传统PID在非线性系统中的控制效果,辅助科研人员进行智能控制算法的选型、改进与创新研究。; 阅读建议:建议读者结合Simulink仿真模型与技术文档进行同步学习与操作,重点关注控制器参数整定方法、双闭环结构设计逻辑及仿真结果的动态性能分析;鼓励读者尝试修改控制策略与参数,观察系统响应变化,有条件者可进一步将仿真结果与实物实验平台对比,以深化对电机控制理论的理解并提升工程实践能力。
Windows 单文件屏幕标注工具:270KB 绿色 exe,适配电网内网离线终端(含鼠标穿透模式踩坑全记录)
电力/工控内网桌面工具开发者、班组技术支持、需要在隔离终端做技术交底与画面讲解的工程人员
科技中介服务机构在技术需求挖掘时,如何提升需求识别的准确性和服务响应的时效性?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。


