springboot elk 微服务日志存储
安装elasticsearch
elasticSearch 7.8 下载地址: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0
下载完成后解压运行
安装logstash
下载地址: https://www.elastic.co/cn/logstash/
解压后修改配置文件 config/logstash.conf
input {
tcp {
mode => "server"
host => "localhost" #安装logstash的ip
port => 4560 #设置logstash的端口
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"] #es ip:端口
index => "test-java-logstash-%{+YYYY.MM.dd}" #es库
#user => "elastic"
#password => "changeme"
}
}
启动:
- windows
bin\logstash.bat -f config\logstash.conf
- Linux
./bin/logstash.bat -f ./config/logstash.conf
安装kibana
下载地址:https://www.elastic.co/cn/downloads/kibana
下载完成后解压运行即可
- windows
bin\kibana.bat
- linux
./bin/kibana.sh
springboot项目配置
在pom.xml文件中添加依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.3</version>
</dependency>
在resouraces目录下的文件 application.yaml 添加配置
spring:
application:
name: test-service
logstash:
host: 127.0.0.1
port: 4560
在resouraces目录下新建文件 logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--该日志将日志级别不同的log信息保存到不同的文件中 -->
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProperty scope="context" name="springAppName"
source="spring.application.name"/>
<springProperty scope="context" name="serverPort"
source="server.port"/>
<springProperty scope="context" name="logstashHost"
source="logstash.host"/>
<springProperty scope="context" name="logstashPort"
source="logstash.port"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 为logstash输出的JSON格式的Appender -->
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${logstashHost:- }:${logstashPort:- }</destination>
<!-- 日志输出编码 -->
<!-- 简单配置-->
<!-- <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">-->
<!-- <providers>-->
<!-- <timestamp>-->
<!-- <timeZone>Asia/Shanghai</timeZone>-->
<!-- </timestamp>-->
<!-- </providers>-->
<!-- <customFields>{"applicationName":"${springAppName:-}"}</customFields>-->
<!-- </encoder>-->
<!-- 自定义json配置-->
<encoder
class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder" charset="UTF-8">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"level": "%level",
"service": "${springAppName:-}",
"port": "${serverPort:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger",
"message": "%message",
"stack_trace":"%exception{full}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="logstash"/>
</root>
</configuration>
kibana中查看日志
成功在kibana查看服务产生的日志
如有疑问欢迎在评论区留言讨论