服务可观测平台(一)---服务日志设计&实现(附源码)

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包
  • config  spring boot自动配置
  • adapter 适配接口,获取系统用户信息;实现由集成服务提供
  • 关联链路跟踪,日志增加tracingId;支持开关,依赖tracing 上下文
  • tracing上下文 zipkin/skywalking/…, 获取tracingId
  • 数据变更跟踪,依赖链路跟踪,数据库需增加tracingId字段,canal捕获数据变更,最后定时任务关联服务日志和数据变更,支持开关

 5.1  技术架构

service-log采用切面,非侵入拦截服务调用,切面收集信息,包括当前用户,入参等以事件发送到eventbus,使用AsynEvnetBUs,异步实现,eventbus调用onesearch索引事件到elasticsearch,本组件没有提供查找日志服务,用户需开发查询功能

 5.2  开发指南

 5.2.1 依赖

<dependency>

           <groupId>com.leehom.arch.obs</groupId>

           <artifactId>service-log</artifactId>

           <version>1.0.0-SNAPSHOT</version>

</dependency>

5.2.2 实现用户适配服务

service-log需要获取当前用户信息,用户提供UserService接口实现,demo和单元测试提供了mock服务实

5.2.3 设置和配置注解

service-log使用切面拦截服务,切面以注解标记

注解可配置params,抓取参数,使用springEL,指定抓取什么参数

"#i", "#s"基本变量参数抓取,如,intIntegerlongLong

"#arrayStr[1]", "#listStr[1]", "#mapStr[\"1\"]"

结合类型抓取,数组,listmap

#order.orderName", "#order.item.itemName"

bean类型参数抓取

5.2.4 代码(收费)

https://download.csdn.net/download/szlhj/43622303

demo环境,eureka,zuul,elasticsearch

目前未实现链路跟踪相关部分,关联tracingId,数据变更跟踪

5.2.5 示例(收费)

单元测试和demo

https://download.csdn.net/download/szlhj/43623523

单元测试

ServiceLogTest类,日志记录测试,覆盖基本变量,集合变量,bean,异常场景

ServiceLogSearchTest 日志搜索测试

demo完整的网关到服务全链路集成测试

5.2.6 日志记录效果

数据变更跟踪

数据变更跟踪是服务日志延申,记录服务更改了什么数据,数据从什么值变更到什么值

微服务可观测平台 (二)- 链路跟踪 & 数据变更跟踪设计_leehom的博客-CSDN博客

微服务可观测平台(一)-总体设计
微服务可观测平台(三)-链路跟踪及数据变更跟踪设计与实现
微服务可观测平台(四)-业务metrics设计与实现
微服务可观测平台(五)-性能metrics设计与实现

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中间件XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值