Spring Cloud 系列之 Sleuth 鏈路追蹤(三)

本篇文章爲系列文章,未讀前幾集的同學請猛戳這裏:

本篇文章講解 Sleuth 如何使用 Elasticsearch、Logstash、Kibana 分析追蹤數據。


使用 ELK 分析追蹤數據

點擊鏈接觀看:ELK 環境準備視頻(獲取更多請關注公衆號「哈嘍沃德先生」)

ELK 是 elastic 公司提供的一套完整的日誌收集以及展示的解決方案,是三個產品的首字母縮寫,分別是 Elasticsearch、Logstash 和 Kibana。

  • Elasticsearch 簡稱 ES:實時的分佈式搜索和分析引擎,它可以用於全文搜索,結構化搜索以及分析。建立在全文搜索引擎 Apache Lucene 基礎上的搜索引擎,使用 Java 語言編寫。
  • Logstash:具有實時傳輸能力的數據收集引擎,將各種各樣的數據進行收集、解析,併發送給 ES。使用 Ruby 語言編寫。
  • Kibana:爲 Elasticsearch 提供了分析和可視化的 Web 平臺。它可以在 Elasticsearch 的索引中查找,交互數據,並生成各種維度表格、圖形。
  • Beats:一組輕量級採集程序的統稱,使用 Go 語言編寫。以下是 elastic 官方支持的 5 種 beats,事實上,偉大的開源力量早已創造出大大小小几十甚至上百種 beats,只有你沒想到的,沒有 beats 做不到的:
    • Filebeat:進行文件和目錄採集,主要用於收集日誌數據。
    • Winlogbeat:專門針對 Windows 的 event log 進行的數據採集。
    • Metricbeat:進行指標採集,指標可以是系統的,也可以是衆多中間件產品的,主要用於監控系統和軟件的性能。
    • Packetbeat:通過網絡抓包、協議分析,對一些請求響應式的系統通信進行監控和數據收集,可以收集到很多常規方式無法收集到的信息。
    • Heartbeat:系統間連通性檢測,比如 icmp,tcp,http 等系統的連通性監控。

環境準備

之前的課程中我們已經學習過 ELK 的詳細使用,這裏不再過多贅述,直接開啓使用即可。

文中使用的 ELK 版本統一爲 7.5.2。

  • 本文使用的 Elasticsearch 集羣地址爲:
    • 192.168.10.101:9200
    • 192.168.10.102:9200
    • 192.168.10.103:9200
  • 本文使用的 Logstash 的地址爲:
    • 192.168.10.101:9250
  • 本文使用的 Kibana 的地址爲:
    • 192.168.10.101:5601

Logstash 運行時指定的配置文件 log-to-es.conf 內容如下:

# 數據入口
input {
	tcp {
		mode => "server"
		host => "192.168.10.101"
		port => 9250
	}
}
# 處理數據
filter {
	# 獲取 @timestamp 的值並加上 8*60*60(北京時間比 logstash 中@timestamp 晚了 8 小時),然後賦值給變量 timestamp。
	ruby { 
		code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" 
	}
	# 將 timestamp 值重新賦值給 @timestamp
	ruby {
		code => "event.set('@timestamp', event.get('timestamp'))"
	}
	# 刪除變量 timestamp
	mutate {
		remove_field => ["timestamp"]
	}
}
# 數據出口
output {
	elasticsearch {
		hosts => ["192.168.10.101:9200", "192.168.10.102:9200", "192.168.10.103:9200"]
		index => "applog"
	}
}

添加依賴

在需要進行鏈路追蹤的項目中(服務網關、商品服務、訂單服務)添加 logstash-logback-encoder 依賴。

<!-- logstash 編碼依賴 -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.3</version>
</dependency>

日誌配置

在需要進行鏈路追蹤的項目中(服務網關、商品服務、訂單服務)添加 logstash 輸出 JSON 格式數據

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
    
    ...

    <!-- 爲 Logstash 輸出 JSON 格式數據 -->
    <appender name="LOGSTASH_PATTERN" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!-- 數據輸出目的地 -->
        <destination>192.168.10.101:9250</destination>
        <!-- 日誌輸出編碼 -->
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <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>
        </encoder>
    </appender>

    <!-- 日誌輸出級別及方式 -->
    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="LOGSTASH_PATTERN"/>
        <appender-ref ref="DEBUG_FILE"/>
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="WARN_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>
    
    ...

</configuration>

查看索引庫

重啓項目後,訪問:http://192.168.10.101:9100 可以看到已經創建好了 applog 索引庫。

測試

訪問:http://localhost:9000/order-service/order/1 查看索引庫結果如下:

訪問:http://192.168.10.101:5601/ Kibana 首頁。

添加 applog 索引庫。

不使用時間過濾器。

搜索 gateway 結果如下:

至此 Sleuth 鏈路追蹤所有的知識點就講解結束了。

本文采用 知識共享「署名-非商業性使用-禁止演繹 4.0 國際」許可協議

大家可以通過 分類 查看更多關於 Spring Cloud 的文章。


🤗 您的點贊轉發是對我最大的支持。

📢 掃碼關注 哈嘍沃德先生「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章