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 菜单下, 即可看到日志, 对日志进行过滤查看等操作

 

posted @ 2022-07-05 16:10  长弓射大狗  阅读(1233)  评论(0编辑  收藏  举报