2016-03-17 76 views
1

我正在開發幾種通過HTTP相互通信的服務。 Logback被用作日誌框架。跟蹤服務間通話的方法

如果在一個服務中發生錯誤,通過查看服務日誌來定義錯誤原因並不困難。但是,如果我們有一個下游的呼叫影響多項服務:

服務A - >服務B - >服務C - >服務d

最後服務失敗,出現錯誤,我需要一些意味着追蹤呼叫到服務A解決問題。

是否有任何針對該問題的現成解決方案?我應該添加一些額外的屬性來記錄每條下游呼叫唯一的消息嗎?

回答

0

實際上有一種基於彈簧的服務的解決方案:request correlation spring cloud starter

過濾器爲每個請求添加唯一的請求標識符作爲標頭(如果沒有這種標頭)。人們可以將該ID設置爲MDC並將其添加到具有服務ID的日誌條目中。

1

如果你想跟蹤執行流程,你需要在每條消息上添加一些標籤。你將需要:

  • 請求標識符
  • 服務標識符。

當一個流程開始時,您用請求標識符和服務標識符標記第一個調用。在處理呼叫並且需要進行其他呼叫的每個服務上,對於其他服務,您保留請求標識符並將當前服務標識符添加到您收到的請求中的一個。

基本上,請求標識符允許您標識呼叫流,而服務標識符允許您查看流中的跳數。

對於你的榜樣,服務A - >服務B - >服務C - >服務d,你可能有這樣的事情:

  1. 服務一開始呼叫 「123-A」;
  2. 服務B收到此消息並需要打電話給服務C,因此它使用「123-A」並且廣告其標識符:「123-A,B」;
  3. 服務C收到此消息並需要打電話給服務D,因此它使用「123-A,B」並且廣告他的標識符:「123-A,B,C」;
  4. 如果服務D中的請求發生某些事情,您知道要查找的服務日誌(A,B,C)以及要查找的內容(123)。

您可以在HTTP消息或HTTP標頭中包含這些內容,但是當您記錄某些內容時,想法會以某種方式將它們添加到日誌消息中。

當然上面的例子只是一個簡單的例子,所以它可以擴展到其他情況。這個想法是把這些調用當作一種堆棧。在每一跳中,您都會將某些標識「推」到消息中。

+0

非常感謝!我找到了類似於您的建議的現成解決方案。 – Aliaxander