Springboot+Logstash+ Kibana+Elsticsearch ELK整合笔记
文章的前提是你已经搭建好了Logstash、Kibana、Elsticsearch的环境,很简单网上也有很多教程,如有不懂也可以留言问我
本人是使用docker启动的Kibana和和ES,方便管理节点,如有兴趣也可以留言
- 既然用到Logstash就理所当然的要引入相关jar包
<!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
- 注意logback的版本是用的5.2这是因为pring-boot版本是2.1.1,这里如果logback版本过高会引起不兼容的问题
- 然后配置Logstash的conf文件,在配置之前我们需要先配置下Springboot的logback文件,很简单,都给了注释,其中你主要是配置输出文件到logstash的部分,其他配置都是些日志的输出路径和格式,看你个人所需
<?xml version="1.0" encoding="UTF-8"?>
<!--该日志将日志级别不同的log信息保存到不同的文件中 -->
<configuration>
<!-- 日志在工程中的输出位置 -->
<property name="LOG_HOME" value="/Users/jxliu/elsticsearch/logs" />
<!-- 日志输出格式 -->
<property name="ENCODER_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [${APP_NAME}] [%thread] %-5level [%logger] -%msg%n" />
<contextName>${APP_NAME}</contextName>
<!-- 控制台日志:输出全部日志到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${ENCODER_PATTERN}</Pattern>
</encoder>
<!--此日志appender是为开发使用,只配置最低级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!--<level>debug</level>-->
<!--</filter>-->
</appender>
<!-- 为logstash输出的JSON格式的Appender -->
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.1.177:8888</destination>
<!-- 日志输出编码 -->
<encoder
class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${springAppName:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!--输出com.example.demo包下的日志-->
<logger name="com.example.demo" level="WARN" />
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="logstash" />
</root>
</configuration>
- 然后需要配置你的Logstash了,这里是我的一些配置
- 首先为了不影响以前的配置,这里我在bin目录重新建了一个conf文件:std_std_es.conf.conf
- 这里将std_std_es.conf.conf贴出来,里面有备注
input {
tcp {
# IP地址
host => "192.168.1.177"
# 端口号
port => 8888
# 建议写server
mode => "server"
tags => ["tags"]
# 定义日志的格式为json,这里需要注意,如果没有json_lines,需要安装json_lines插件
# 安装命令,进入bin目录:./logstash-plugin install logstash-codec-json_lines
codec => json_lines
}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
# 定义索引的名称,跟kibana里的对应
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
stdout{
codec => rubydebug
}
}
- 然后进入bin目录运行命令启动logstash
sudo ./logstash -f std_std_es.conf.conf
- 然后启动你的Springboot,做一些测试案例
- 代码贴出来
package com.example.demo;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootElkApplicationTests {
@Test
public void contextLoads() {
}
private Logger logger = Logger.getLogger(getClass());
@Test
public void test() throws Exception {
for(int i=0;i<100;i++) {
logger.info("输出info日志");
logger.debug("输出debug日志");
logger.error("输出error日志");
logger.warn("输出warn日志");
}
}
}
- 启动你的logstash,成功后会有Successfully提示,下面会输出你项目的log日志
- 然后启动你的Kibana
- 点击右侧创建索引,会看到一个索引名字,跟你在conf文件里配置的名字一样
- 点击完下一步然后去查看
- 至此完成,如有不懂,欢迎留言