去年公司由于不断发展,内部自研系统越来越多,所以后来搭建了一个日志收集平台,并将日志收集功能以二方包形式引入各个自研系统,避免每个自研系统都要建立一套自己的日志模块,节约了开发时间,管理起来也更加容易。
这篇文章主要介绍如何编写二方包,并整合到各个系统中。
先介绍整个ELK日志平台的架构。其中xiaobawang-log就是今天的主角。
xiaobawang-log主要收集三种日志类型:
- 系统级别日志: 收集系统运行时产生的各个级别的日志(ERROR、INFO、WARN、DEBUG和TRACER),其中ERROR级别日志是我们最关心的。
- 用户请求日志: 主要用于controller层的请求,捕获用户请求信息和响应信息、以及来源ip等,便于分析用户行为。
- 自定义操作日志: 顾名思义,就是收集手动打的日志。比如定时器执行开始,都会习惯性写一个log.info("定时器执行开始!")的描述,这种就是属于自定义操作日志的类型。
二方包开发
先看目录结构
废话不多说,上代码。
1、首先创建一个springboot项目,引入如下包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.18</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>1.18.26</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
SysLog实体类
public class SysLog {
/**
* 日志名称
*/
private String logName;
/**
* ip地址
*/
private String ip;
/**
* 请求参数
*/
private String requestParams;
/**
* 请求地址
*/
private String requestUrl;
/**
* 用户ua信息
*/
private String userAgent;
/**
* 请求时间
*/
private Long useTime;
/**
* 请求时间
*/
private String exceptionInfo;
/**
* 响应信息
*/
private String responseInfo;
/**
* 用户名称
*/
private String username;
/**
* 请求方式
*/
private String requestMethod;
}
LogAction
创建一个枚举类,包含三种日志类型。
public enum LogAction {
USER_ACTION("用户日志", "user-action"),
SYS_ACTION("系统日志", "sys-action"),
CUSTON_ACTION("其他日志", "custom-action");
private final String action;
private final String actionName;
LogAction(String action,String actionName) {
this.action = action;
this.actionName = actionName;
}
public String getAction() {
return action;
}
public String getActionName() {
return actionName;
}
}
配置logstash
更改logstash配置文件,将index名称更改为log-%{[appname]}-%{+YYYY.MM.dd}-%{[action]},其中appname为系统名称,action为日志类型。
整个es索引名称是以“系统名称+日期+日志类型”的形式。比如“mySystem-2023.03.05-system-action”表示这个索引,是由mySystem在2023年3月5日产生的系统级别的日志。
# 输入端
input {
stdin { }
#为logsta