2012-05-31 55 views
5

Tôi định di chuyển ứng dụng web Java đã tạo trước đó sang Azure. Ứng dụng trước đây đã sử dụng log4j cho nhật ký cấp ứng dụng, nơi được lưu trong tệp được tạo cục bộ. Vấn đề là với Azure vai trò có nhiều trường hợp tôi phải thu thập và tổng hợp các bản ghi và cũng đảm bảo rằng chúng được lưu trữ trong một lưu trữ liên tục thay vì ổ cứng máy ảo.Ghi nhật ký Tomcat của Azure Java

Ghi nhật ký là một thành phần quan trọng của ứng dụng nhưng không được làm chậm công việc thực tế. Tôi đã xem xét nhiều tùy chọn và tôi tò mò về thực tiễn tốt nhất, giải pháp tốt nhất xem xét bảo mật, tính nhất quán của nhật ký và hiệu suất trong cả thời gian lưu trữ và xử lý sau. Dưới đây là danh sách các tùy chọn:

  • Sử dụng log4j với tùy chỉnh Appender để lưu trữ thông tin trong Azure SQL.
  • Sử dụng log4j với tùy chỉnh Appender để lưu trữ thông tin trong bộ nhớ Azure Tables.
  • Viết một công cụ bổ sung chuyển dữ liệu từ ổ cứng cục bộ sang một trong các kho lưu trữ liên tục ở trên.

Có phương pháp nào khác hoặc có bất kỳ giải pháp hoàn chỉnh nào cho vấn đề này cho Java không? Điều nào ở trên sẽ tốt nhất khi xem xét các tiêu chí được đề cập ở trên?

Trả lời

1

Cuối cùng tôi quyết định viết một Log4J Appender. Tôi không cần thu thập thông tin chẩn đoán, mục tiêu chính của tôi là chỉ tập hợp các tệp nhật ký theo cách dễ dàng trao đổi. Nỗi sợ đầu tiên của tôi là nó sẽ làm chậm ứng dụng, nhưng bằng cách chỉ ghi vào bộ nhớ và chỉ định kỳ ghi dữ liệu nhật ký vào các bảng Azure, nó hoạt động hoàn hảo mà không cần quá nhiều cuộc gọi API.

Dưới đây là các bước chính để thực hiện của tôi:

Trước tiên tôi tạo ra một lớp thực thể được lưu trữ trong bảng Azure, gọi LogEntity kéo dài com.microsoft.windowsazure.services.table.client.TableServiceEntity.

Tiếp theo, tôi đã viết ứng dụng mở rộng org.apache.log4j.AppenderSkeleton chứa java.util.List<LogEntity>.

Từ phương pháp ghi đè protected void append(LoggingEvent event) Tôi chỉ thêm vào bộ sưu tập này và sau đó tạo một chuỗi định kỳ làm trống danh sách này và ghi dữ liệu vào bảng Azure.

Cuối cùng tôi đã thêm Appender mới được tạo vào tệp cấu hình log4j của mình.

2

Hiện không có giải pháp ngoài hộp, nhưng ... ứng dụng tùy chỉnh cho Bảng lưu trữ có ý nghĩa, khi bạn có thể truy vấn nhật ký của mình theo cách tương tự để chẩn đoán (bộ đếm nước, v.v.) .

Việc xem xét duy nhất là nếu bạn đang viết các bản ghi nhật ký với số lượng lớn (như hàng trăm lần mỗi giây). Ở mức đó, bạn sẽ bắt đầu nhận thấy chi phí giao dịch hiển thị trên hóa đơn hàng tháng. Với một xu cho mỗi 10.000, và 100 mỗi giây, bạn đang tìm kiếm khoảng $ 250 cho mỗi trường hợp. Nếu bạn có nhiều phiên bản, chi phí sẽ tăng lên từ đó. Với SQL Azure, bạn không có chi phí giao dịch, nhưng bạn sẽ có chi phí lưu trữ cao hơn.

Nếu bạn muốn sử dụng phương pháp chuyển bộ nhớ, bạn có thể thiết lập chẩn đoán Windows Azure để xem thư mục và tải tệp lên định kỳ để lưu trữ blob. Chỉ có snag là Java không có hỗ trợ trực tiếp để định cấu hình chẩn đoán. Nếu bạn đang xây dựng dự án của mình từ Eclipse, bạn chỉ có một tệp kịch bản lệnh khởi chạy mọi thứ, vì vậy bạn cần phải viết một ứng dụng .net nhỏ hoặc sử dụng một cái gì đó như AzureRunMe. Nếu bạn đang xây dựng một dự án Visual Studio để khởi chạy ứng dụng Java của mình, thì bạn có khả năng thiết lập chẩn đoán mà không cần một ứng dụng riêng biệt.

Có một số blog post từ Hệ thống Persistent vừa được xuất bản, liên quan đến thiết lập chẩn đoán và Java. Tôi sẽ cập nhật câu trả lời này bằng một liên kết khi nó trực tiếp . Ngoài ra, hãy xem Cloud Ninja for Java, thực hiện ghi nhật ký Tomcat (và phân tích cú pháp liên quan) bằng cách sử dụng exe .net bên ngoài để thiết lập chẩn đoán, như được mô tả trong bài đăng sắp tới.

+0

Edited để làm rõ cần riêng biệt.ứng dụng net chỉ khi xây dựng các ứng dụng từ các dự án Eclipse, mà không có mã giàn giáo .net (mỗi tham chiếu của @ Avkash tới WorkerRole.cs). –

+0

Tôi vẫn mong được đọc bài đăng trên blog! – hpityu

+0

Chỉ cần chỉnh sửa để bao gồm liên kết. Có lỗi định dạng, nhưng chúng đang được sửa chữa bởi Persistent trong tuần này. –

1

Vui lòng truy cập blog của tôi và tải xuống tài liệu. Trong tài liệu này, bạn có thể tìm chương "Giải pháp chẩn đoán Tomcat" cho giải pháp ghi lỗi. Tài liệu này được viết từ lâu nhưng bạn chắc chắn có thể sử dụng phương thức này để tạo bất kỳ kiểu ghi nhật ký Java Based nào (log4j, chắc chắn) trong Tomcat và xem trực tiếp.

Chương 6: Tomcat Giải pháp Diagnostics

  • Lỗi Logging
  • Xem Log Files

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

Trong bất kỳ kịch bản mà có ứng dụng tùy chỉnh tức java.exe, php. exe, python vv, tôi đề nghị để tạo ra các tập tin đăng nhập trực tiếp tại "lưu trữ địa phương" thư mục và sau đó khởi tạo Azure Diagnostics trong vai trò công nhân (W orkerRole.cs) để xuất các tệp nhật ký tùy chỉnh này trực tiếp từ Azure VM sang bộ nhớ Azure Blob của bạn.

Làm thế nào để tạo ra các bản ghi tùy chỉnh trên local storage được mô tả here.

Sử dụng Azure Chẩn đoán và gửi bản ghi để Azure blob sẽ là rẻ nhất và mạnh mẽ sau đó bất kỳ phương pháp nào khác u đã mô tả.

+0

Trong trường hợp triển khai từ các dự án Eclipse, không có WorkerRole.cs. Chỉ cần khởi động kịch bản. –

+1

Những gì bạn có thể làm là tạo chẩn đoán.wadcfg và định cấu hình cài đặt hẹn giờ và thiết lập đường viền và thả trong thư mục Vai trò gốc của bạn. Khi Azure vai trò sẽ bắt đầu nó sẽ tìm diagnostics.wadcfg trong thư mục gốc nó sẽ tải cấu hình và bắt đầu chẩn đoán. – AvkashChauhan

+1

Đây là liên kết về cách sử dụng "Tệp cấu hình chẩn đoán Windows Azure" -> http://msdn.microsoft.com/en-us/library/gg604918.aspx – AvkashChauhan

0

Một giải pháp thay thế khác;

Chúng ta không thể tiếp tục sử dụng log4j theo cách tiêu chuẩn (chẳng hạn như DailyRollingFileAppender) chỉ tệp được tạo trên đường dẫn UNC, trên máy ảo (IaaS). Máy ảo này, sẽ chỉ cần có một chút dung lượng đĩa, nhưng không cần có bất kỳ sức mạnh xử lý tuyệt vời nào. Vì vậy, người ta có thể chia sẻ một máy ảo có sẵn, hoặc tạo một máy ảo với cấu hình tối thiểu nhất, tốt nhất là trong cùng một khu vực và dịch vụ đám mây.

Các tệp nhật ký tích lũy có thể được truy cập thông qua RDP/FTP, vv

Bằng cách đó người ta sẽ không phải chịu chi phí giao dịch và chi phí của việc phát triển một Log4j đặc biệt appender ... nó có thể bật ra như một sự thay thế rẻ hơn.

nhờ Jeevan

PS: Tôi đang đề cập nhiều hơn đối với, khai thác gỗ ứng dụng những người thân và không để các bản ghi ứng dụng máy chủ (catalina/quản lý .log hoặc file .out của WebLogic)

Các vấn đề liên quan