应用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开源啦> 本章主题:. ...
随机推荐
- Java(21)内部类
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228411.html 博客主页:https://www.cnblogs.com/testero ...
- 异构智联Wi-Fi+蓝牙模组,连接快、准、稳!
下班回家打开门,电灯.电视.空调.音响.电动窗帘.扫地机器人--一呼百应,有序开工,原本冰冷的房子立刻变成了温暖港湾.可以说,舒适便捷的智能设备已经完全融入了我们的生活中. 从单一场景.单一设备,到现 ...
- F1西班牙大奖赛-加泰罗尼亚赛道地图及简介
背景 银石双赛结束,第二轮三连赛的最后一场将转战西班牙,第50届F1西班牙大奖赛将于本周末(正赛2020-08-15)在加泰罗尼亚赛道上演. 作为近年来F1承办季前测试的赛道,所有人都对这里再熟悉不过 ...
- 极速上手 VUE 3 —— teleport传送门组件
一.teleport 介绍 teleport 传送门组件,提供一种简洁的方式,可以指定它里面的内容的父元素.通俗易懂地讲,就是 teleport 中的内容允许我们控制在任意的DOM中,使用简单. 使用 ...
- Java:重载和重写
Java:重载和重写 对 Java 中的 重载和重写 这个概念,做一个微不足道的小小小小结 重载 重载:编译时多态,同一个类中的同名的方法,参数列表不同,与返回值无关. 有以下几点: 方法名必须相同: ...
- SpringCloud微服务实战——搭建企业级开发框架(七):自定义通用响应消息及统一异常处理
平时开发过程中,无可避免我们需要处理各类异常,所以这里我们在公共模块中自定义统一异常,Spring Boot 提供 @RestControllerAdvice 注解统一异常处理,我们在GitEgg ...
- oo第四单元及期末总结
一.第四单元作业架构总结 第一次UML作业: 在分析各指令所需要的信息后建立了类(class),操作(operation),属性(Attribute)这几个类用来存储分析后的结果,而接口在本次作业中与 ...
- spring security中ajax超时处理
spring security为我们的系统提供了方便的认证和授权操作.在系统中完成认证和授权后,一般页面页面上大多数是ajax和后台进行操作,那么这个时候可能就会面临session超时,ajax去访问 ...
- [ NOIP2013 D2-T3 ] 华容道
NOIP2013 华容道 图论好题. 介于网上全是些令蒟蒻头昏的题解和排版一塌糊涂以及过于详细的题解...蒟蒻记录一下.. 显然需要将白格移动到 \(s\) 相邻格,然后交换 \(s\) 与白格,再将 ...
- 攻防世界 杂项 4.something_in_image
这是原题 我这里使用编辑器打开,一看乱码也挺多的,于是想了想ctrl+f搜索一下flag关键字吧,结果答案出来了(flag不少,多搜索几次) Flag{yc4pl0fvjs2k1t7T}