springboot elk 微服务日志收集

发布时间:2023-02-22 08:23:33
修改时间:2025-04-29 15:28:57
总阅读数:346
今日阅读数:0
昨日阅读数:0
字数:5666

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查看服务产生的日志

如有疑问欢迎在评论区留言讨论