应用SpringAOP及Tlog工具完成日志链路追踪、收集、持久化
一、痛点
目前我司各系统的日志管理比较原始,使用logback打日志到log文件,虽然有服务管理平台,但记录的日志也仅仅是前置机调用后台系统的出入参,当遇到问题时查日志较为麻烦。
登录VPN-打开服务器-找到日志目录-打开日志文件-搜索
而这个过程也仅仅是在一台服务器上的操作,一般需要看前置机、后台系统甚至服务管理平台。
当用户较少时,通过先后顺序等其他标志还能查到,但当调用量稍多后就很难判断哪个日志是哪个操作发出的。
另外,我司产品前台面向用户,后台与多家公司产品有大量互相调用,当用户遇到问题首先投诉的是我司产品,如在日志中找不到问题点,背锅的就是我们。
️二、解决思路
任务有2个
- 链路追踪,一次调用的日志,无论跨多少平台都能串起来;
- 日志存库,这主要是为了开发一个日志查询功能,提供给运维人员。
2.1、Tlog
经过一番考察吧,对于链路追踪,我们选用了Tlog这个日志追踪工具。主页链接:yomahub.com/tlog/
主要考虑点是:
- 最基础的功能:日志打标签,并且支持标签模板的自定义,可通过TLogContext.getTraceId()和TLogContext.putTraceId(id)获取和设置id;
- 业务代码无侵入
不过对HttpClient是侵入式的,需要加拦截器
这个拦截器的实现还是颇为简单
public class TLogHttpClientInterceptor implements HttpRequestInterceptor { private static final Logger log = LoggerFactory.getLogger(TLogHttpClientInterceptor.class); @Override
public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
Args.notNull(request, "HTTP request");
String traceId = TLogContext.getTraceId();
if(StringUtils.isNotBlank(traceId)) {
String appName = TLogSpringAware.getProperty("spring.application.name"); request.addHeader(TLogConstants.TLOG_TRACE_KEY, traceId);
request.addHeader(TLogConstants.TLOG_SPANID_KEY, SpanIdGenerator.generateNextSpanId());
request.addHeader(TLogConstants.PRE_IVK_APP_KEY, appName);
request.addHeader(TLogConstants.PRE_IVK_APP_HOST, LocalhostUtil.getHostName());
request.addHeader(TLogConstants.PRE_IP_KEY, LocalhostUtil.getHostIp());
} else {
log.debug("[TLOG]鏈湴threadLocal鍙橀噺娌℃湁姝g‘浼犻�抰raceId,鏈璋冪敤涓嶄紶閫抰raceId");
}
}
}
不过需要注意的点是,有一些方法使用了Hutool高版本提供的方法,注意项目中版本冲突的解决。
对Tlog的集成还有一个问题,公司使用的服务管理平台由其他部门开发管理,需要该部门协同解决,不过好在我们可以拿到源码
2.2、日志存储
日志存储自然不希望对当前业务有任何影响,考虑到系统并发量并不是很大,就采用线程池来调用日志系统存库。
2.3、日志收集
使用注解主要对出入参及异常信心进行收集处理。另外对logback进行简单封装,提供info()、error()等方法,这些方法输入的日志也进行收集、存储。 因业务特殊性,需要使用的系统都复用一套自定义注解、公共切面方法,并在切面中完成特殊业务的处理。
颇多细节就不多写了,本文主要就是介绍整体思路,对于调用量说多不多的系统还可以。
应用SpringAOP及Tlog工具完成日志链路追踪、收集、持久化的更多相关文章
- SpringBoot之微服务日志链路追踪
SpringBoot之微服务日志链路追踪 简介 在微服务里,业务出现问题或者程序出的任何问题,都少不了查看日志,一般我们使用 ELK 相关的日志收集工具,服务多的情况下,业务问题也是有些难以排查,只能 ...
- dubbo traceId透传实现日志链路追踪(基于Filter和RpcContext实现)
一.要解决什么问题: 使用elk的过程中发现如下问题: 1.无法准确定位一个请求经过了哪些服务 2.多个请求线程的日志交替打印,不利于查看按时间顺序查看一个请求的日志. 二.期望效果 能够查看一个请求 ...
- 基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪
原文链接:基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪 一.日志系统 1.日志框架 在每个系统应用中,我们都会使用日志系统,主要是为了记录必要的信息和方便排 ...
- Oracle logmnr工具分析日志脚本
在oracle:对logmnr工具分析日志这个不陌生:对数据恢复应用场景经常用到:这里为了方便对归档日志进行分析: 当然网上有一个logmnr界面的工具:感觉很人性化:下载需要积分:为此写一个脚本. ...
- 日志分析工具、日志管理系统、syslog分析
日志分析工具.日志管理系统.syslog分析 系统日志(Syslog)管理是几乎所有企业的重要需求.系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能问题的关键资源.人们往往低估了对 ...
- Eventlog Analyzer日志管理系统、日志分析工具、日志服务器的功能及作用
Eventlog Analyzer日志管理系统.日志分析工具.日志服务器的功能及作用 Eventlog Analyzer是用来分析和审计系统及事件日志的管理软件,能够对全网范围内的主机.服务器.网络设 ...
- MySQL常用工具、日志及读写分离
MySQL常用工具.日志及读写分离 1.MySQL中常用工具 1.1 mysql 1.1.1连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 mys ...
- .NET Core 中的日志与分布式链路追踪
目录 .NET Core 中的日志与分布式链路追踪 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory IL ...
- 【开源】.net微服务开发引擎Anno 让复杂的事简单点- 日志、链路追踪一目了然 (上)
1.Anno简介? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可视化监控.依赖第三方框架少.详情请查看<[开源].net微服务开发引擎Anno开源啦> 本章主题:. ...
随机推荐
- 题解 [HNOI2016]大数
题目传送门 题目大意 给出一个\(n\)个数的字符串,有\(m\)次查询,对于该串的子串\([l,r]\)有多少个子串满足是固定素数\(p\)的倍数. 思路 其实很简单,但是一开始想偏了...果然还是 ...
- 洛谷4755 Beautiful Pair (分治)
题目描述 小D有个数列 \(a\),当一个数对 \((i,j)(i\le j)\) 满足\(a_i\)和\(a_j\)的积 不大于 \(a_i \cdots a_j\) 中的最大值时,小D认为这个数对 ...
- 【集成学习】:Stacking原理以及Python代码实现
Stacking集成学习在各类机器学习竞赛当中得到了广泛的应用,尤其是在结构化的机器学习竞赛当中表现非常好.今天我们就来介绍下stacking这个在机器学习模型融合当中的大杀器的原理.并在博文的后面附 ...
- ruby基本图片上传
图片上传问题 在我们的项目里,需要实现海报的图片上传,便于更好地向外界展示一个社团活动的基本内容,但是在处理中间件相关问题时遇到了一点小小的挫折.不过这并不要紧,OSS对象存储服务固然好,但是本着交完 ...
- 开关电源(DC-DC)与LDO电源的区别---纹波
https://blog.csdn.net/edadoc2013/article/details/78435775
- 从零开始 DIY 智能家居 - 基于 ESP32 的智能语音合成播报模块
目录 前言 硬件选择 代码解析 获取代码 设备控制命令: 设备和协议初始化流程: 配置设备信息 回调函数注册 语音播报与设置流程 总结 前言 这里这么多设备,突然发现我做的好像都是传感器之类的居多好像 ...
- 树莓派-openeuler安装
一.安装准备 1.硬件安装 2.下载openeuler镜像 3.sd卡格式化 sd格式化工具 4.镜像校验 二.镜像烧写 选择树莓派官方烧写工具,耐心等待... 三.网络配置 1.寻找树莓派的ip地址 ...
- [转]浅谈电路设计中应用DDR3处理缓存问题
本文转自:浅谈电路设计中应用DDR3处理缓存问题_若海人生的专栏-CSDN博客 DDR系列SDRAM存储芯片的高速率.高集成度和低成本使其理所当然成为存储芯片中的一霸.在PC和消费电子领域自是如此,它 ...
- Relocations in generic ELF (EM: 40)
最近在搞机器上的wifi热点,需要移植一大堆东西,如hostapd\wpa_suppliant.dhcp等,这些玩意又依赖其他的一大堆库的移植,比如libnl,openssl等,今天在移植编译libn ...
- 整数中1出现的次数 牛客网 剑指Offer
整数中1出现的次数 牛客网 剑指Offer 题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此 ...