2012-05-31 74 views
5

我打算將之前創建的Java Web應用程序遷移到Azure。應用程序以前使用log4j來保存在本地創建的文件中的應用程序級日誌。問題是,在具有多個實例的Azure角色中,我必須收集並聚合這些日誌,並確保它們存儲在永久存儲中而不是虛擬機硬盤上。Azure Java Tomcat日誌記錄

日誌記錄是應用程序的關鍵組件,但它不能減慢實際工作。我考慮過多種選擇,我對最佳實踐感到好奇,考慮安全性,存儲時間和後期處理的日誌一致性和性能的最佳解決方案。以下是這些選項的列表:

  • 使用log4j的帶有自定義Appender存儲在SQL Azure中的信息。
  • 使用log4j和自定義Appender將信息存儲在Azure Tables存儲中。
  • 編寫一個額外的工具,將數據從本地硬盤傳輸到上述任何一個持久存儲。

是否有任何其他的方法,還是有這個問題對Java任何完整的解決方案? 考慮到上面提到的標準,以上哪項最好?

回答

1

最後我決定寫一個Log4J Appender。我不需要收集診斷信息,我的主要目標只是以易於交換的方式收集日誌文件。我的第一個擔心是它會減慢應用程序的運行速度,但是通過只寫入內存並且只是週期性地將日誌數據寫入Azure表格,它可以完美地工作,而不需要進行太多的API調用。

這裏是我實施的主要步驟:

首先,我創建了存儲在Azure的表的實體類,稱爲LogEntity擴展com.microsoft.windowsazure.services.table.client.TableServiceEntity

接下來我寫了appender,它擴展了org.apache.log4j.AppenderSkeleton,其中包含一個java.util.List<LogEntity>

從改寫方法protected void append(LoggingEvent event)我只添加到此集合,然後創建一個線程定期清空此列表並將數據寫入Azure表。

最後,我將新創建的Appender添加到我的log4j配置文件中。

2

現在沒有現成的解決方案,但是對於Table Storage而言,自定義appender是有意義的,因爲您可以使用與診斷類似的方式查詢日誌(性能指標等) 。

唯一的考慮是如果你寫大量的日誌語句(比如每秒數百次)。以此速度,您將開始注意到每月賬單顯示的交易成本。每10,000,每秒100便士,你看每個實例約250美元。如果你有多個實例,成本從那裏上升。使用SQL Azure,您不需要交易成本,但是存儲成本更高。

如果您想要使用存儲傳輸方法,您可以設置Windows Azure診斷來觀察目錄並定期將文件上傳到BLOB存儲。唯一的障礙是Java沒有直接支持配置診斷。如果你使用Eclipse構建你的項目,你只有一個腳本文件來啓動一切,所以你需要編寫一個小的.net應用程序,或者使用類似AzureRunMe的東西。如果您正在構建Visual Studio項目以啓動您的Java應用程序,那麼您可以在沒有單獨的應用程序的情況下設置診斷程序。

Persistent Systems剛剛發佈了關於Java和診斷設置的blog post 我會在鏈接生效後通過鏈接更新此答案 。另外,請看Cloud Ninja for Java,它將通過使用設置診斷的外部.net exe實現Tomcat日誌記錄(以及相關的分析),如即將發佈的文章中所述。

+0

編輯,以澄清需要獨立 。net應用程序僅在從Eclipse項目構建應用程序時,它不包含.net腳手架代碼(per @ Avkash對WorkerRole.cs的引用)。 –

+0

我仍然期待閱讀博客文章! – hpityu

+0

剛剛編輯以包含鏈接。有格式錯誤,但本週持續更正。 –

1

請訪問我的博客並下載文檔。在本文檔中,您可以查找錯誤記錄解決方案的章節「Tomcat解決方案診斷」。這個文檔寫得很久,但你確定可以使用這種方法在Tomcat中生成任何類型的基於Java的日誌記錄(log4j,當然),並直接查看。

第6章:Tomcat的解決方案診斷

  • 錯誤記錄
  • 查看日誌文件

http://blogs.msdn.com/b/avkashchauhan/archive/2010/10/29/windows-azure-tomcat-solution-accelerator-full-solution-document.aspx

在有自定義應用程序,即java.exe的,PHP的任何情況。 exe,python等,我建議直接在「本地存儲」文件夾創建日誌文件,然後初始化工作角色中的Azure診斷(W orkerRole.cs)將這些自定義日誌文件直接從Azure VM導出到Azure Blob存儲。

如何在本地存儲描述here.

使用Azure診斷和發送日誌到Azure的BLOB將是最廉價和強大然後任何其他方法u必須說明創建自定義日誌。

+0

在從Eclipse項目進行部署的情況下,沒有WorkerRole.cs。只需啓動腳本。 –

+1

您可以執行的操作是創建diagnostics.wadcfg並配置計時器和診斷設置並放入角色根文件夾。當Azure角色啓動時,它將在根文件夾中查找diagnostics.wadcfg,它將加載配置並啓動診斷。 – AvkashChauhan

+1

以下是有關如何使用「Windows Azure診斷配置文件」的鏈接 - > http://msdn.microsoft.com/zh-cn/library/gg604918.aspx – AvkashChauhan

0

另一種選擇;

我們不能繼續使用log4j標準方式(如DailyRollingFileAppender),只能在UNC路徑上,在VM(IaaS)上創建文件。這個虛擬機只需要有一點磁盤空間,但不需要任何強大的處理能力。所以人們可以共享一個可用的虛擬機,或者創建一個最小配置的虛擬機,最好在同一個區域和雲服務中。

累積的日誌文件可以通過以下方式訪問RDP/FTP等

這樣一個不會產生交易成本,制定一部專門的Log4j追加...的 成本也有可能成爲一個更便宜的選擇。

感謝 傑文

PS:我是指更多地轉向,那些應用程序日誌,而不是(的Weblogic的卡塔利娜/經理.LOG或.OUT文件)的應用程序服務器的日誌