2011-07-20 30 views
2

我們有一些服務在VIP後面的'n'個主機上運行。當特定的請求調用發生某些故障時,我們可能會通過查看發生故障的相關主機上的日誌來了解原因。因爲請求可以發送到任何主機,所以當涉及到跟蹤日誌時,我們需要知道發生故障的是哪個主機。我們是否應該將調試信息存儲在應用程序的數據庫中

一個解決方案是將主機名與其​​他信息一起存儲在我們服務的數據庫中。 另一種方法是將日誌推送到普通商店並在那裏進行跟蹤。

我個人認爲,如果我們採用第一種方法,最終可能會在應用程序數據庫中添加許多與調試相關的屬性,從而污染它。然而,第二種選擇也不容易實施並且會產生一些開銷。而且,除了由於某些硬件特定問題而發生故障以外,發生故障的主機並沒有什麼幫助。

你們有什麼建議?

回答

1

不知道更多關於您的基礎設施,很難做到準確,但這裏有一些一般的觀點。

我不喜歡使用數據庫來存儲應用程序日誌 - 如果數據庫崩潰了,您將無法登錄它!這也不是真正的關係數據,你無法獲得可用於其他解決方案的監控工具。

我的建議是使用您的操作系統內置的事件日誌記錄解決方案;大多數日誌框架都支持這個框。在Windows上,這是事件日誌;在* nix上有syslog系統。記錄應該快速,便宜和防彈 - 這就是你從操作系統工具中得到的。

第二個問題是如何使用這些日誌進行故障排除和監控。有很多這樣做的工具,但主要針對系統管理員而不是開發人員。微軟擁有MoM,Tivoli和Big Brother以及大量的開源工具。我會用這些,而不是建立你自己的解決方案。關鍵的一點是 - 日誌記錄應該快速,便宜和強大;分析和監控的東西應該完全獨立於您的應用程序邏輯,因此您可以重複使用這些工具並處理多個項目。

0

存儲主機名應該是相當便宜,我猜。我知道你正在將日誌追加到數據庫? 您還可以存儲每個進程的pid,如果您有多個進程在同一主機名上運行,可以幫助您。主機名/ pid/timestamp組合將確保您唯一識別一個進程。

+0

這正是我試圖避免的,我們可能需要更多的調試信息存儲在數據庫中,這對於應用程序本身沒有用處,但僅限於開發人員。 – Nayn

+0

我們通常會將日誌附加到某個共享目錄中的文件。 – Charbel

相關問題