Rsyslog dừng gửi dữ liệu đến máy chủ từ xa sau khi xoay vòng nhật ký


9

Trong cấu hình của tôi, tôi có rsyslog, người chịu trách nhiệm theo dõi các thay đổi của /home/user/my_app/shared/log/unicorn.stderr.logviệc sử dụng imfile. Nội dung được gửi đến một máy chủ ghi nhật ký từ xa khác bằng TCP.

Khi tệp nhật ký quay, rsyslog dừng gửi dữ liệu đến máy chủ từ xa.

Tôi đã thử tải lại rsyslog, gửi tín hiệu HUP và khởi động lại hoàn toàn, nhưng không có gì hoạt động.

Cách duy nhất tôi có thể thấy rằng thực sự làm việc là bẩn:

  • dừng dịch vụ, xóa các tập tin thống kê rsyslog và bắt đầu lại rsyslog. Tất cả điều đó trong một hook postrotate trong tập tin logrotate của tôi.
  • kill -9 rsyslog và bắt đầu lại.

Có cách nào thích hợp để tôi làm điều này mà không cần chạm vào nội bộ rsyslog không?

Tập tin Rsyslog

$ ModLoad immark
$ ModLoad imudp
$ ModLoad imtcp
$ ModLoad imuxsock
$ ModLoad imklog
$ ModLoad imfile

$ template WithoutTimeFormat, "[môi trường] [% syslogtag%] -% dir%"

$ WorkDirectory / var / spool / rsyslog

$ InputFileName /home/user/my_app/ Shared / log / unicorn.stderr.log
$ InputFileTag kỳ lân-stderr
$ InputFileStateFile stat-unicorn-stderr
$ InputFileSeverity thông tin
$ InputFileFacility local8
$ InputFilePollInterval 1
$ InputFilePersistStateInterval 1
$ InputRunFileMonitor

# Chuyển tiếp đến máy chủ từ xa
nếu $ syslogtag chứa 'apache-' thì @@ my_server: 5000; WithoutTimeFormat
: syslogtag, chứa, "apache-" ~

*. * @@ my_server: 5000; SyslFormat

Tập tin logrotate

/home/user/my_app/spl/log/*.log {
  hằng ngày
  mất tích
  ngày tháng
  xoay 30
  nén
  đáng chú ý
  mở rộng gz
  bản sao
  tạo 640 người dùng
  chia sẻ
  sau xoay
    (dừng rsyslog && rm / var / spool / rsyslog / stat- * && bắt đầu rsyslog 2> & 1) || thật
  kết thúc
}

FYI, tệp có thể đọc được cho người dùng rsyslog, máy chủ của tôi có thể truy cập và các tệp nhật ký khác không xoay trên cùng một chu kỳ tiếp tục được theo dõi chính xác.

Tôi đang chạy Ubuntu 12.04.

Câu trả lời:


8

Vấn đề thực sự đến từ logrotate.

Về cơ bản với cấu hình của tôi, chạy kỳ lân, tôi không cần sử dụng lệnh copytruncate. (đó là những gì gây ra vấn đề ở đây)

USR1 - Mở lại tất cả các bản ghi thuộc sở hữu của quy trình công nhân. Xem Unicorn :: Util.reopen_logs để biết những gì được coi là nhật ký. Các tệp nhật ký không được mở lại cho đến khi hoàn thành xử lý yêu cầu hiện tại, do đó, nhiều dòng nhật ký cho một yêu cầu (như được thực hiện bởi Rails) sẽ không được phân chia trên nhiều nhật ký.

Điều này đã bắt đầu hoạt động đúng sau khi cập nhật cấu hình này:

/home/user/my_app/shared/log/*.log {
  daily
  missingok
  dateext
  rotate 30
  compress
  notifempty
  extension gz
  create 640 user user
  sharedscripts

  post-rotate
    # Telling Unicorn to reload files
    test -s /home/user/my_app/shared/pids/unicorn.pid && kill -USR1 "$(cat /home/user/my_app/shared/pids/unicorn.pid)"

    # Reloading rsyslog telling it that files have been rotated
    reload rsyslog 2>&1 || true
  endscript
}

Nếu đây là bản sao trực tiếp của tệp của bạn, tôi nghĩ rằng vấn đề của bạn thực sự là bạn đang sử dụng post-rotate(không phải là vấn đề) thay vì postrotate, vì tập lệnh logrotate ban đầu mà bạn đã hoạt động tốt với rsyslog (nếu tập lệnh postrotate đã chạy ) ...?
mltsy

2
Tôi không nhớ khi nào, nhưng tôi đã thay đổi post-rotatecho lastaction. Nhận xét của bạn vẫn rất hợp lý và nó có thể đã giải quyết vấn đề của tôi tại thời điểm đó :). Tuy nhiên, đối với bản ghi, tôi sẽ tránh sử dụng copytruncatetrong tương lai vì nó chậm và phát với các tệp xử lý.
Vincent B.

2

Tệp logrotate của bạn chứa một mục nhập /home/user/shared/log/*.log, không khớp với tệp logfile của bạn /home/user/my_app/shared/log/unicorn.stderr.log. Bạn cần thêm một mục logrotate cho thư mục đó và đảm bảo rằng nó chứa copytruncate- vì vậy, rsyslog đang đổi tên tệp hiện tại và tạo một tệp mới, và imfile tiếp tục theo dõi tệp của tệp đã được đổi tên.


Xin lỗi tên tập tin chỉ là một lỗi đánh máy. Tuy nhiên copytruncate có thể là một điểm tốt. Hãy để tôi nhìn vào đó :).
Vincent B.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.