前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于ELK收集业务日志的初步体验

基于ELK收集业务日志的初步体验

作者头像
用户1215919
发布2021-12-28 12:44:59
2880
发布2021-12-28 12:44:59
举报
文章被收录于专栏:大大的微笑大大的微笑

elasticsearch - 7.5.1

logstash - 7.5.1

kibana - 7.5.1

logback.properties

代码语言:javascript
复制
# 应用名称
appName=data-center
# 日志级别
logLevel=debug
# logstash服务器ip和开发端口
logstash=localhost:5044
logstash.host=127.0.0.1
logstash.port=9600

logback.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="1 seconds">
    <property scope="context" resource="config/logback.properties"/>
    <contextName>${appName}</contextName>

    

    <!-- 文件输出 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>d:/logs/${appName}-all.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                d:/logs/%d{yyyy-MM,aux}/${appName}-all.%d.%i.gz
            </FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1024MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss}[%t]%-5p %c{36}.%M\(%L\) %m%n</pattern>
        </encoder>
    </appender>

    <!--错误文件输出-->
    <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${user.home}/logs/${appName}-error.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
               d:/logs/error/${appName}-error.%d{yyyy-MM-dd}.log
            </FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1024MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss}[%t]%-5p %c{36}.%M\(%L\) %m%n
            </pattern>
        </encoder>
    </appender>

    <!-- SQL文件输出 -->
    <appender name="sql" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${user.home}/logs/${appName}-sql.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
               d:/logs/%d{yyyy-MM,aux}-sql/${appName}-sql.%d.%i.gz
            </FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1024MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss}[%t]%-5p %c{36}.%M\(%L\) %m%n</pattern>
        </encoder>
    </appender>

    <!--日志输出到logstash-->
    <appender name="logstash"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${logstash}</destination>
        <!-- encoder必须配置,有多种可选 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <customFields>{"appname":"${appName}"}</customFields>
        </encoder>
        <connectionStrategy>
            <roundRobin>
                <connectionTTL>5 minutes</connectionTTL>
            </roundRobin>
        </connectionStrategy>

        <!--无用日志过滤-->
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
                <!--<exclude>sun\.reflect\..*\.invoke.*</exclude>-->
                <exclude>o\.s\.w\.s\.h\.*</exclude>
                <exclude>o\.s\.b\.f\.s\.*</exclude>
                <rootCauseFirst>true</rootCauseFirst>
                <inlineHash>true</inlineHash>
            </throwableConverter>
        </encoder>

    </appender>

    <!--日志的异步输出配置-->
    <appender name="ASYNCConsole" class="ch.qos.logback.classic.AsyncAppender">
        <includeCallerData>true</includeCallerData>
        <appender-ref ref="console"/>
    </appender>
    <appender name="ASYNCFile" class="ch.qos.logback.classic.AsyncAppender">
        <includeCallerData>true</includeCallerData>
        <appender-ref ref="file"/>
    </appender>
    <appender name="ASYNCErrorFile" class="ch.qos.logback.classic.AsyncAppender">
        <includeCallerData>true</includeCallerData>
        <appender-ref ref="errorFile"/>
    </appender>
    <appender name="ASYNCSql" class="ch.qos.logback.classic.AsyncAppender">
        <includeCallerData>true</includeCallerData>
        <appender-ref ref="sql"/>
    </appender>
    <appender name="ASYNCLogstash" class="ch.qos.logback.classic.AsyncAppender">
        <includeCallerData>true</includeCallerData>
        <appender-ref ref="logstash"/>
    </appender>

    <logger name="org.apache" level="${logLevel}"/>
    <logger name="org.springframework" level="${logLevel}"/>
    <logger name="org.springframework.web" level="${logLevel}"/>
    <logger name="dao" level="${logLevel}" additivity="false">
        <appender-ref ref="ASYNCSql"/>
        <appender-ref ref="ASYNCConsole"/>
    </logger>

    <root level="${logLevel}">
        <appender-ref ref="ASYNCConsole"/>
        <appender-ref ref="ASYNCFile"/>
        <appender-ref ref="ASYNCErrorFile"/>
        <appender-ref ref="ASYNCLogstash"/>
    </root>

</configuration>

依赖

代码语言:javascript
复制
<dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.3</version>
        </dependency>

        <dependency>
            <groupId>net.logstash.log4j</groupId>
            <artifactId>jsonevent-layout</artifactId>
            <version>1.6</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-core</artifactId>
                </exclusion>
            </exclusions>
            <version>1.1.8</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.8</version>
        </dependency>

添加logstash配置文件

代码语言:javascript
复制
 input {
    tcp {
        host =>"127.0.0.1"
        port => 5044
    }
}
output {
     stdout {
      codec => rubydebug
     }
     elasticsearch {
        action => "index"
        hosts => ["127.0.0.1:9200"]
        index => "data-center"
     }
 
 
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档