Лекция №27 - Служба syslog

Служба (или демон) syslog - это служба, которая занимается централизованным ведением журналов событий. Утилиты, программы, другие службы - все они могут сообщать о тех или иных событиях службе syslog, которая их принимает, обрабатывает и хранит в журнальных файлах в каталоге /var/log/. Журнальные файлы - это обычные текстовые файлы. Большинство из них недоступны для простых пользователей, даже на чтение. Следить за журнальными файлами - это задача администратора системы.

syslog может работать и в сетевом режиме. То есть служба syslog на компьютере А может передавать сообщения службе syslog на компьютере Б и служба sysylog компьютера Б будет фиксировать сообщения в своих журнальных файлах. Таким образом можно создать централизованный сервер для сбора сообщений от служб syslog других компьютеров в сети.

Служба syslog не умеет сохранять сообщения от ядра на этапе загрузки. Чтобы посмотреть все сообщения ядра необходимо использовать команду dmesg. Для того, чтобы журнальные сообщения от ядра также попадали в журнальные файлы предназначена служба klog.

Настройка syslog

Основной конфигурационный файл службы syslog находится в файле /etc/syslog.conf. Файл состоит из двух столбцов: в первом содержаться шаблоны в которых описано, какие типы сообщений и от каких программ будет обрабатывать syslog. В втором столбце указывается действие которое будет выполнять syslog при получении сообщения. Знак \ - это просто перевод строки.

Изначально все программы в Linux были разделены на группы. Подробнее о группах можно прочесть в файле справки man syslog.conf в разделе SELECTORS. Здесь же просто перечислим наименования групп:
auth, authpriv, cron, daemon, ftp, kern, lpr, mail, mark, news, security, syslog, user, uucp, local0-local7.

Сообщения были разбиты на типы (уровни) в зависимости от важности и критичности. Есть следующие типы сообщений:
debug, info, notice, warning, warn (warning), err, error (err), crit, alert, emerg, panic (emerg).

Шаблон состоит из группы приложения и типа сообщения. Например, mail.info. Такой шаблон указывает, что будут фиксироваться сообщения от почтовых программ начиная от типа info и заканчивая типом panic. То есть если будет сообщения типа error, оно тоже будет записано в журнал. Если необходимо явно указать какие типы сообщения нужно фиксировать тогда используется знак “равно”: mail.=info. При такой записи будут записаны только сообщения с типом info. Также можно использовать восклицательный знак: mail.!info. Такая запись говорит о том, что будут регистрироваться все сообщения кроме указанного и выше. То есть только - debug. Соответственно шаблон mail.!=info - это регистрация всех сообщений кроме info. В шаблоне также может применяться ключевое слово none и *. Запись mail.none - запрещает регистрацию всех типов сообщений, запись mail.* соответственно указывает регистрировать все сообщения. Допускается также перечисление шаблонов через точку с запятой: mail.info;lpr.info, а также перечисление групп приложений в шаблоне через запятую: mail,lpr.info.

Перейдем ко второму полю в строке которое записывается через tab. Если необходимо регистрировать сообщения в журнальный файл, то во втором поле просто пишем путь к этому файлу. Например: /var/log/mail.info. Перед указанием полного пути можно ставить знак -, который говорит демону syslog о том, что не стоит при получении нового сообщения сразу выполнять команду sync и записывать сообщение из буфера в журнальный файл. Если в вашей системе регистрируется большое количество сообщений в секунду, то установка знака -, позволит повысить быстродействие дисковой подсистемы. В то же время если произойдет сбой в работе компьютера с его выключением или перезагрузкой, то последние сообщения могут быть утеряны (так как не будут записаны на диск). Поэтому рекомендуется для особо критичных сообщений не использовать знак -.
В качестве примера несколько записей:

1
2
3
mail.info                       -/var/log/mail.info
mail.warning                    -/var/log/mail.warn
mail.err                        /var/log/mail.err

Кроме журнального файла во втором поле можно указать имя компьютера или его IP-адрес. В этом случае, сообщения будут пересылаться службе syslog указанного компьютера. Пример:

1
2
*.*          @mycomp
*.*          @10.10.0.1

Также в качестве приемника сообщений может выступать именованный канал - |pipe_name или одна из виртуальных консолей - /dev/tty8. Пример:

1
2
3
4
daemon,mail.*;\
       news.=crit;news.=err;news.=notice;\
       *.=debug;*.=info;\
       *.=notice;*.=warning    /dev/tty8

Для изучения и тестирования работы демона syslog будет полезной утилита - logger. Данная программа позволяет генерировать сообщения демону syslog с заданными параметрами и часто используется при отладке новых шаблонов. Давайте выполним следующую команду:

1
logger -p mail.info -t TEST test message

Ключ -p служит для указания шаблона
Ключ -t позволяет задать метку для строки
test message - это текст сообщения

В итоге в файле mail.info появится вот такая строка:

1
Feb  3 14:58:21 adm-ubuntu TEST: test message

Команда logrotate

Каких бы объемов не были бы жесткие диски компьютера (сервера), но если за журнальными файлами не следить, то они могут в какой-то момент заполнить дисковое пространство. Именно поэтому на серверах рекомендуется каталог /var/log/ монтировать на отдельный жесткий диск. Для облегчения процедуры управления журнальными файлами была создана программа logrotate.

Рассмотрим стандартную процедуру ручного архивирования журнального файла. В первый раз журнальный файл (пусть это будет messages) архивируется и к имени архива прибавляется цифра 0 (messages.0.gz). Старый файл messages удаляется, на его месте создается новый с таким же названием. Затем через неделю файл messages.0.gz переименовывается в messages.1.gz, из messages создается архив messages.0.gz, messages удаляется и создается новый файл и т.д. logrotate - умеет выполнять эти действия автоматически. Необходимо только один раз настроить алгоритм обработки журнальных файлов.

Конфигурационные файлы logrotate - это файл /etc/logrotete.conf и файлы которые находятся в каталоге /etc/logrotate.d/. Рассмотрим в качестве примера часть конфигурационного файл а/etc/logrotate.d/samba:

1
2
3
4
5
6
7
8
9
10
/var/log/samba/log.smbd {
        weekly
        missingok
        rotate 7
        postrotate
                invoke-rc.d --quiet samba reload > /dev/null
        endscript
        compress
        notifempty
}

В строке 1 указано имя журнального файла и открывающая фигурная скобка для блока команд. Во второй строке идет команда weekly, которая сообщает о том что действие нужно выполнять каждую неделю. Значение missongok, говорит о том что если журнальный файл не обнаружен, то следует продолжать алгоритм без сообщения об ошибке. rotate 7 - создавать не более семи архивов. Postrotate endscript - задает начало и конец блока в котором можно написать bash-скрипт. В данном примере скрипт всего из одной строки (строка 6). Скрипт будет выполнен после выполнения процедуры ротации журнального файла. Ключевое слово compress - сигнализирует, что архивные файлы нужно сжимать с помощью gzip. notifempty - не выполнять ротацию журнального файла если он пустой.

В результате такой схемы архивации будет вот такая картина:

1
2
3
4
5
6
7
8
9
igor@adm-ubuntu:~$ ls -l /var/log/samba/log.smbd*
-rw-r--r-- 1 root root 2050 2010-02-02 17:25 /var/log/samba/log.smbd
-rw-r--r-- 1 root root  225 2010-02-01 14:52 /var/log/samba/log.smbd.1.gz
-rw-r--r-- 1 root root  373 2010-01-25 09:03 /var/log/samba/log.smbd.2.gz
-rw-r--r-- 1 root root  350 2010-01-13 11:25 /var/log/samba/log.smbd.3.gz
-rw-r--r-- 1 root root  353 2010-01-11 08:59 /var/log/samba/log.smbd.4.gz
-rw-r--r-- 1 root root  324 2010-01-04 08:54 /var/log/samba/log.smbd.5.gz
-rw-r--r-- 1 root root  341 2009-12-28 09:11 /var/log/samba/log.smbd.6.gz
-rw-r--r-- 1 root root  404 2009-12-21 09:07 /var/log/samba/log.smbd.7.gz

Запуск команды logrotate как правило выполняет демон cron.
Подробнее о команде logrotate читайте в справке man logrotate.

Статьи и новости схожей тематики:

Комментариев: 3

  1. Iceman phl:

    Читать Ваши лекции одно удовольствие, спасибо большое!

    Сейчас в ubuntu, да и не только во всю rsyslog используется как замена обычному syslog. Вот только информации толковой в рунете крайне мало.

    У Вас в планах не было, случайно, рассказать своим читателям про rsyslog?

    Ответить

    Igorka Reply:

    Спасибо за отзыв.
    Сейчас меняются приоритеты в работе, поэтому в ближайшем будущем ничего не планируется из области администрирования. А дальше будет видно.

    Ответить

  2. Garik:

    Большое спасибо за Ваши лекции…

    Ответить

Оставьте свой отзыв