2014-09-30 54 views
0

我們使用ELK(ElasticSearch + Logstash + Kibana)堆棧進行日誌管理,但問題在於kibana會單獨顯示每個組件的統計信息。 我想讓多個組件中的事件發生關聯,例如,在tomcat服務器中發生異常,導致客戶使用HTTP 404。分佈式環境中日誌事件的相關性

請建議如何實現,如果ELK建議其他開源解決方案無法實現。

回答

1

您需要在特定事件之間添加連接。沒有任何東西可以用於開箱即用。你必須自己添加它,這取決於你操作的是什麼類型的系統。

PHP

您可以使用mod_unique_id創建一個唯一的請求ID,由Apache服務器創建的。這個ID可以在您的PHP環境中用於日誌記錄($_SERVER['UNIQUE_ID'])。參見[1]

的Java

如果你使用Java,我更喜歡稍微不同的方法。在您的應用程序中生成一個用於標識特定請求的請求標識。您可以將請求ID添加到您的MDC(消息診斷上下文)中。 MDC可以通過各種GELF連接器和logstash日誌消息一起提交。在您的HTTP響應中也使用請求標識作爲Apache的標頭。您可以在Apache訪問日誌中記錄響應標題。有關Java部分,請參見[2]。

通常,如果您的環境包含多個Apache和應用程序服務器,那麼在系統中的所有調用之間傳遞RequestId(也可能是SessionId)是值得的。這樣您就可以關聯請求/會話中的所有活動。

鏈接