# 《Seckill秒杀系统》第108章:秒杀系统整合日志治理

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:秒杀系统整合日志治理,实现可视化日志排查与搜索功能,实现可视化日志监控功能,掌握日志治理在业务系统中的落地实现方案,并能够将日志治理的方案和实现方式灵活应用到自身实际项目中。

大家好,我是冰河~~

日志治理是秒杀系统建设过程中非常重要的一环,通过可视化的日志治理方案,能够直观、方便的查看日志,监控系统的执行流程,并对系统的运行情况进行监控,及时发现问题和性能瓶颈,快速处理。

# 一、前言

在前面的文章中,我们系统的讲述了日志治理的基本知识、原则与架构,并且快速搭建了ELK环境。接下来,就需要在秒杀系统中整合日志治理,通过ELK可视化的方式对系统的日志进行观测和监控,以便及时发现秒杀系统的问题和性能瓶颈,进而进一步进行处理。

# 二、本章诉求

秒杀系统整合ELK实现日志治理,最终实现日志观测和监控的可视化,及时发现秒杀系统的问题和性能瓶颈,进而进一步处理相关的问题和提升秒杀系统的性能,最终能够将日志治理的方案和实现方式灵活应用到自身实际项目中。

# 三、秒杀系统整合ELK

秒杀系统整合ELK实现日志治理就比较简单了,具体整合步骤如下所示。

(1)引入logback依赖

在秒杀系统的pom.xml文件中引入logback依赖,如下所示。

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>${logstash-logback.version}</version>
</dependency>
1
2
3
4
5

(2)配置logback-spring.xml文件

在每个微服务的启动工程下的src/main/resources目录下新增logback-spring.xml文件,以用户微服务为例,logback-spring.xml文件的内容如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <property name="APP_NAME" value="seckill-user"/>
    <property name="LOG_PATH" value="${user.home}/${APP_NAME}/logs"/>
    <property name="LOG_FILE" value="${LOG_PATH}/application.log"/>

    <appender name="APPLICATION"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    <conversionRule conversionWord="ip" converterClass="io.binghe.seckill.common.utils.ip.IPConverterConfig" />

    <appender name="LOG_STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.184.102:5044</destination>
        <queueSize>1048576</queueSize>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "app_date": "%d{yyyy-MM-dd HH:mm:ss:SSS}",
                        "app_ip": "%ip",
                        "app_thread": "%thread",
                        "app_traceId": "%X{traceId}",
                        "app_level": "%level",
                        "app_logger": "%logger{40}",
                        "app_message": "%msg%n"
                        }
                    </pattern>
                </pattern>
            </providers>

        </encoder>
    </appender>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>utf8</charset>
            <pattern>%d{yyyy-MM-dd HH:mm:ss:SSS}|%ip|%thread|%X{traceId}|%level|%logger{36}|%msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="LOG_STASH"/>
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="APPLICATION"/>
    </root>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

可以看到,在用户微服务的logback-spring.xml文件中,配置了Logstash服务的地址,并且配置了JSON格式的结构化日志。通过指定Appender类型的日志,直接通过TCP的方式将日志发送给Logstash,并且将日志的格式设置为JSON格式。

另外,需要注意的是在用户微服务的logback-spring.xml文件中,有如下一行配置。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码