2010-10-25 11 views
5

Chúng tôi đã bắt đầu sử dụng nền tảng của bên thứ ba (GigaSpaces) giúp chúng tôi với tính toán phân tán. Một trong những vấn đề chính mà chúng tôi đang cố gắng giải quyết hiện nay là cách quản lý các tệp nhật ký của chúng tôi trong môi trường phân tán này. Hiện tại chúng tôi có thiết lập sau.Quản lý một số lượng lớn tệp nhật ký được phân phối trên nhiều máy

Nền tảng của chúng tôi được phân phối trên 8 máy. Trên mỗi máy chúng ta có 12-15 quy trình đăng nhập để tách các tệp nhật ký bằng cách sử dụng java.util.logging. Trên nền tảng này, chúng tôi có các ứng dụng riêng của chúng tôi sử dụng log4j và đăng nhập vào các tệp riêng biệt. Chúng tôi cũng chuyển hướng stdout sang một tệp riêng biệt để nắm bắt các chuỗi chủ đề và tương tự.

Điều này dẫn đến khoảng 200 tệp nhật ký khác nhau.

Hiện tại, chúng tôi không có công cụ hỗ trợ trong việc quản lý các tệp này. Trong những trường hợp sau, điều này khiến chúng ta đau đầu nghiêm trọng.

  • Khắc phục sự cố khi chúng tôi không biết trước về quá trình xảy ra sự cố. Trong trường hợp này, chúng tôi hiện đang đăng nhập vào mỗi máy bằng ssh và bắt đầu sử dụng grep.

  • Cố gắng chủ động bằng cách thường xuyên kiểm tra nhật ký để tìm bất kỳ thứ gì không bình thường. Trong trường hợp này, chúng tôi cũng hiện đang đăng nhập vào tất cả các máy và xem các nhật ký khác nhau bằng cách sử dụng lesstail.

  • Thiết lập cảnh báo. Chúng tôi đang tìm cách thiết lập cảnh báo về các sự kiện trên ngưỡng. Đây là một nỗi đau với 200 tệp nhật ký để kiểm tra.

Hôm nay chúng tôi chỉ có khoảng 5 sự kiện nhật ký mỗi giây, nhưng điều đó sẽ tăng lên khi chúng tôi di chuyển ngày càng nhiều mã sang nền tảng mới.

Tôi muốn hỏi cộng đồng các câu hỏi sau đây.

  • Bạn xử lý các trường hợp tương tự như thế nào với nhiều tệp nhật ký được phân phối trên một số máy được đăng nhập qua các khung công tác khác nhau?
  • Tại sao bạn chọn giải pháp cụ thể đó?
  • Giải pháp của bạn hoạt động như thế nào? Bạn đã tìm thấy điều gì tốt và bạn thấy điều gì xấu?

Rất cám ơn.

Cập nhật

Chúng tôi đã kết thúc đánh giá một phiên bản dùng thử của Splunk. Chúng tôi rất hài lòng với cách thức hoạt động và đã quyết định mua nó. Dễ dàng thiết lập, tìm kiếm nhanh và nhiều tính năng cho kỹ thuật nghiêng. Tôi có thể đề nghị bất cứ ai trong tình huống tương tự để kiểm tra xem nó ra.

Trả lời

3

Tôi khuyên bạn nên đăng nhập tất cả các bản ghi java của mình thành Simple Logging Facade for Java (SLF4J) và sau đó chuyển hướng tất cả nhật ký từ SLF4J đến LogBack. SLF4J có hỗ trợ đặc biệt để xử lý tất cả các API cũ phổ biến (log4j, commons-logging, java.util.logging, v.v.), xem here.

Khi bạn có nhật ký của mình trong LogBack, bạn có thể sử dụng một trong nhiều ứng dụng để tổng hợp nhật ký trên một số máy, để biết chi tiết, xem hướng dẫn sử dụng section about appenders. Socket, JMS và SMTP dường như là những ứng cử viên rõ ràng nhất.

LogBack cũng có hỗ trợ tích hợp để theo dõi các điều kiện đặc biệt trong tệp nhật ký và sự kiện lọc được gửi đến người gắn thêm cụ thể. Vì vậy, bạn có thể thiết lập ứng dụng SMTP để gửi cho bạn một e-mail mỗi khi có sự kiện cấp ERROR trong nhật ký.

Cuối cùng, để giảm bớt xử lý sự cố, hãy chắc chắn để thêm một số loại requestID cho tất cả các "yêu cầu" đến bạn, hãy xem câu trả lời của tôi để this question để biết chi tiết.

EDIT: bạn cũng có thể thực hiện riêng Logback tùy chỉnh của bạn appender và chuyển hướng tất cả các bản ghi để Scribe.

+0

Điều đáng nói là chuyển hướng mọi thứ tới Scribe về cơ bản sẽ tạo ra điểm duy nhất của sự thất bại trong hệ thống, ví dụ khi daemon Scribe bị hỏng. –

+0

Vâng, khía cạnh chịu lỗi của giải pháp cuối cùng thường rất triển khai cụ thể và như vậy, còn lại như một bài tập cho kiến ​​trúc sư chịu trách nhiệm về giải pháp cuối cùng. Tuy nhiên, đó là điều cần lưu ý. –

+1

Tôi muốn nói thêm rằng nó không phải là "điểm thất bại" thực theo nghĩa là nếu nút trung tâm Scribe bị hỏng, toàn bộ giải pháp không bị ảnh hưởng - các nút Scribe riêng lẻ chỉ xếp hàng bản ghi nhật ký cục bộ cho đến khi nút trung tâm trở lại lên một lần nữa. Thời gian ngừng hoạt động của người ghi chép chỉ ảnh hưởng đến tính khả dụng của hệ thống con đăng nhập. –

1

Tôi khuyên bạn nên xem xét công cụ tổng hợp nhật ký như Splunk hoặc Scribe.

(Ngoài ra, tôi nghĩ đây là một câu hỏi về ServerFault, vì nó liên quan đến việc quản trị ứng dụng của bạn và dữ liệu của ứng dụng, không quá nhiều về việc tạo ứng dụng.)

+0

Cảm ơn bạn đã đề xuất. Kinh nghiệm của bạn với những công cụ đó là gì? Có thể thực sự tốt hơn ở ServerFault, đã đồng ý. –

+1

Tôi đã sử dụng splunk để xem nhật ký từ khoảng 40 máy chủ. Làm việc thực sự tốt đẹp. Nhược điểm duy nhất là kết thúc trước là một chút nặng (javascript ma thuật bị rơi firefox trên ubuntu), nhưng có khả năng nó đã được cải thiện kể từ đó. – bwawok

+0

Cá nhân tôi chưa giải quyết được việc Splunk tự động nhận dữ liệu nhật ký, nhưng chỉ nhập dữ liệu vào đó một cách thủ công - nhưng đó là giao diện người dùng và công cụ phân tích trông tuyệt vời –

0

Lời khuyên duy nhất tôi có thể cung cấp cho bạn là đảm bảo bạn chuyển ID giao dịch qua mã của bạn và đảm bảo bạn đăng nhập khi bạn đăng nhập để sau này có thể tương ứng với các cuộc gọi khác nhau.

2

Một tùy chọn thú vị để khám phá sẽ là chạy Hadoop Cluster trên các nút đó và viết công việc tùy chỉnh Map Reduce để tìm kiếm và tổng hợp kết quả cụ thể cho các ứng dụng của bạn.

0

Tôi sẽ chuyển tệp sang máy tập trung để chạy cơ chế phân tích trên đó. Có thể bạn có thể sử dụng một cụm Hadoop để làm điều đó và chạy các công việc map/reduce để thực hiện phân tích ... Sao chép nó rất 5 phút đến cluster haddop vv Tôi không chắc chắn nếu điều này phù hợp với nhu cầu của bạn. Trong mối quan hệ đó, có thể là một ý kiến ​​hay khi nhìn vào Scribe như đã đề cập.