elk搜集日志,實現logstash根據message中結構不同動態創建索引並擴展功能,區分message中json和非json數據簡單方式


搜集日志,但是框架本身也會打印很多日志是字符串的。我們自己希望的日志用json,但是又需要json字段可以擴展,logstash收集日志后都放在了message字段中,我們自定義打印的是json串,spring打印的是string,為此我們要分別處理日志,把框架日志和一般信息日志和我們的有用數據日志分開,並且有用數據記錄的日志可以按照不同索引分類

為此我們的搜集日志時需要動態處理

logstash.conf如下:

input {
    tcp {  
    ##host:port就是上面appender中的 destination,這里其實把logstash作為服務,開啟9601端口接收logback發出的消息  
        host => "寫你的logstash-ip"  
        port => 端口
    #模式選擇為server  
        mode => "server"  
        tags => ["tags"]  

    ##格式json  
       codec=>"json"        
    }  

} 
filter {
#可以是你自定義的一個特殊標識如indexName(自定義日志中必然存在,其他不存在的一個字段key),
以此來區分message的內容是json的可以轉成json,並將json的key值及嵌套key值放在elasticsearch的一級別下
    if "indexName" in [message]{ 
        json {
        
            source => "message"
        }
        mutate {
          add_field => { "exttmp" => "%{ext}" }
        }
        json {
          source => "exttmp"
          remove_field => ["exttmp"]
        }
    }
}
output {
    if "indexName" in [message]{#####收集特殊關注的自定義日志
        elasticsearch {
        #ES地址
                hosts => "你的kibana-ip:端口"
        #自定義索引搜集我們重點關注的日志數據
                index => "%{[indexName]}"
        }
        stdout { codec => rubydebug}
    }else {#####收集不特殊關注的自定義日志或框架日志
        elasticsearch {
        #kibana
                hosts => "你的kibana-ip:端口"
        #項目名做索引搜集一般的日志
                index => "%{[project]}"
        }
        stdout { codec => rubydebug}
    }
}

loggerback.xml

<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>配置你logstash ip:端口</destination>
        <!-- encoder必須配置,有多種可選 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "severity": "%level",
                        "service": "${springAppName:-}",
                        "trace": "%X{X-B3-TraceId:-}",
                        "span": "%X{X-B3-SpanId:-}",
                        "exportable": "%X{X-Span-Export:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
            <customFields>{"project":"elasticsearch-test"}</customFields>
        </encoder>
    </appender>
    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <!-- 日志輸出級別 -->
    <root level="INFO">
        <appender-ref ref="stash" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM