2009-09-18 30 views
10

Tôi đang nghĩ đến việc sử dụng nhật ký hệ thống trong các ứng dụng đường ray của mình. Quá trình này được nêu trong this blog post:Sử dụng syslog trong ứng dụng đường ray

  1. Thêm gem 'SyslogLogger' để bạn Gemfile
  2. Thêm require 'syslog_logger' lên đỉnh config/environments/production.rb
  3. Cũng bỏ ghi chú dòng config.logger = trong cùng một tập tin.

Trong hộp sản xuất Tôi có 4 ứng dụng đường ray chạy bằng hành khách. Nếu tôi chuyển sang sử dụng syslogger cho tất cả 4 ứng dụng của mình thì tôi sợ rằng các thông điệp tường trình từ tất cả 4 ứng dụng sẽ đi tới một tệp duy nhất và các thông điệp tường trình sẽ xen kẽ. Tất nhiên, tôi có thể sử dụng splunk nhưng trước tiên tôi muốn kiểm tra xem nó có thể cho tôi để có được một tập tin đăng nhập cho mỗi ứng dụng đường ray của tôi. Điều đó sẽ được mong muốn cho tình hình của tôi.

Điều đó có khả thi không?

Trả lời

2

Có, theo mặc định, hầu hết tất cả Unix syslogds sẽ viết thư được cung cấp trong cơ sở user hoặc local* trong cùng một tệp. Tuy nhiên, mỗi syslogd tôi biết sẽ cho phép bạn chỉ định các tệp nhật ký trên cơ sở từng cơ sở, do đó bạn có thể đăng nhập ứng dụng đầu tiên của mình tới local1.*, từ thứ hai đến local2.* và cứ tiếp tục như vậy.

Hơn nữa, các trình nền syslog mới hơn như syslog-ng cho phép tách thư thành các tệp khác nhau bằng cách đánh giá thư theo biểu thức chính quy (ghi các chuỗi nhật ký có railsapp_1 vào chúng /var/log/railsapp_1.log v.v.).

Vì vậy, cấu hình syslogd của bạn một cách thích hợp và bạn đang thực hiện (các chi tiết đẫm máu của việc thay đổi cấu hình nên hỏi trên serverfault.com nếu các trang của con người hệ thống của bạn không giúp bạn làm việc đó.)

5

@ trích dẫn của câu trả lời bao gồm một tùy chọn để phân biệt các ứng dụng. Tuy nhiên, khung thông báo nhật ký hệ thống thực sự có 2 trường làm cho nó dễ dàng hơn: hostnametag (thường được biết đến và được sử dụng làm tên chương trình).

hostname được thiết lập bởi hệ thống syslog daemon trước khi chuyển tiếp thư tới máy chủ tập trung. Nó sẽ giống nhau cho tất cả các ứng dụng trên cùng một hệ thống nhưng có thể hữu ích khi bạn phát triển qua 1 máy chủ.

Điều thú vị hơn là tag. Ứng dụng của bạn xác định tag khi ứng dụng này khởi tạo SyslogLogger. Ví dụ:

SyslogLogger.new('app1') 

lớp Các logger sẽ gửi đến hệ thống syslogd như app1, và xuất hiện trong cả hai tập tin log địa phương và bất kỳ khu syslog từ xa (mà không cần phải sửa đổi các thông tin đăng nhập chính nó). Giá trị mặc định là rails. Tất cả các trình nền tảng syslog hiện đại có thể lọc dựa trên tag; xem program() cho syslog-ng và $programname cho rsyslog. Ngoài ra, cần lưu ý rằng SyslogLogger về cơ bản là gói các hàm C openlog()syslog(), do đó, về cơ bản, tất cả cấu hình sau log đều xảy ra trên daemon hệ thống.Nói chung điều đó là mong muốn, nhưng đôi khi bạn có thể muốn ứng dụng Rails đăng nhập trực tiếp tới một đích cụ thể (như để đơn giản hóa việc triển khai tự động, thay đổi các thuộc tính không được cho phép bởi syslog() hoặc chạy trong môi trường mà không cần truy cập vào daemon hệ thống).

Chúng tôi đã gặp phải một vài trường hợp đó và thực hiện việc thay thế Logger tự tạo gói UDP. Đá quý remote_syslog_loggeron GitHub.

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