SpringBoot 整合 ELK 实现日志收集
1、前提 已安装好 elasticsearch 和 kibana , 详见博客:
https://www.cnblogs.com/cgsdg/p/16419667.html
https://www.cnblogs.com/cgsdg/p/16420111.html
2、安装 logstash
在 /usr/local/es/ 目录下载 logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.3.1-linux-x86_64.tar.gz
tar -zxvf logstash-8.3.1-linux-x86_64.tar.gz
运行测试
./bin/logstash -e 'input {stdin {} } output { stdout {}}'
ps:
-e选项表示,直接把配置放在命令中,这样可以有效快速进行测试
启动成功后, 控制台输入内容, 等待 logstash 输出
{ "@timestamp" => 2022-07-05T07:31:01.670165Z, "message" => "hello world", "@version" => "1", "host" => { "hostname" => "localhost" }, "event" => { "original" => "hello world" } }
3、创建 logstash 配置文件, logstash-spring.conf, 设定输入和输出 , 配置如下, 放到 /bin 目录下
input { tcp { mode=>"server" host=>"0.0.0.0" port=>"4560" codec=>json_lines } } output { elasticsearch{ hosts=>"192.168.1.103:9200" index=>"springboot-logstash-%{+YYYY.MM.dd}" } }
在 logstash 中安装 json_lines 插件
cd /bin/ /* 安装插件 */ ./logstash-plugin install logstash-codec-json_lines
依次启动 elasticsearch、 kibana 、 logstash
./bin/logstash -f ./bin/logstash-springboot.conf
注意,如果进入到bin 目录使用 ./ logstash 启动,-f 后面配置文件路径也需要从 ./bin 开始,相对于logstash安装目录的路径, 否则可以从错误日志中看到无法找到配置文件
4、 SpringBoot 集成 Logstash
4.1、 在 pom.xml 中添加 logstash-logback-encoder 依赖
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.3</version> </dependency>
4.2、 添加配置文件 logback-spring.xml 让 logback 日志输出到 logstash
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/default.xml" /> <!-- 应用名称 --> <property name="APP_NAME" value="yyds" /> <!-- 日志文件保存路径 --> <contextName>${APP_NAME}</contextName> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!--<pattern>%date [%level] [%thread] %logger{60} [%file : %line] %msg%n</pattern>--> <pattern>%d %p (%file:%line\)[%.7thread]- %m%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 每天记录日志到 appender --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>logs/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern> <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <!--<pattern>%date [%level] [%thread] %logger{60} [%file : %line] %msg%n</pattern>--> <pattern>%d %p (%file:%line\)[%.7thread]- %m%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 输出到 logstash 的 appender --> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <!-- 可以访问的 logstash 的日志收集端口 --> <destination>192.168.1.103:4560</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"></encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> <appender-ref ref="LOGSTASH" /> </root> </configuration>
4.3、 运行 SpringBoot 程序
5、 在 Kibana 中查看日志信息
本文使用 8.2.0 版本
找到 StaskManagement 菜单, 进入后,在 Index Management 菜单下,即可看到 生成的日志索引
在 Data Views 菜单下, 创建新的 data view
输入表达式, springboot-logstash-* , 创建新的data viewer
然后在 discovery 菜单下, 即可看到日志, 对日志进行过滤查看等操作