Làm thế nào để nói với rsyslog để tạo tệp nhật ký nếu không có?


12

Hành vi mặc định của rsyslog là nối các dấu vết vào tệp nhật ký hiện có .

Bây giờ, tôi đã thấy (CentOs, Khoa học Linux) rằng khi rsyslog đang chạy, bạn xóa tệp nhật ký (ví dụ: tệp dành riêng để theo dõi nhật ký từ ứng dụng của bạn), sau đó bạn chạy ứng dụng của mình, rsyslog sẽ không tạo tệp nhật ký và không có dấu vết sẽ được ghi lại.

Có một tùy chọn cấu hình nào đó có thể yêu cầu rsyslog tạo một tệp nhật ký nếu không có trước khi thêm dấu vết vào nó?

Lưu ý : thực hiện service rsyslog restartsẽ tạo ra một tệp nhật ký trống.

rsyslog.conf (không có gì thêm vào nó)

# rsyslog v5 configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability

$SystemLogRateLimitInterval 1
$SystemLogRateLimitBurst 50000

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514


#### GLOBAL DIRECTIVES ####

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf


#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###

Bạn có thể chia sẻ tập tin .cs của bạn?
slm

Câu trả lời:


10

Từ POV của rsyslog, tệp nhật ký đã xóa vẫn tồn tại. Điều này là do rsyslog không ghi vào tên tệp, nó đang ghi vào tệp xử lý mà nó đã mở cho tệp nhật ký.

Các hệ thống Unix không thực sự xóa một tệp cho đến khi không có quy trình nào xử lý mở đối với tệp. Điều này có nghĩa là không gian đĩa được sử dụng bởi tệp đã xóa không được giải phóng cho đến khi bất kỳ và tất cả các thẻ điều khiển mở được đóng lại. Điều đó cũng có nghĩa là bất kỳ quy trình nào có tệp xử lý mở đối với tệp đã xóa có thể tiếp tục đọc từ và / hoặc ghi vào tệp.

Gửi tín hiệu HUP (ví dụ qua pkill -HUP rsysloghoặc /etc/init.d/rsyslog rotate) đến rsyslog sẽ bảo nó đóng tất cả các tệp đã mở, tải lại tệp cấu hình của nó và mở lại tất cả các tệp nhật ký để ghi (tạo chúng nếu cần).

Khởi động lại rsyslogd cũng hoạt động.

Lưu ý rằng đây là một tính năng, không phải là một lỗi, với một số hàm ý hữu ích - ví dụ: tại sao rsyslog tiếp tục ghi vào cùng một tệp nhật ký ngay cả khi nó đã được xoay (tức là đổi tên / mv-ed) cho đến khi rsyslog nhận được tín hiệu HUP. Điều này có nghĩa là các tập lệnh và tiện ích xử lý nhật ký không cần phải hết sức cẩn thận về thời gian - chúng chỉ có thể xoay tất cả các bản ghi, gửi rsyslog một HUP và mọi thứ vẫn tiếp tục hoạt động mà không mất dữ liệu nhật ký.

BTW, cách duy nhất để điều này không xảy ra với rsyslog sẽ là nếu đóng và mở lại mọi tệp nhật ký trên mỗi lần ghi (hoặc ít nhất là được gọi sync()). Hiệu suất sẽ là rất nhiều.


Bạn có biết không nếu việc giết -HUP thành rsyslog sẽ kích hoạt nó để bắt đầu ghi vào một tệp mới?
slm

ý bạn là, nếu rsyslog.conf đã thay đổi và có tệp nhật ký mới được xác định? vâng, nó chắc chắn sẽ tạo và bắt đầu ghi vào tệp mới khi nhận HUP ... đó là một phần của điểm tải lại cấu hình.
cas

OK, đó là những gì tôi đề xuất trong phương pháp thứ 3 của mình, cảm ơn!
slm

vấn đề là rsyslog đang chạy, bạn xóa một tệp nhật ký ứng dụng (không khởi động lại rsyslog) và sau đó sẽ không còn dấu vết nào nữa vì rsyslog sẽ không tạo tệp nhật ký nếu không có trong khi nó đang chạy ...
fduff

1
như tôi đã nói, từ POV của rsyslog, xử lý tệp đó vẫn tồn tại. nó sẽ không đóng và mở lại / tạo lại các tệp nhật ký cho đến khi bạn thông báo cho nó bằng cách khởi động lại hoặc bằng tín hiệu HUP. rsyslog làm những gì bạn bảo nó làm, không còn nữa. quan trọng hơn, vấn đề không nằm ở những gì rsyslog làm, mà là ở sự hiểu biết của bạn về hành vi của rsyslog và tại sao nó lại hành xử như vậy.
cas

3

$ FileCreateMode

Có phải tùy chọn này không làm những gì bạn muốn, $ FileCreateMode ?

đoạn trích

$FileCreateMode 0600

This sample lets rsyslog create files with read and write access only for the 
users it runs under.

The following sample is deemed to be a complete rsyslog.conf:

$umask 0000 # make sure nothing interferes with the following definitions
*.* /var/log/file-with-0644-default
$FileCreateMode 0600
*.* /var/log/file-with-0600
$FileCreateMode 0644

*.* /var/log/file-with-0644

Module đầu ra

Theo tài liệu rsyslog, đối số Tệp của Mô-đun đầu ra tệp có thể được sử dụng để thực hiện việc này.

đoạn trích omfile

Tập tin

Nếu tập tin đã tồn tại, dữ liệu mới sẽ được thêm vào nó. Dữ liệu hiện tại không bị cắt ngắn. Nếu tập tin chưa tồn tại, nó được tạo. Các tệp được giữ mở miễn là rsyslogd đang hoạt động. Điều này mâu thuẫn với xoay vòng tệp nhật ký bên ngoài. Để đóng tệp sau khi quay, hãy gửi rsyslogd tín hiệu HUP sau khi tệp được xoay đi.

Gửi syslog một tín hiệu HUP

Tôi nghĩ rằng cuối cùng bạn cần phải "kích hoạt" rsyslog để làm điều này. Tôi không nghĩ rằng nó sẽ tự động những gì bạn muốn. Vì vậy, bạn có thể cung cấp cho nó tín hiệu HUP để kích hoạt việc tạo lại tệp nhật ký sau khi bị xóa.

$ sudo pkill -HUP rsyslog

Làm như vậy đã tạo các thông báo sau trong /var/log/messagestệp nhật ký của tôi :

Sep 26 15:16:17 grinchy rsyslogd: [origin software="rsyslogd" swVersion="4.6.3" x-pid="1245" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.
Sep 26 15:16:44 grinchy rsyslogd: [origin software="rsyslogd" swVersion="4.6.3" x-pid="1245" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.

Không, tôi đã sử dụng nó để đặt quyền truy cập tệp và nó hoạt động tốt. Vấn đề là nếu tệp nhật ký đã bị xóa, syslog sẽ không cố tạo nó trước khi đăng nhập thông điệp.
fduff

Nó đã bị xóa và máy chủ chưa được khởi động lại?
slm

chính xác. Tôi đang thực hiện một số thử nghiệm và tôi đã phát hiện ra tính đặc biệt này ...
fduff

@fduff - Xem cập nhật của tôi, thử cái thứ 3!
slm
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.