Хранение Логов И Logrotate

Стандарт хранения логов:

1. Лог демона в обычном случае должен храниться в /var/log/<имя демона>.log, например для vsftpd:

/var/log/vsftpd.log

2. В некоторых случаях (например, для демона worker) нужно ежедневное ротирование лога, тогда мы должны хранить его лог в директории /var/log/<имя демона>/<имя демона>.log, например:

/var/log/worker/worker.log

/var/log/worker/objectstatus.log

/var/log/worker/account_voip.log

3. В ручных скриптах или скриптах, вызываемых из других скриптов/демонов, вывод сделует делать в stdout или stderr. Логировать их вывод должна вызывающая сторона

Например:

50 2 * * * root /app/base/usr/local/bin/cron_backup.sh &>>/app/base/var/log/cron_backup.sh.log

Исключение: если скрипт генерирует излишне объемный вывод, который необходим только при детальном дебаге, то его можно логировать в соответствии с обычными стандартами /var/log/<имя демона>.log и обязательно должен писать о том, что он скрывает вывод (и куда скрывает) в stdout! Например, скрипт /app/asr_billingusr/local/bin/backup_db_v2.sh выводит все в стандартный вывод, но вывод gbak сохраняет в /var/log/backup_db_v2.sh.log

4. Особым случаем является каталог /app/asr_billing/var/log/abonents/<id_абонента>/.. куда дублируется вывод лога событий в воркера по каждому абоненту. Например, /app/asr_billing/var/log/abonents/13/event_1368.log

Другие особые случаи этого пункта и другие исключения нужно согласовывать и отражать в текущей странице документации.

Стандарт по logrotate до 2018 года (потом добавим чистку которую настраивает Админ 3-6-12 мес):

1. Сдвигаем компрессию на 2 месяца, используя опции compress и delaycompress*. При ротейте по дням компрессию не используем*!

2. Старые логи нельзя удалять автоматически средствами logrotate! Выставляем опцию rotate 99999.

3. где по дням - не гзипуем

4. для ежемесячных, формат суффикса без дня: dateformat -%Y%m

5. можно пользоваться только ежедневным и ежемесячным ротированием

Пример1. Ежемесячный logrotate:

/var/log/firebird/firebird.log {
    monthly
    dateext
    dateformat -%Y%m
    missingok
    compress
    delaycompress
    copytruncate
    rotate 99999
}

Пример2. Ежедневный logrotate:

/var/log/msgd/msgd.log {
        daily
        dateext
        dateformat -%Y%m%d
        missingok
        copytruncate
        ### ОБЯЗАТЕЛЬНО ИСПОЛЬЗОВАТЬ nocompress ДЛЯ ЕЖЕДНЕВНОГО logrotate
        nocompress
        rotate 99999
}

Примечания:

1. Если демон работает не под рутом, то не забудьте выставить правильные права для папки с логами

rsyslog

Работает в base и в чрутах через /dev/log. (не devfs)

Прием по tcp/udp не настроен.

Возможно, из чрутовых rsyslog'ов стоит убрать загрузку модуля imklog, чтобы из ядра все сообщения попадали только в рутовый rsyslog.

Sync для файлов выключен по умолчанию, минусы перед файлами в конфиге указывать не нужно

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

~~OWNERAPPROVE~~

Прочитал правила разработки стандарты хранение логов и logrotate
Yes(8) No(1) Clear

Yes:
Krat Nikolay, Сергей Трошин, Anton Klinskih, Дмитрий Пономарь, Alexander Sobyanin, Александр Хромлюк, Сергей Трошин, Наумов Михаил,

No:
,

Сергей ТрошинСергей Трошин, 03.06.2019 07:23
В некоторых случаях (например, для демона worker) нужно ежедневное ротирование лога, тогда мы должны хранить его лог в директории /var/log/<имя демона>/

Так делают, когда демон не от рута работает. С правами на папку для нужного пользователя.

adminadmin, 19.10.2019 14:06

или для удобства когда много файлов

adminadmin, 10.02.2020 10:54

123

Ваш комментарий. Вики-синтаксис разрешён: