ELK集成springboot实现日志系统

2020-06-19 17:55:00
admin
原创
179

1、首先新建一个log.conf的配置文件,配置文件如下:


input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "localhost:9200"
    index => "springboot-logstash-%{+YYYY.MM.dd}"
  }
}
然后在控制台运行如下文件:



bin\logstash.bat -f config\log.conf

2、首先启动elasticsearch

3、在sprinboot  pom.xml中加入如下配置


  <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.2</version>
        </dependency>


4、在logback-spring.xml 配置如下


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--引入默认的一些设置-->
    <i n c l u d e resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="org.springframework.web" level="INFO"/>
    <logger name="org.springboot.sample" level="TRACE" />


    <!--为了防止进程退出时,内存中的数据丢失,请加上此选项-->
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>

    <!-- 可用来获取StatusManager中的状态
    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
    -->
    <!-- 测试环境 -->
    <springProfile name="dev">
        <logger name="org.springframework.web" level="ERROR"/>
        <logger name="org.springboot.sample" level="ERROR" />
        <logger name="com.aumall" level="debug" />

        <!-- 注意这里一定要放到springProfile里, 否则在你本机执行的时候还是会去找相应的文件 -->
        <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--这里需要注意日志文件中的%d、%i是不可或缺的。-->
                <fileNamePattern>logs/aumall-log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxFileSize>10MB</maxFileSize>
                <maxHistory>60</maxHistory>
                <totalSizeCap>20GB</totalSizeCap>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>127.0.0.1:4560</destination>
            <!-- 日志输出编码 -->
            <encoder charset="UTF-8"
                     class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
                <providers>
                    <timestamp>
                        <timeZone>UTC</timeZone>
                    </timestamp>
                    <pattern>
                        <pattern>
                            {
                            "logLevel": "%level",
                            "serviceName": "${springAppName:-}",
                            "pid": "${PID:-}",
                            "thread": "%thread",
                            "class": "%logger{40}",
                            "rest": "%message"
                            }
                        </pattern>
                    </pattern>
                </providers>
            </encoder>
        </appender>
        <!--异步-->
        <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
            <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
            <discardingThreshold>0</discardingThreshold>
            <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
            <queueSize>500</queueSize>
            <!-- 添加附加的appender,最多只能添加一个 -->
            <appender-ref ref="FILE" />
        </appender>
        <!--,级别从低到高分别是:debug -> info -> error -> fatel.日志输出的时候, 只会输出大于等于该级别的日志, 也就是设置了INFO之后, DEBUG是不会被输出, 只会输出INFO、ERROR和FATAL级别的日志..-->
        <root level="INFO">
            <appender-ref ref="asyncFileAppender"/>
            <appender-ref ref="LOGSTASH" />
        </root>
    </springProfile>


    <!-- 测试环境 -->
    <springProfile name="test">
        <logger name="org.springframework.web" level="ERROR"/>
        <logger name="org.springboot.sample" level="ERROR" />
        <logger name="com.aumall" level="INFO" />
        <appender name="aliyun" class="com.aliyun.openservices.log.logback.LoghubAppender">
            <!--必选项-->
            <!-- 账号及网络配置 -->
            <endpoint>cn-shanghai.log.aliyuncs.com</endpoint>
            <accessKeyId>LTAIJlM5foRGBCwV</accessKeyId>
            <accessKeySecret>mu95dM0uEs58eUqgPcuoAxAEUK0oOv</accessKeySecret>

            <!-- sls 项目配置 -->
            <project>xpg-log</project>
            <logStore>xpg-log</logStore>
            <!--必选项 (end)-->

            <!-- 可选项 -->
            <topic>test</topic>
            <source>test</source>

            <!-- 可选项 详见 '参数说明'-->
            <totalSizeInBytes>104857600</totalSizeInBytes>
            <maxBlockMs>60000</maxBlockMs>
            <ioThreadCount>8</ioThreadCount>
            <batchSizeThresholdInBytes>524288</batchSizeThresholdInBytes>
            <batchCountThreshold>4096</batchCountThreshold>
            <lingerMs>2000</lingerMs>
            <retries>10</retries>
            <baseRetryBackoffMs>100</baseRetryBackoffMs>
            <maxRetryBackoffMs>100</maxRetryBackoffMs>

            <!-- 可选项 通过配置 encoder 的 pattern 自定义 log 的格式 -->
            <encoder>
                <pattern>%d %-5level [%thread] %logger{0}: %msg</pattern>
            </encoder>

            <!-- 可选项 设置 time 字段呈现的格式 -->
            <timeFormat>yyyy-MM-dd'T'HH:mmZ</timeFormat>
            <!-- 可选项 设置 time 字段呈现的时区 -->
            <timeZone>UTC</timeZone>
        </appender>

        <!-- 注意这里一定要放到springProfile里, 否则在你本机执行的时候还是会去找相应的文件 -->
        <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--这里需要注意日志文件中的%d、%i是不可或缺的。-->
                <fileNamePattern>logs/aumall-log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxFileSize>10MB</maxFileSize>
                <maxHistory>60</maxHistory>
                <totalSizeCap>20GB</totalSizeCap>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
        <!--异步-->
        <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
            <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
            <discardingThreshold>0</discardingThreshold>
            <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
            <queueSize>500</queueSize>
            <!-- 添加附加的appender,最多只能添加一个 -->
            <appender-ref ref="FILE" />
        </appender>
        <!--,级别从低到高分别是:debug -> info -> error -> fatel.日志输出的时候, 只会输出大于等于该级别的日志, 也就是设置了INFO之后, DEBUG是不会被输出, 只会输出INFO、ERROR和FATAL级别的日志..-->
        <root level="ERROR">
            <appender-ref ref="asyncFileAppender"/>
            <appender-ref ref="aliyun"/>
        </root>
    </springProfile>

    <!-- 生产环境 -->
    <springProfile name="prod">
        <logger name="org.springframework.web" level="ERROR"/>
        <logger name="org.springboot.sample" level="ERROR" />
        <logger name="com.aumall" level="INFO" />
        <appender name="aliyun" class="com.aliyun.openservices.log.logback.LoghubAppender">
            <!--必选项-->
            <!-- 账号及网络配置 -->
            <endpoint>cn-shanghai.log.aliyuncs.com</endpoint>
            <accessKeyId>LTAIJlM5foRGBCwV</accessKeyId>
            <accessKeySecret>mu95dM0uEs58eUqgPcuoAxAEUK0oOv</accessKeySecret>

            <!-- sls 项目配置 -->
            <project>xpg-log</project>
            <logStore>xpg-log</logStore>
            <!--必选项 (end)-->

            <!-- 可选项 -->
            <topic>prod</topic>
            <source>prod</source>

            <!-- 可选项 详见 '参数说明'-->
            <totalSizeInBytes>104857600</totalSizeInBytes>
            <maxBlockMs>60000</maxBlockMs>
            <ioThreadCount>8</ioThreadCount>
            <batchSizeThresholdInBytes>524288</batchSizeThresholdInBytes>
            <batchCountThreshold>4096</batchCountThreshold>
            <lingerMs>2000</lingerMs>
            <retries>10</retries>
            <baseRetryBackoffMs>100</baseRetryBackoffMs>
            <maxRetryBackoffMs>100</maxRetryBackoffMs>

            <!-- 可选项 通过配置 encoder 的 pattern 自定义 log 的格式 -->
            <encoder>
                <pattern>%d %-5level [%thread] %logger{0}: %msg</pattern>
            </encoder>

            <!-- 可选项 设置 time 字段呈现的格式 -->
            <timeFormat>yyyy-MM-dd'T'HH:mmZ</timeFormat>
            <!-- 可选项 设置 time 字段呈现的时区 -->
            <timeZone>UTC</timeZone>
        </appender>

        <!-- 注意这里一定要放到springProfile里, 否则在你本机执行的时候还是会去找相应的文件 -->
        <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--这里需要注意日志文件中的%d、%i是不可或缺的。-->
                <fileNamePattern>/mnt/site/xpandago/java/logs/aumall-log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxFileSize>10MB</maxFileSize>
                <maxHistory>60</maxHistory>
                <totalSizeCap>20GB</totalSizeCap>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
        <!--异步-->
        <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
            <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
            <discardingThreshold>0</discardingThreshold>
            <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
            <queueSize>500</queueSize>
            <!-- 添加附加的appender,最多只能添加一个 -->
            <appender-ref ref="FILE" />
        </appender>
        <!--,级别从低到高分别是:debug -> info -> error -> fatel.日志输出的时候, 只会输出大于等于该级别的日志, 也就是设置了INFO之后, DEBUG是不会被输出, 只会输出INFO、ERROR和FATAL级别的日志..-->
        <root level="ERROR">
            <appender-ref ref="asyncFileAppender"/>
            <appender-ref ref="aliyun"/>
        </root>
    </springProfile>
    <!--#### 本地日志查看 end ####-->
</configuration>

2、先启动springboot项目,然后在启动kibana(踩了不少坑,切记,如果不启动springboot项目,kibana创建索引的时候会找不到)

kibana配置修改如下:

此时 elasticsearch 、springboot 、kibana都启动了

5、kibana索引建立,地址http://localhost:5601/

备注:这个是索引列表,不用自己新建,会自动生成根据你的规则生成

    发表评论
    评论通过审核之后才会显示。
    文章分类
    联系方式
    联系人: 郑州-小万
    电话: 13803993919
    Email: 1027060531@qq.com
    QQ: 1027060531
    网址: www.wanhejia.com