我們使用ELK(ElasticSearch + Logstash + Kibana)堆棧進行日誌管理,但問題在於kibana會單獨顯示每個組件的統計信息。 我想讓多個組件中的事件發生關聯,例如,在tomcat服務器中發生異常,導致客戶使用HTTP 404。分佈式環境中日誌事件的相關性
請建議如何實現,如果ELK建議其他開源解決方案無法實現。
我們使用ELK(ElasticSearch + Logstash + Kibana)堆棧進行日誌管理,但問題在於kibana會單獨顯示每個組件的統計信息。 我想讓多個組件中的事件發生關聯,例如,在tomcat服務器中發生異常,導致客戶使用HTTP 404。分佈式環境中日誌事件的相關性
請建議如何實現,如果ELK建議其他開源解決方案無法實現。
您需要在特定事件之間添加連接。沒有任何東西可以用於開箱即用。你必須自己添加它,這取決於你操作的是什麼類型的系統。
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)是值得的。這樣您就可以關聯請求/會話中的所有活動。
鏈接