
分散式追蹤
問題陳述
微服務架構將應用程式構建為一組鬆散耦合的微服務,每個服務都可以以敏捷的方式獨立開發,以實現持續交付/部署。請求通常跨越多個服務。使用外部監控,我們可以檢查整體響應時間和呼叫次數,但是如何深入瞭解單個事務/操作呢?一個服務可能會使用資料庫、訊息佇列、事件溯源等。如何追蹤散佈在多個服務的日誌?
解決方案
我們可以構建一個服務來執行以下操作:
關聯ID - 為每個外部請求生成一個唯一的外部請求ID,並將此外部ID傳遞給處理該請求的每個服務。
記錄關聯ID - 處理服務生成的每個日誌訊息都應包含此關聯ID。
記錄詳細資訊 - 在服務處理請求時,記錄開始/結束時間和其他相關詳細資訊到日誌中。
可搜尋日誌
由於日誌應放置在集中位置,下圖展示瞭如何使用Kafka、Logstash和Kibana來聚合日誌,並使用所需的過濾器搜尋索引日誌。

微服務生成日誌,這些日誌使用kafka日誌附加程式釋出,然後將日誌訊息輸出到kafka叢集。Logstash從kafka提取訊息,轉換訊息併發布到Elasticsearch容器。現在Kibana提供了一個視覺化介面來搜尋/讀取Elasticsearch容器中的索引日誌,並提供所需的過濾器。
廣告