Sleuth服務跟蹤:整合 Logstash

無敵天驕發表於2021-04-09

假設前面的案例中,我們已經實現了服務呼叫之間的鏈路追蹤,但是這些日誌是分散在各個機器上的,就算出現問題了,我們想快速定位,也得從各個機器把日誌整合起來,再去查問題。這個時候就需要引入日誌分析系統了,比如 ELK,可以將多臺伺服器上的日誌資訊統一收集起來,在出問題的時候我們可以輕鬆根據  traceId 來搜尋出對應的請求鏈路資訊。

一、ELK 簡介

ELK 由三個元件組成:

  • Elasticsearch是個開源分散式搜尋引擎,它的特點有分散式、零配置、自動發現、索引自動分片、索引副本機制、 restful 風格介面、多資料來源、自動搜尋負載等。
  • Logstash 是一個完全開源的工具,它可以對日誌進行收集、分析、並儲存以供以後使用。
  • kibana 是一個開源和免費的工具,它可以為  Logstash 和  ElasticSearch 提供日誌分析友好的Web介面,可以彙總、分析和搜尋重要資料日誌。

ELK官網:  https:///cn/

二、輸出 JSON 格式日誌

可以透過  logback 來輸出Json格式的日誌,讓  Logstash 收集儲存到  Elasticsearch 中,然後在  kibana 中檢視。想要輸入Json格式的資料需要加一個依賴:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder </artifactId>
    <version>4.8</version>
    <scope>runtime</scope>
</dependency>

然後建立一個  logback-spring.xml 檔案。配置 logstash 需要收集的資料格式如下:

<!-- Appender to log to file in a JSON format --><appender name= "logstash"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>$ {LOG FILE}.json</file>
        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</fileNamePattern>
        <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder class = "net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">        <providers>            <timestamp>                <timeZone>UTC</timeZone>            </timestamp>            <pattern>                <pattern>                    {                    "severity": "%level",                    "service": "${spr ingAppName:-}",                    "trace": "%X{X-B3-TraceId:-}",                    "span": "%X{X-B3-SpanId:-}",                    "parent": "%X{X-B3-ParentSpanId:-}",                    "exportable": "%X{X-Span-Export:-}",                    "pid": "${PID:-}",                    "thread": "%thread",                    "class": "%logger{40}",                    "rest": "&message "
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

詳細的配置資訊可參考:
https:/ github.com/spring-cloud  sleuth-documentation-apps/blob/master/service1/src/main/resources/ logback-spring.xml

整合好後就能在輸出的日誌目錄中看到有一個以  .json 結尾的日誌檔案了,裡面的資料格式是Json形式的,直接可以透過 Logstash 進行收集。

{
    "timestamp": "2017-11-30T01 :48:32.221+00: 00",
    "severity" : "DEBUG" , 
    "service":" fsh-substitution",
    "trace": "41b5a575c26eeea1" ,
    "span": "41b5a575c2 6eeeal" ,
    "parent": "41b5a575c26eeea1",
    "exportable": " false",
    "pid": "12024",
    "thread": "hystrix-fsh-house- 10" ,
    "class": "c.f.a. client . fsh. house . HouseRemoteClient",
    "rest": "[HouseRemoteC1 ient#hosueInfo] <--- END HTTP ( 796-byte body ) "
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69964492/viewspace-2767285/,如需轉載,請註明出處,否則將追究法律責任。

相關文章