Springboot集成syslog+logstash收集日志到ES
1、背景
Logstash 是一个实时数据收集引擎,可收集各类型数据并对其进行分析,过滤和归纳。按照自己条件分析过滤出符合的数据,导入到可视化界面。它可以实现多样化的数据源数据全量或增量传输,数据标准格式处理,数据格式化输出等的功能,常用于日志处理。工作流程分为三个阶段:
- input数据输入阶段,可接收oracle、mysql、postgresql、file等多种数据源;
- filter数据标准格式化阶段,可过滤、格式化数据,如格式化时间、字符串等;
- output数据输出阶段,可输出到elasticsearch、mongodb、kafka等接收终端。
架构原理:springboot发出syslog日志,通过系统的rsyslog服务进行数据转发,logstash监听rsyslog端口过滤数据并发到es进行存储
2、springboot集成syslog
maven依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
logback.xml文件配置
配置好日志之后,在root标签中添加appender才能生效;
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- 控制台输出 -->
<appender name="consoleLogAppender" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%d{
yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{
20} - %cyan(%.-3072msg %n)</pattern>
</encoder>
</appender>
<appender name="infoFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>./logs/service.log</File>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{
yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{
20} - %cyan(%.-3072msg %n)</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./logs/service-log-%d{
yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>15</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="errorFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>./logs/service-error.log</File>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{
yyyy-MM-dd HH:mm:ss}