Лекция №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.
Iceman phl:
Читать Ваши лекции одно удовольствие, спасибо большое!
Сейчас в ubuntu, да и не только во всю rsyslog используется как замена обычному syslog. Вот только информации толковой в рунете крайне мало.
У Вас в планах не было, случайно, рассказать своим читателям про rsyslog?
Ответить
Igorka Reply:
августа 28, 2011 at 15:42
Спасибо за отзыв.
Сейчас меняются приоритеты в работе, поэтому в ближайшем будущем ничего не планируется из области администрирования. А дальше будет видно.
Ответить
Garik:
Большое спасибо за Ваши лекции…
Ответить
25 марта 2013, 10:24