1. 背景
增强服务可观测性,预测与发现系统性能瓶颈,透视系统状态,为系统调优和改进提供可靠数据
2. 规划特性
> 服务日志: 记录时间,用户,用户地点(ip),服务节点(ip),服务名称,模块名称,参数(可配置),支持异步写入,减少服务正常执行影响
> 服务性能指标,RT,请求数(1m/5m/15m),异常数(1m/5m/15m),失败数(1m/5m/15m)
> 服务调用链路,服务调用拓扑,调用关系性能,topN(最忙服务,最慢服务)
> 业务日志,如,拉单每秒字节数,数据笔数,拉单作业数
> 监控门户,仪表盘,告警 Prometheus+grafana(运维);elasticsearch agg+数据可视化(开发)
3. 技术架构
链路跟踪和数据跟踪位于蓝框部分,链路跟踪(service-tracing)还负责数据变更跟踪,服务日志数据变更
4. 服务日志
参看https://xie.infoq.cn/article/12cd563863c5581e7348630a5
5. 链路跟踪
分布式系统每个请求由多个服务接力完成,服务构成调用链, 链路跟踪穿透所有服务(实例),包括 okhttp,httpclient,mq 等,采集每个服务的信息,以及环境信息,最终展现服务调用链,服务间调用时间,常用于排障,应用性能监控,topN 最忙服务,topN 最慢服务
5.1 技术架构
探针/报告器/发送器 3 组件与探测目标服务同在一个进程,以拦截器方式低侵入集成到服务,采集数据,支持自定义 tag; 异常捕获
zipkin server
查询rest api 查询服务拓扑,跨度(span)
采集器与报告器对接,接收数据(span),协议与发送器对应
存储支持多种存储,elasticsearch 其中一种
5.2 探针
链路技术组件分两部分,探针和服务,探针部署于采集目标进程,采集执行环境信息(span);服务收集采集信息, 存储,提供链路查询和展现。
本平台采用 open zipkin,zipkin 服务满足需要,直接使用
探针组件使用 spring cloud sleuth
技术特性
报告/发送支持:http, rabbitmq, kafka
探测框架支持: http client,okhttp3,rabbitmq,spring mvc/servlet,feign
6. 数据变更跟踪
数据变更跟踪是服务日志一部分,借助链路跟踪的 tracingId,关连服务调用日志和数据变更
6.1 技术架构
服务日志写入索引,canal 捕获服务写数据的变更,也写入索引,两者有同一个 tracingId,
关联计算作业关联两索引,数据变更写入服务日志
6.2 逻辑架构
业务跟踪作业调度作业,定时执行
业务跟踪服务分片遍历服务日志,根据 tracingId 获取关联数据变更日志,写入服务日志,使用 onesearch 组件的 getter 机制,数据字典,转换服务,api,数据库,表,字段等为可读名称
数据跟踪服务canal client 监听数据库的行变更事件,写入 elasticsearch
数据字典定义服务,api,数据库,表,字段的名称
*业务服务跟踪没有直接依赖服务日志,拷贝服务日志模型类作 dto 用
业务跟踪逻辑模型
业务跟踪包括两部分,业务服务日志和业务数据
业务服务跟踪使用服务日志组件生成的服务日志
业务数据 canal-sync 捕获并写入到 elasticsearch
6.3 数据变更捕获(canal-sync 组件)
canal-sync 组件,组件采用观察者模式,逐级细化事件处理
Message—>LogEvent-->RowsLogEvent
canal 伪装成 mysql slave,向 mysql 同步 binlog,解释 binlog 封装为事件
canal client 监听事件,binlog 事件多种类型,事务事件,ddl 事件,本组件只关心行变更事件(RowLogEvent)
6.4 组件架构
onesearch 本人开发另一个组件,搜索引擎 SDK,相关文章以后发布,敬请关注
shard 分片小组,负责资源(包括数据表,文档)分片,处理位点记录
7. 代码解释
7.1 工程结构
tracing-business-core 调度作业,接入调度引擎定时执行,依赖 tracing-business-servcie,独立服务
tracing-business-data canal client,数据变更跟踪,独立服务
tracing-business-servcie 包括业务跟踪,业务服务跟踪,业务数据跟踪 3 个服务
tracing-business-query 服务日志查询服务,独立服务
tracing-datadict 数据字典服务
tracing-extension 扩展包,mybatis 拦截器,用于插入 tracing_id 字段;feign 拦截器,用于传递 from header
7.2 单元测试
Ø Core
ShardingTest 构建分片
BusinessTracingJobTest 作业测试
Ø Data
IndexTest 构建 tracing-data 索引
BinlogSyncTest 数据变更同步, 直接跑应用也可以,比较轻量
Ø Query
BusinessTracingQueryTest bean 方式测试
ServiceLogSearchTest 构建搜索表达式测试
Ø Service
TracingBusinessIndexTest 构建索引测试
BusinessDataTracingTest 业务数据 tracing 测试
BusinessServiceTracingTest 业务服务 tracing 测试
BusinessTracingTest 业务跟踪测试
7.3 环境
>spring cloud Hoxton.SR4
> spring boot 2.2.6.RELEASE
>spring cloud alibaba 2.2.4.RELEASE
> nacos 1.4.2
> canal server 1.1.4
> elasticsearch 6.8.7
> 调度任务
> zipkin-server 2.21.7
> rabbitmq
>数据库日志配置 binlog+row 模式
8. 测试
8.1 demo 工程
demo 全链路的测试,包括网关(zuul),服务 a,服务 b,其中服务 a 是业务服务(网关调用),记录业务日志,服务 a 调用服务 b,包括 feign,okhttp,httpclient,rabbitmq,服务 b 数据库操作
8.2 api
api 测试脚本,postman
查询 api 脚本,postman
8.3 效果图
链路跟踪
Ø feign/httpclient/okhttp/rabbitmq
数据日志/服务日志
服务日志最终的形态,业务跟踪作业跑过后,写入了数据变更,转换名称,xxxAlias
8. 代码(收费)
tracing-business 业务跟踪/数据跟踪
https://download.csdn.net/download/szlhj/73533918
tracing-business-demo
https://download.csdn.net/download/szlhj/73534166
以上依赖放在 lib
关联代码
service-log 服务日志
https://download.csdn.net/download/szlhj/43622303
canal-sync canal 数据同步,捕获数据变更
网友评论