Ведение логов

В современных системах логи ведутся через сервис journald.

Просмотр последних сообщений в логах

journalctl -e

то же, но с подробной информацией о событиях

journalctl -ex

При наличии каталога /var/log/journal - файлы журнала создаются в нем и сохраняются при перезагрузке. В противном случае журнал хранится в каталоге /run/log/journal/, который отображается в ОЗУ и теряется при перезагрузке.

Для совместимости с существующими системами journald пересылает все сообщения в классический syslogd. Этот поведение можно отключить в конфигурации /etc/systemd/journald.conf установив параметр

ForwardToSyslog=no

Полезные опции:

  • -k, --dmesg - сообщения от ядра
  • -u, --unit=UNIT - фильтр по юнитам systemd
  • -S, --since=, -U, --until= - время ОТ и ДО. Формат даты "2012-10-30 18:17:16" время можно опускать. Дополнительно есть строки "yesterday", "today"
  • -p, --priority= - важность сообщения в стиле syslog (notice,info и т.д.). Можно задавать в числовом виде: 0=emerg,..7-debug
  • SYSLOG_FACILITY= - тип сообщения в стиле syslog (authpriv,mail и т.д.), заданный числовым значением.

Числовые значения для фильтрации в стиле syslog.

Приоритет: emerg=0, alert=1, crit=2, err=3, warning=4, notice=5, info=6, debug=7

Типы сообщений: kern=0, user=1, mail=2, daemon=3, auth=4, syslog=5, lpr=6, news=7, uucp=8, cron=9, authpriv=10, ftp=11

Наблюдение за логами - logwatch

Набор скриптов Logwatch предназначен для выделения из логов наиболее значимой информации.

Структура пакета практически не зависит от используемой операционной системы и ориентирована на популярные сервисы, такие как веб-сервер apache, почтовый сервер sendmail, антивирус clamav и т.п. Благодаря этому всегда можно обновить версию Logwatch, взяв tar-архив прямо с сайта проекта http://www.logwatch.org. Тонкие отличия для системных модулей, таких как pam_unix, учтены в самих скриптах.

Основные скрипты располагаются в каталоге /usr/share/logwatch При необходимости тонких настроек или внесения изменений в скрипты, необходимо скопировать соответствующие файлы в каталог /etc/logwatch с сохранением вложенной структуры каталогов.
При загрузке logwatch вначале просматривает /etc/logwatch, а затем /usr/share/logwatch. При этом скрипты с совпадающими именами берутся только из /etc/logwatch, а переменные конфигурации, описанные в /etc/logwatch либо перекрывают описанные /usr/share/logwatch, либо, в случаях когда формируется список значений, добавляются к описанным в /usr/share/logwatch.

Если у вас выдаются избыточные безвредные сообщения, нераспознанные модулями Logwatch, то в /etc/logwatch/conf/ignore.conf можно прописать набор регулярных выражений, которые будут отфильтровывать лишние строки. При настройке этого фильтра следует соблюдать осторожность, чтобы не заблокировать оповещение о важных событиях в системе.

Ведение логов syslog

Запись логов ведётся специальным приложением syslogd или его современной версией rsyslogd. Для отправки сообщений демону используется сетевой протокол, который может использовать либо TCP/IP, либо Unix сокет /dev/log. Программист на Си может воспользоваться для записи в лог стандартной функцией syslog(3), а разработчик скриптов или обычный пользователь – утилитой logger.

Особенностью протокола syslog является доверие к клиенту, что приводит к возможности генерировать записи любого содержания в любом логе от имени любой службы (в том числе от имени ядра ОС).

Сообщение, передаваемое в syslogd, содержит класс сообщения, состоящий из категории и важности, идентификатор (имя программы) и произвольный текст. syslogd на основе класса сообщения выбирает файл для записи и сохраняет в этот файл время получения сообщения, идентификатор и текст.

Классы сообщений

По категориям: authpriv, cron, daemon, ftp, kern, lpr, mail, news, syslog, user, uucp, local0...local7

authpriv – данные могут содержать приватную информацию, например пароли при логировании процесса аутенификации. Такие данные должны сохраняться в файле, недоступном на чтение для обычных пользователей.
cron, ftp, lpr, mail, news, uucp – различные службы (в том числе устаревшие), которые генерируют большой поток сообщений. В CentOS отдельно настроены mail и cron
daemon – любая служба
user – обычный пользователь
syslog – сообщения самого syslogd
local0...local7 – отданы на усмотрение местного администратора. В CentOS local7 используется для записи сообщений во время загрузки

По важности: emerg, alert, crit, err, warning, notice, info, debug

emerg – критическая ошибка, затрагивающая всю систему (отказ диска, отключение электропитания и т.п.)
alert, crit – проблемы различной степени тяжести. Используются редко
err, warning, notice, info – диапазон, обычно используемый приложениями
debug – отладочные сообщения. Обычно нигде не сохраняются

Конфигурационные файлы syslogd/rsyslogd

В зависимости от используемого демона конфигурация может находиться в /etc/syslog.conf или /etc/rsyslog.conf. rsyslog.conf имеет более развитый синтаксис, однако правила, описывающие сортировку сообщений по категориям, имеют одинаковый формат. Эти правила состоят из строк вида:

фильтр действие

фильтр – описывает класс сообщений, для которых будет выполняться действие, и состоит из шаблонов, разделённых точкой с запятой. Каждый шаблон состоит из полей категории и важности, разделённых точкой. Фильтр выбирает те сообщения, категория и важность которых соответствуют всем шаблонам фильтра. Т.е. условия-шаблоны объединяются логическим оператором И.

Примеры фильтров:
mail.info – категория mail, важность info и выше
*.=debug – любая категория, важность – только debug
*.* – все сообщения
*.*;authpriv.none – все, кроме категории authpriv

действие – имя файла, FIFO, программы или IP адрес удаленного компьютера.

Формат записи действий:
/var/log/messages – файл
/dev/console – консоль (root'а?)
/dev/ttyS0 – последовательный порт
|/tmp/debug-log – FIFO. Удобно для отладки
@192.168.1.0 – IP адрес
* – сообщение всем залогированным пользователям

Пример из реального файла syslog.conf

# Всё  (кроме mail и cron) важности info и выше
# Прячем сведения об аутенификации пользователей!
*.info;mail.none;authpriv.none;cron.none    /var/log/messages

# authpriv в отдельный файл с ограниченным доступом
authpriv.*                                  /var/log/secure

# Все сообщения почты в отдельный файл
mail.*                                      /var/log/maillog
# то же с сообщениями от crond
cron.*                                      /var/log/cron

# Сообщения уровня emerg рассылаются всем
*.emerg                                     *

Программа logger

logger -t идентификатор -p категория.важность текст

По умолчанию logger подставляет в качестве идентификатора имя пользователя, а в качестве класса сообщения user.notice, однако любой, даже непривилегированный, пользователь может изменить эти значения с помощью соответствующих опций.