Spring Cloud 系列之 Sleuth 鏈路追蹤(三)
- 2020 年 4 月 29 日
- 筆記
- Sleuth, Spring Cloud, 微服務, 鏈路追蹤
本篇文章為系列文章,未讀前幾集的同學請猛戳這裡:
本篇文章講解 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>
查看索引庫
重啟項目後,訪問://192.168.10.101:9100 可以看到已經創建好了 applog
索引庫。
測試
訪問://localhost:9000/order-service/order/1 查看索引庫結果如下:
訪問://192.168.10.101:5601/ Kibana 首頁。
添加 applog 索引庫。
不使用時間過濾器。
搜索 gateway 結果如下:
至此 Sleuth 鏈路追蹤所有的知識點就講解結束了。
本文採用 知識共享「署名-非商業性使用-禁止演繹 4.0 國際」許可協議
。
大家可以通過 分類
查看更多關於 Spring Cloud
的文章。
🤗 您的點贊
和轉發
是對我最大的支持。
📢 掃碼關注 哈嘍沃德先生
「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~