Як сказати rsyslog, щоб створити файл журналу, якщо його немає?


12

Поведінка за замовчуванням rsyslog - це додавання слідів до існуючого файлу журналу.

Тепер я бачив (CentOs, Scientific Linux), що коли rsyslog вже запущений, ви видаляєте файл журналу (наприклад, той, який присвячений слідам журналу у вашій програмі), ви запускаєте свою програму, rsyslog не створить файл журналу і слідів не буде записано.

Чи є якийсь варіант конфігурації, який може вказати rsyslog створити файл журналу, якщо його немає, перш ніж додавати до нього сліди?

Примітка : виконання service rsyslog restartзаповіту змусить створити порожній файл журналу.

rsyslog.conf (до нього нічого не додано)

# 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 ###

Чи можете ви поділитися своїм файлом .conf?
slm

Відповіді:


10

З POV rsyslog видалений файл журналу все ще існує. Це тому, що rsyslog не записує до імені файлу, а записує до файлу, який він відкрив для файлу журналу.

Системи Unix насправді не видаляють файл, доки в ньому не відбудуться процеси з відкритими ручками. Це означає, що дисковий простір, який використовується видаленим файлом, не звільняється, поки будь-які та всі відкриті ручки файлів не закриті. Це також означає, що будь-які процеси з відкритими ручками файлів до видаленого файлу можуть продовжувати читання з та / або запис у файл.

Надіслання сигналу HUP (наприклад, через pkill -HUP rsyslogабо /etc/init.d/rsyslog rotate) до rsyslog вказує йому закрити всі відкриті файли, перезавантажити його конфігураційний файл та повторно відкрити всі файли журналу для запису (створивши їх, якщо потрібно).

Перезапуск rsyslogd також працює.

Зауважте, що це особливість, а не помилка, з деякими корисними наслідками - наприклад, саме тому rsyslog продовжує записувати в той самий файл журналу навіть після того, як його повернули (тобто перейменовано / mv-ed), поки rsyslog не отримає сигнал HUP. Це означає, що сценарії та утиліти для обробки журналів не повинні бути ретельно обережними щодо термінів - вони можуть просто обертати всі журнали, надсилати rsyslog HUP, і все продовжує працювати, не втрачаючи даних журналу.

BTW, єдиний спосіб, щоб цього не сталося з rsyslog, було б це, якщо закрити і повторно відкрити кожен файл журналу кожного запису (або принаймні викликати sync()). Продуктивність була б безглуздою.


Чи знаєте ви від руки, якщо вбити -HUP у rsyslog призведе його до початку запису в новий файл?
slm

ви маєте на увазі, якщо rsyslog.conf змінився і визначений новий файл журналу? так, це безумовно створить і почне записувати в новий файл після отримання HUP ... це частина пункту його повторного завантаження конфігурації.
cas

Гаразд, ось що я запропонував у своєму третьому методі, дякую!
slm

проблема в тому, що rsyslog працює, ви видаляєте файл журналу програми (без перезавантаження rsyslog), і тоді більше не буде записано сліду, оскільки rsyslog не створить файл журналу, якщо його немає, поки він працює ...
fduff

1
як я вже сказав, з POV rsyslog, ця обробка файлів все ще існує. він не закриється і не відкриється / не відтворює файли журналу, поки ви не скажете йому, перезавантаживши його або за допомогою сигналу HUP. rsyslog робить те, що ти йому кажеш робити, не більше. що ще важливіше, проблема полягає не в тому, що робить rsyslog, а у вашому розумінні поведінки rsyslog і чому він так поводиться.
cas

3

$ FileCreateMode

Чи ця опція не робить те, що ви хочете, $ FileCreateMode ?

витяг

$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

Вихідний модуль файлу

Відповідно до документації rsyslog, для цього можна було використовувати аргумент File у вихідному модулі File.

уривок модуля omfile

Файл

Якщо файл вже існує, до нього додаються нові дані. Існуючі дані не усічені. Якщо файл вже не існує, він створюється. Файли зберігаються відкритими до тих пір, поки активний rsyslogd. Це конфліктує із обертанням зовнішнього файлу журналу. Щоб закрити файл після обертання, надішліть rsyslogd сигнал HUP після повернення файлу.

Надішліть системі сигнал HUP

Я думаю, що в кінцевому підсумку для цього потрібно "запустити" rsyslog. Я не думаю, що автоматично вийде те, що ви хочете. Таким чином, ви можете дати йому сигнал HUP, щоб запустити відновлення файлу журналу після його видалення.

$ sudo pkill -HUP rsyslog

Таким чином у моєму /var/log/messagesфайлі журналу створено такі повідомлення :

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'.

Ні, я використовував його для встановлення дозволів на файли, і це працює чудово. Проблема полягає в тому, що якщо файл журналу було видалено, syslog не намагатиметься створити його перед входом у msg.
fduff

Це було видалено, а сервер не був перезапущений?
slm

точно. Я роблю кілька тестів, і я натрапив на цю особливість ...
fduff

@fduff - дивіться мої оновлення, спробуйте 3-те!
slm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.