springboot 整合 elk

288 阅读1分钟

docker pull elasticsearch:6.8.5 docker network create elknetwork

docker run -d --name elasticsearch --net elknetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.5

docker pull kibana:6.8.5 docker run -d --name kibana --net elknetwork -p 5601:5601 kibana:6.8.5

docker pull logstash:6.8.5

logstash.conf

input {
    tcp {
        host => "0.0.0.0"
        port => 5044
        codec => json_lines
    }
}

output {
   elasticsearch {
        hosts => "elasticsearch:9200"
   }
   stdout { codec => rubydebug}

docker run -d --name logstash -v ~/pipeline/:/usr/share/logstash/pipeline/ logstash:6.8.5

docker logs logstash 查看是否启动正常

pom.xml 引入

        <!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.2</version>
        </dependency>

在 springboot 里的 resource 里建 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--该日志将日志级别不同的log信息保存到不同的文件中 -->
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />

    <!-- 控制台的日志输出样式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />

    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!-- 日志输出编码 -->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- 为logstash输出的JSON格式的Appender -->
    <appender name="logstash"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:5044</destination>
        <!-- 日志输出编码 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <pattern>
                    <pattern>
                        {
                         "project": "wenlvren",
                         "timestamp": "%date{\"yyyy-MM-dd'T'HH:mm:ss,SSSZ\"}",
                         "log_level": "%level",
                         "thread": "%thread",
                         "message": "%message",
                         "class": "%logger{40}",
                         "stack_trace": "%exception{10}",
                         "req_id": "%X{reqId}"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="logstash" />
    </root>

</configuration>

最后访问: http://127.0.0.1:5601/