1. 背景
增强服务可观测性,预测与发现系统性能瓶颈,透视系统状态,为系统调优和改进提供可靠数据支撑
整个平台分为监控门户,服务日志,链路跟踪,业务指标,性能指标5部分,本文重点介绍服务日志
服务日志包括数据变更跟踪,即,服务调用改变了什么数据,数据从什么值改为什么值,但该部分需要链路跟踪支持,因此放到链路跟踪介绍
2. 参考和术语
详解可观测性监控系统中的“金三角” - 尔达 Erda - 博客园
Metrics
Metrics 计算 Events 发生数量的数据集,这些数据通常具有原子性,且可以聚合。从操作系统到应用程序,任何事物都会产生 Metrics 数据,这些数据可以用来度量操作系统或应用程序是否健康,或者是用以计算一段时间内请求的平均延时。
Logging
记录离散 Events,Logging 描述的是一些列离散事件,在缺乏有力的监控系统时,Logging 数据通常是工程师在定位生产问题时最直接的手段。如果说 Metrics 可以告诉你系统或者应用程序出现问题,那么 Logging 就可以告诉你为什么会出现问题。关于日志的采集现在也有很多方法,比如:filebeat, fluented, loki 等。
Tracing
记录应用程序操作的数据
一次请求的完整生命周期
分布式系统中一次请求经历过多个服务产生操作的数据(Spans)
Tracing 是通过有向无环图的方式记录在分布式系统中发生的 Events 之间的因果关系。云原生场景下,多个服务之间或多或少存在着依赖关系,一次 Tracing 通常会经过多个服务(Span),甚至在高度复杂的分布式系统中,一次 Tracing 包含数以万计的 Span 也是可能存在的。再者,Tracing 更多的是关注这种端到端系统之间的联系,基于该需求,分布式追踪系统应运而生。
3. 总体规划特性
监控门户统一监控门户,用户自定义视图,告警(页面,钉钉,邮件);Prometheus+grafana(运维);elasticsearch agg+数据可视化(开发)
服务日志记录时间(起始/结束),用户,用户地点(ip),服务节点(ip),服务名称,模块名称,参数(可配置),tracingId,支持异步写入,减少服务正常执行影响
服务性能指标RT,请求数(1m/5m/15m),异常数(1m/5m/15m),失败数(1m/5m/15m)
服务调用链路 服务调用拓扑,调用关系性能,topN(最忙服务,最慢服务)
业务度量组件如,拉单每秒字节数,数据笔数,拉单作业数
*日志收集 ELK 不在本次计划
*系统监控,如 cpu,线程数(jvm),内存(jvm),磁盘 io,网络 io 直接使用 Prometheus,不在本平台范围
4. 总体技术架构

监控门户支持用户自定义视图
5. 服务日志

aspect/annotation切面/注解,拦截服务,构建服务日志;支持正常日志,错误日志
repository 日志存储,默认 es,支持扩展,组件提供查询功能
model 服务 log 类,model .param 服务参数步处理
event 日志打印采用事件异步,依赖 guava 的 event bus 包
configspring boot 自动配置
adapter 适配接口获取系统用户信息;实现由集成服务提供
关联链路跟踪,日志增加 tracingId;支持开关,依赖 tracing 上下文
tracing 上下文 zipkin/skywalking/…, 获取 tracingId
数据变更跟踪 依赖链路跟踪,数据库需增加 tracingId 字段,canal 捕获数据变更,最后定时任务关联服务日志和数据变更,支持开关
5.1 技术架构

service-log 采用切面,非侵入拦截服务调用,切面收集信息,包括当前用户,入参等以事件发送到 eventbus,使用 AsynEvnetBUs,异步实现,eventbus 调用 onesearch 索引事件到 elasticsearch,本组件没有提供查找日志服务,用户需开发查询功能
5.2 开发指南
5.2.1 依赖
5.2.2 实现用户适配服务
service-log 需要获取当前用户信息,用户提供 UserService 接口实现,demo 和单元测试提供了 mock 服务实
5.2.3 设置和配置注解

service-log 使用切面拦截服务,切面以注解标记
注解可配置 params,抓取参数,使用 springEL,指定抓取什么参数
"#i", "#s",基本变量参数抓取,如,int,Integer,long,Long
"#arrayStr[1]", "#listStr[1]", "#mapStr[\"1\"]"
集合类型抓取,数组,list,map
#order.orderName", "#order.item.itemName"
bean 类型参数抓取
5.2.4 代码(收费)
https://download.csdn.net/download/szlhj/43622303
demo 环境,eureka,zuul,elasticsearch
目前未实现链路跟踪相关部分,关联 tracingId,数据变更跟踪
5.2.5 测试和示例(收费)
service-log 提供单元测试和 demo
https://download.csdn.net/download/szlhj/43623523
单元测试
ServiceLogTest 类,日志记录测试,覆盖基本变量,集合变量,bean,异常场景
ServiceLogSearchTest 日志搜索测试
demo 完整的网关到服务全链路集成测试
5.2.6 日志记录效果


网友评论