Войти
Android, Windows, Apple, Ликбез. Социальные сети. Драйверы
  • Японские телефоны Новый японский смартфон
  • Lenovo G500S: характеристики, основные особенности
  • Определяем серию продукта видеокарт Nvidia Характеристики карты nvidia 9800 gt
  • А конкуренты у смартфона есть
  • Что такое расширение файла TRZ?
  • Не работает динамик в "айфоне"
  • Лог файлы Linux по порядку. Конфигурационный файл демона syslogd Linux логирование

    Лог файлы Linux по порядку. Конфигурационный файл демона syslogd Linux логирование

    Действиями демона syslogd управляет файл конфигурации /etc/syslog.conf. Это простой текстовый файл, в котором пустые строки и строки со знаком # в первой позиции игнорируются. Формат файла следующий:

    <селектор> <действие>.

    Например,

    mail.err /var/log/mail.errors

    Эта строка обеспечит запись всех ошибок, связанных с доставкой почты в файл /var/log/mail.errors.

    Важно: В качестве разделителя между селектором и действием используйте только клавишу . Использование пробелов будет ошибкой, которую не так-то легко обнаружить.

    Как вы уже заметили, селектор записывается в составном виде. В общем виде это выглядит, как средство.уровень

    К тому же в поле <селектор> может содержаться один или несколько селекторов, разделенных точкой с запятой. Селектор может содержать группу средств, разделенных запятыми. Селектор может содержать символы * и none, которые означают соответственно "все" и "ничего".

    Примеры селекторов:

    средство.уровень действие

    средство1,средство2.уровень действие

    средство1.уровень1;средство2.уровень2 действие

    *.уровень действие

    *.уровень;средство.none действие

    Ниже в таблицах перечислены основные имена средств и уровней серьезности системы syslog.

    Средство Программы, использующие его

    kern Ядро системы

    user Пользовательские процессы

    mail Система электронной почты

    daemon Системные демоны

    auth Системы защиты и полномочий

    lpr Система печати

    news Система телеконференций

    cron Демон cron

    local0-7 Восемь уровней локального сообщения

    syslog Внутренние сообщения системы syslog

    ftp Демон ftpd

    * Все вышеперечисленные средства

    Уровень Значение уровня

    emerg Экстренные ситуации

    alert Срочные ситуации

    crit Критические состояния

    err Состояния ошибок

    warning Предупреждения

    notice Необычные состояния

    Info Информационные сообщения

    debug Отладочная информация

    Уровни перечислены в порядке убывания. Это значит, что уровни обозначают минимальную важность, которую должно иметь сообщение, чтобы быть зарегистрированным в системе syslog.

    Поле <действие> указывает, что нужно делать с поступившим сообщением.

    Действие Описание

    имя_файла Записать сообщение в файл на локальной машине

    @имя_машины Переслать сообщение демону syslogd на указанную машину

    @IP_адрес То же, только указан IP-адрем машины

    пользователь1, Вывести сообщение на экраны указанных пользователей ...

    пользовательN

    * Вывести сообщение на экраны всех пользователей

    *.emerg /dev/console

    *.err;auth.notice /dev/console

    *.err;auth,mail,user.info /var/log/messages

    mail.err /var/log/mail.log

    mail.info @192.168.0.1

    Говоря о системе syslog, нужно упомянуть о команде logger, которая позволяет вносить записи в системный журнал из shell-сценариев.

    Эту команду удобно использовать для проверки изменений, внесенных в файл /etc/syslog.conf.

    local5.warning /var/log/local.log

    и хотите проверить, работает ли она, то введите команду

    # logger -p local5.warning "Local test"

    Посмотрите файл /var/log/local.log. Если строчки "Local test" в нем нет, значит вы скорее всего забыли послать демону syslogd сигнал HUP.

    Невозможно представить себе пользователя и администратора сервера, или даже рабочей станции на основе Linux, который никогда не читал лог файлы. Операционная система и работающие приложения постоянно создают различные типы сообщений, которые регистрируются в различных файлах журналов. Умение определить нужный файл журнала и что искать в нем поможет существенно сэкономить время и быстрее устранить ошибку.

    Журналирование является основным источником информации о работе системы и ее ошибках. В этом кратком руководстве рассмотрим основные аспекты журналирования операционной системы, структуру каталогов, программы для чтения и обзора логов.

    Основные лог файлы

    Все файлы журналов, можно отнести к одной из следующих категорий:

    • приложения;
    • события;
    • службы;
    • системный.

    Большинство же лог файлов содержится в директории /var/log .

    • /var/log/syslog или /var/log/messages содержит глобальный системный журнал, в котором пишутся сообщения с момента запуска системы, от ядра Linux, различных служб, обнаруженных устройствах, сетевых интерфейсов и много другого.
    • /var/log/auth.log или /var/log/secure - информация об авторизации пользователей, включая удачные и неудачные попытки входа в систему, а также задействованные механизмы аутентификации.
    • /var/log/dmesg - драйвера устройств. Одноименной командой можно просмотреть вывод содержимого файла. Размер журнала ограничен, когда файл достигнет своего предела, старые сообщения будут перезаписаны более новыми. Задав ключ --level= можно отфильтровать вывод по критерию значимости.
    Поддерживаемые уровни журналирования (приоритеты): emerg - система неиспользуемая alert - действие должно быть произведено немедленно crit - условия критичности err - условия ошибок warn - условия предупреждений notice - обычные, но значимые условия info - информационный debug - отладочные сообщения (5:520)$ dmesg -l err usb 1-1.1: 2:1: cannot get freq at ep 0x1 usb 1-1.1: 1:1: cannot get freq at ep 0x81 usb 1-1.1: 1:1: cannot get freq at ep 0x81
    • /var/log/alternatives.log - Вывод программы update-alternatives , в котором находятся символические ссылки на команды или библиотеки по умолчанию.
    • /var/log/anaconda.log - Записи, зарегистрированные во время установки системы.
    • /var/log/audit - Записи, созданные службой аудита auditd .
    • /var/log/boot.log - Информация, которая пишется при загрузке операционной системы.
    • /var/log/cron - Отчет службы crond об исполняемых командах и сообщения от самих команд.
    • /var/log/cups - Все, что связано с печатью и принтерами.
    • /var/log/faillog - Неудачные попытки входа в систему. Очень полезно при проверке угроз в системе безопасности, хакерских атаках, попыток взлома методом перебора. Прочитать содержимое можно с помощью команды faillog .
    • var/log/kern.log - Журнал содержит сообщения от ядра и предупреждения, которые могут быть полезны при устранении ошибок пользовательских модулей встроенных в ядро.
    • /var/log/maillog/ или /var/log/mail.log - Журнал почтового сервера, используемого на ОС.
    • /var/log/pm-powersave.log - Сообщения службы экономии заряда батареи.
    • /var/log/samba/ - Логи файлового сервера Samba , который используется для доступа к общим папкам Windows и предоставления доступа пользователям Windows к общим папкам Linux.
    • /var/log/spooler - Для представителей старой школы, содержит сообщения USENET. Чаще всего бывает пустым и заброшенным.
    • /var/log/Xorg.0.log - Логи X сервера. Чаще всего бесполезны, но если в них есть строки начинающиеся с EE, то следует обратить на них внимание.

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

    • /var/log/yum.log - Для программ установленных с помощью Yum в RedHat Linux.
    • /var/log/emerge.log - Для ebuild -ов установленных из Portage с помощью emerge в Gentoo Linux.
    • /var/log/dpkg.log - Для программ установленных с помощью dpkg в Debian Linux и всем семействе родственных дистрибутивах.

    И немного бинарных журналов учета пользовательских сессий.

    • /var/log/lastlog - Последняя сессия пользователей. Прочитать можно командой last .
    • /var/log/tallylog - Аудит неудачных попыток входа в систему. Вывод на экран с помощью утилиты pam_tally2 .
    • /var/log/btmp - Еже один журнал записи неудачных попыток входа в систему. Просто так, на всякий случай, если вы еще не догадались где следует искать следы активности взломщиков.
    • /var/log/utmp - Список входов пользователей в систему на данный момент.
    • /var/log/wtmp - Еще один журнал записи входа пользователей в систему. Вывод на экран командой utmpdump .
    (5:535)$ sudo utmpdump /var/log/wtmp [Вт авг 11 16:50:07 2015] [~~ ] [Вт авг 11 16:50:08 2015] [~~ ] [Вт авг 11 16:50:57 2015] [Вт авг 11 16:50:57 2015] [~~ ] [Вт авг 11 16:50:57 2015]

    И другие журналы

    Так как операционная система, даже такая замечательная как Linux, сама по себе никакой ощутимой пользы не несет в себе, то скорее всего на сервере или рабочей станции будет крутится база данных, веб сервер, разнообразные приложения. Каждое приложения или служба может иметь свой собственный файл или каталог журналов событий и ошибок. Всех их естественно невозможно перечислить, лишь некоторые.

    • /var/log/mysql/ - Лог базы данных MySQL.
    • /var/log/httpd/ или /var/log/apache2/ - Лог веб сервера Apache, журнал доступа находится в access_log , а ошибки - в error_log .
    • /var/log/lighthttpd/ - Лог веб сервера lighttpd.

    В домашнем каталоге пользователя могут находится журналы графических приложений, DE.

    • ~/.xsession-errors - Вывод stderr графических приложений X11.
    Initializing "kcm_input" : "kcminit_mouse" Initializing "kcm_access" : "kcminit_access" Initializing "kcm_kgamma" : "kcminit_kgamma" QXcbConnection: XCB error: 3 (BadWindow), sequence: 181, resource id: 10486050, major code: 20 (GetProperty), minor code: 0 kf5.kcoreaddons.kaboutdata: Could not initialize the equivalent properties of Q*Application: no instance (yet) existing. QXcbConnection: XCB error: 3 (BadWindow), sequence: 181, resource id: 10486050, major code: 20 (GetProperty), minor code: 0 Qt: Session management error: networkIdsList argument is NULL
    • ~/.xfce4-session.verbose-log - Сообщения рабочего стола XFCE4.

    Чем просматривать - lnav

    Почти все знают об утилите less и команде tail -f . Также для этих целей сгодится редактор vim и файловый менеджер Midnight Commander. У всех есть свои недостатки: less неважно обрабатывает журналы с длинными строками, принимая их за бинарники. Midnight Commander годится только для беглого просмотра, когда нет необходимости искать по сложному шаблону и переходить помногу взад и вперед между совпадениями. Редактор vim понимает и подсвечивает синтаксис множества форматов, но если журнал часто обновляется, то появляются отвлекающие внимания сообщения об изменениях в файле. Впрочем это легко можно обойти с помощью <:view /path/to/file> .


    Недавно я обнаружил еще одну годную и многообещающую, но слегка еще сыроватую, утилиту - lnav , в расшифровке Log File Navigator.




    Установка пакета как обычно одной командой.


    $ aptitude install lnav #Debian/Ubuntu/LinuxMint $ yum install lnav #RedHat/CentOS $ dnf install lnav #Fedora $ emerge -av lnav #Gentoo, нужно добавить в файл package.accept_keywords $ yaourt -S lnav #Arch

    Навигатор журналов lnav понимает ряд форматов файлов.

    • Access_log веб сервера.
    • CUPS page_log
    • Syslog
    • dpkg.log
    • strace
    • Произвольные записи с временными отметками
    • gzip, bzip
    • Журнал VMWare ESXi/vCenter

    Что в данном случае означает понимание форматов файлов? Фокус в том, что lnav больше чем утилита для просмотра текстовых файлов. Программа умеет кое что еще. Можно открывать несколько файлов сразу и переключаться между ними.


    (5:471)$ sudo lnav /var/log/pm-powersave.log /var/log/pm-suspend.log

    Программа умеет напрямую открывать архивный файл.


    (5:471)$ lnav -r /var/log/Xorg.0.log.old.gz

    Показывает гистограмму информативных сообщений, предупреждений и ошибок, если нажать клавишу . Это с моего syslog-а.


    Mon May 02 20:25:00 123 normal 3 errors 0 warnings 0 marks Mon May 02 22:40:00 2 normal 0 errors 0 warnings 0 marks Mon May 02 23:25:00 10 normal 0 errors 0 warnings 0 marks Tue May 03 07:25:00 96 normal 3 errors 0 warnings 0 marks Tue May 03 23:50:00 10 normal 0 errors 0 warnings 0 marks Wed May 04 07:40:00 96 normal 3 errors 0 warnings 0 marks Wed May 04 08:30:00 2 normal 0 errors 0 warnings 0 marks Wed May 04 10:40:00 10 normal 0 errors 0 warnings 0 marks Wed May 04 11:50:00 126 normal 2 errors 1 warnings 0 marks

    Кроме этого поддерживается подсветка синтаксиса, дополнение по табу и разные полезности в статусной строке. К недостаткам можно отнести нестабильность поведения и зависания. Надеюсь lnav будет активно развиваться, очень полезная программа на мой взгляд.

    Демон syslogd (system logging-deamon) обеспечивает вид протоколирования, который поддерживается большинством программ. При этом демон syslogd пишет сообщения в файл /var/log/syslog. Записи в этом файле обычно содержат такие поля: дата и время, хост, программа, сообщение. Пример этого файла представлен ниже:

    Jan 27 17:09:35 dhsilabs modprobe: modprobe: Can"t locate module sound-service-1-0

    Jan 27 17:09:35 dhsilabs modprobe: modprobe: Can"t locate module sound-slot-1

    Jan 27 17:12:28 dhsilabs kernel: VFS: Disk change detected on device ide1(22,64)

    Jan 27 17:12:31 dhsilabs kernel: ISO 9660 Extensions: Microsoft Joliet Level 1

    Jan 27 17:12:31 dhsilabs kernel: ISOFS: changing to secondary root

    Jan 27 17:12:32 dhsilabs kernel: VFS: Disk change detected on device fd(2,0)

    Jan 27 17:12:32 dhsilabs kernel: end_request: I/O error, dev 02:00 (floppy), sector 0

    Например, из предпоследней записи мы можем узнать, что 27-го января 2002 года в 17:12 произошла смена носителя в устройстве fd, о чем нам любезно сообщило ядро системы (запись «программа» - kernel). А носитель (дискета) оказался подпорченным, о чем свидетельствует следующая запись - ошибка ввода/вывода (I/O error, dev 02:00 (floppy), sector 0).

    Демон syslogd запускается автоматически при старте системы. Для его запуска предназначен сценарий /etc/rc.d/init.d/syslog. Как обычно, запустить демон самостоятельно вы можете с помощью команды: /etc/rc.d/init.d/syslog start, а остановить - /etc/rc.d/init.d/syslog stop. Для обеспечения автоматической загрузки нужно создать символическую ссылку на этот файл, например:

    ls –s /etc/re.d/rc5.d/@S30syslog /etc/rc.d/init.d/syslog.

    В этом случае вы обеспечите запуск демона на пятом уровне запуска (автоматический запуск X Window). Если вы используете Linux Mandrake, включить и отключить автоматический запуск вы можете с помощью команды drakxservices. При использовании Linux Red Hat включите автозапуск демона с помощью конфигуратора setup. Демон syslogd можно запускать с опциями, указанными в табл. 5.7.

    В табл. 5.7 указаны не все опции демона. Назначение всех остальных опций вы можете найти в справочной системе, введя команду man syslogd.

    Опции демона syslogd Таблица 5.7

    Опция Описание
    -а сокет Этот параметр позволяет указать дополнительный сокет, который syslogd должен прослушивать
    -d Включает режим отладки. В этом режиме демон не будет использовать системный вызов fork(2) для переключения себя в фоновый режим и будет выводить больше отладочной информации
    -f файл Этот параметр определяет альтернативный файл конфигурации
    -h По умолчанию демон не перенаправляет сообщения, которые он получает от других узлов. Этот параметр позволяет перенаправить сообщения другим хостам, которые определены
    -n Этот параметр нужен, если syslogd запускается и контролируется программой init
    -р сокет Позволяет задать другой сокет Unix вместо /dev/log
    -r Позволяет принимать сообщения из сети. Данная опция появилась в версии syslogd 1.3
    -v Выводит версию демона syslogd

    СЕРГЕЙ СУПРУНОВ

    FreeBSD tips: использование syslog

    – Позвольте, товарищи, у меня все ходы записаны!

    – Контора пишет, – сказал Остап.

    И.Ильф, Е.Петров «12 стульев».

    Протоколирование работы любой системы, и прежде всего сервера, – одна из важнейших составляющих администрирования. Именно в log-файлы мы заглядываем в первую очередь, когда в системе возникают какие-то неполадки. Оттуда черпаем уверенность, что та или иная программа работает так как ожидается. При разработке веб-приложений log-файл становится важнейшим источником отладочной информации. Об особенностях работы демона syslog, отвечающего за протоколирование системной информации, и пойдет речь.

    Что такое syslog

    Syslog является централизованным сервисом, обеспечивающим сбор и запись протокольной информации, поступающей от различных компонентов операционной системы и пользовательских процессов. Сторонние программы, как правило, умеют работать со своими лог-файлами самостоятельно, хотя многие из них можно настроить на работу и с демоном syslogd. К преимуществам использования syslog можно отнести возможность управлять процессом сбора необходимой информации с помощью одного конфигурационного файла, что обеспечивает единообразие получаемых log-файлов и в итоге упрощает управление ими.

    Работа службы syslog обеспечивается демоном syslogd, который автоматически запускается при старте системы. Он постоянно находится в памяти, ожидая сообщения от других процессов и обрабатывая их в соответствии со своими настройками.

    Каждое сообщение характеризуется уровнем и источником (facility). Уровень задает степень важности сообщения с точки зрения функционирования системы. Файл syslog.h определяет следующие уровни (приоритеты):

    Таблица 1. Уровни сообщений

    Уровень

    Описание

    emerg, panic

    Состояние «паники»

    alert

    Состояние, требующее немедленного вмешательства

    crit

    Критическое состояние

    err, error

    Прочие ошибки работы

    warning, warn

    Предупреждения

    notice

    Сообщения, не являющиеся ошибками, но на которые следует обратить внимание

    info

    Информационные сообщения (нормальная работа)

    debug

    Отладочная информация

    В таблице 1 уровни сообщений перечислены в порядке убывания. Этот порядок понадобится в дальнейшем при обсуждении синтаксиса конфигурационного файла.

    Обозначения уровня сообщения, записанные в одной строке (например, emerg и panic), – это синонимы, и может быть использовано любое из них. Однако panic, error и warn (указанные в таблице вторыми) считаются устаревшими, и следует избегать этих обозначений при редактировании конфигурационного файла. Вместо них используйте emerg, err и warning соответственно.

    Возможные источники сообщения перечислены в таблице 2:

    Таблица 2. Источники сообщений

    Источник

    Описание

    kern

    Сообщения ядра

    auth, authpriv

    security

    Сообщения безопасности (например, от firewall )

    console

    Сообщения, поступающие на консоль (/dev /console )

    syslog

    Собственные сообщения службы syslog

    cron

    Сообщения подсистемы cron

    Сообщения службы времени

    Сообщения FTP- серверов

    Сообщения подсистемы печати

    mail

    Сообщения почтовых служб

    news

    Сообщения службы новостей

    uucp

    Сообщения UUCP

    daemon

    Сообщения прочих демонов, работающих в системе

    user

    Сообщения пользовательских процессов

    local0 – local7

    Могут использоваться для различных пользовательских нужд (иногда используются и системой)

    При настройке какого-либо приложения для работы со службой syslog уточните, какой источник (facility) оно использует. Некоторые программы позволяют указать источник самостоятельно. Например, демон clamd (главный процесс антивируса clamav) по умолчанию использует local6, однако позволяет задавать другой источник (параметр LogFacility в конфигурационном файле). В ряде случаев может быть полезно объединить его сообщения с сообщениями почтовых служб, указав в качестве источника LOG_MAIL.

    Параметры запуска демона

    Полный список параметров запуска можно получить на странице руководства man syslogd. Здесь рассмотрим только некоторые из них.

    Syslog способен записывать поступающие сообщения в лог-файлы (которые обычно размещаются в каталоге /var/log), отправлять на консоль или подключенный терминал пользователя, пересылать на удаленный хост или отдавать на обработку внешней утилите по конвейеру.

    Для работы по сети syslog использует порты 514 (UDP и TCP). Запущенный без дополнительных параметров, syslogd будет прослушивать эти порты, ожидая входящих сообщений. Ключ -s запрещает принимать входящие сообщения, но сокеты на портах 514 по-прежнему создаются для исходящих соединений, чтобы syslogd мог отправлять сообщения удаленным хостам. Удвоение ключа (-ss) запрещает и исходящие соединения.

    По умолчанию syslogd запускается с ключом -s (см. /etc/defaults/rc.conf, параметр syslogd_flags), поэтому входящие соединения запрещены. Если вы хотите использовать службу syslog вашего сервера для обслуживания нескольких машин, добавьте в /etc/rc.conf следующую строчку:

    syslogd_flags=””

    Она переопределит значение, установленное в /etc/defaults/rc.conf, и syslogd сможет обслуживать входящие соединения. Естественно, в этом случае необходимо обеспечить требуемый уровень безопасности, исключив возможность чужим хостам писать что-нибудь в ваши журналы. Установить ограничения на входящие соединения позволяет ключ -a (см. man syslogd). Также не последнюю роль играет правильно настроенный брандмауэр.

    Еще один полезный ключ -l позволяет задавать дополнительные файлы сокетов, которые прослушиваются демоном syslogd в дополнение к используемому по умолчанию /var/run/log. Например, этот ключ необходим, чтобы syslog мог обслуживать программы, запущенные в chroot-окружении. В частности, так работает named, начиная с версии BIND 9. Во FreeBSD 5.3 syslogd запускается со следующими ключами:

    # ps -wax | grep syslog

    321 ?? Ss 0:01,67 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/run/log -s

    Синтаксис конфигурационного файла

    Настройка протоколирования осуществляется в файле /etc/syslog.conf. Само собой разумеется, что редактировать его может только пользователь root. Этот файл содержит два вида строк – условно назовем их «фильтры» и «правила».

    Строка-фильтр определяет программу или хост, к сообщениям от которых будут применяться следующие за ней правила. Фильтр вида «!prog» (или «#!prog») указывает на то, что последующие строки относятся к логам, которые генерируются указанной программой prog. Синонимом этой записи является «!+prog». Строка «!-prog», наоборот, говорит о том, что последующие правила будут применяться ко всем сообщениям, кроме тех, которые исходят от программы prog. Допускается перечислять через запятую несколько программ, при этом знак «+» или «-» применяется ко всему списку.

    Если строка-фильтр задана как «+hostname», то в качестве источника сообщений, которые должны быть обработаны последующими правилами, будет использоваться указанный хост. Так же как и в случае с программами, символом «-» отмечается, что правила будут применяться ко всем сообщениям, кроме поступающих от указанного хоста. Через запятую можно задавать список хостов.

    Символ «*», заданный в качестве программы или хоста, отменяет действие фильтра, установленного ранее. То есть правила, указанные после такой строки, будут применяться ко всем сообщениям. Фильтры с именем хоста или программы независимы друг от друга и могут действовать одновременно. Например:

    # Правила, расположенные здесь, применяются ко всем сообщениям

    My.host

    # Правила применяются ко всем сообщениям с my.host

    Logger

    # Правила применяются к сообщениям от logger с my.host (фильтр хоста продолжает действовать)

    # Правила применяются к сообщениям от su с my.host

    # Правила применяются к сообщениям от su с любых хостов (фильтр хоста отменен, фильтр программы продолжает действовать)

    # Правила применяются ко всем сообщениям (фильтр программы так же отменен)

    Строки правил имеют следующий вид:

    facility.CMPlevel destination

    Здесь facility – источник сообщения («*» обозначает любые источники), level – уровень сообщений, которые будут обрабатываться в соответствии с данным правилом. Служебное слово «none», указанное вместо уровня, дает указание полностью исключить сообщения от данного источника.

    CMP – операция сравнения (допускаются символы «>», «<», «=», «>=», «<=», а также символ отрицания «!»). Если символ сравнения не указан, подразумевается «больше или равно», то есть обрабатываются все сообщения уровня level и выше.

    Destination указывает, куда следует сохранять данное сообщение. Это может быть log-файл (указывается полный путь, начиная с «/»), адрес удаленного сервера (начинается с символа «@»), имя пользователя (сообщения будут отправляться на терминал, к которому данный пользователь подключен). Также сообщение может быть передано на обработку внешней программе, для чего используется символ конвейера «|».

    Несколько примеров правил

    Все сообщения ядра будут отправляться в файл kern.log.

    kern.* /var/log/kern.log

    Все сообщения об ошибках, а также сообщения уровней emerg, alert и crit будут помещены в all-err.log. Обратите внимание на дефис перед именем log-файла. По умолчанию сообщения буферизуются в памяти и записываются на диск по мере заполнения буфера. Это снижает нагрузку на файловую систему, но может вызвать потерю некоторой информации при аварийном отключении машины. Дефис перед именем файла заставляет демон syslogd немедленно записывать сообщения на диск.

    *.err -/var/log/all-err.log

    Отладочные сообщения пользовательских процессов будут выводиться на терминал, к которому в настоящее время подключен пользователь vasya.

    user.debug vasya

    Все сообщения от служб новостей и электронной почты будут пересылаться на 514-й порт машины syslog.host.ru.

    mail.*,news.* @syslog.host.ru

    В указанный файл будут помещаться все сообщения службы печати, уровень которых ниже warning. Как указывалось ранее, по умолчанию используется сравнение «больше или равно», а символ «!» его инвертирует, заменяя на «меньше». Если нужно исключить конкретный уровень, следует использовать конструкцию «!=».

    lpr.!warning /var/log/printers.log

    Сообщения уровня debug (и только его), имеющие facility level0 и level3, будут выводиться на все подключенные терминалы.

    level0,level3.=debug *

    Сообщения службы точного времени, уровень которых выше критического (то есть emerg и alert), а также меньше или равные notice (notice, info и debug), будут отправляться на терминалы пользователей ntpuser и root.

    ntp.>crit,<=notice ntpuser,root

    Все сообщения уровня warning, исключая поступающие от почтовых служб, будут записываться в файл warn.log.

    *.=warning,mail.none /var/log/warn.log

    В данном случае все сообщения, уровень которых выше или равен crit, будут отправлены по электронной почте пользователю root.

    *.crit | mail -s “critical message” root

    Как видите, формат конфигурационного файла допускает перечисление в одной строке нескольких уровней, источников и пунктов назначения, что делает настройку более гибкой. Чтобы изменения после редактирования вступили в силу, нужно послать процессу syslogd сигнал HUP:

    # kill –HUP `cat /var/run/syslog.pid`

    Следует заметить, что если то или иное сообщение подпадает под действие нескольких строк в конфигурационном файле, то оно будет обработано в соответствии с каждой из них. Пример:

    mail.* /var/log/maillog

    *.=err /var/log/error.log

    В данном случае сообщения mail.err попадут как в maillog, так и в error.log.

    Стратегия составления конфигурационного файла

    Завершая рассмотрение конфигурационного файла, скажу несколько слов о стратегиях его составления. Помимо очень популярной «лишь бы работало», можно выделить две основные, которые условно назовем «по источнику» и «по назначению».

    • Первая стратегия, которую можно наблюдать в ряде дистрибутивов GNU/Linux, заключается в том, что для каждого источника сообщений записывается свое правило (или группа правил, если сообщения разных уровней должны обрабатываться по-разному). Ее достоинство – простота определения, куда записываются сообщения конкретных служб.
    • Стратегия «по назначению» подразумевает создание по возможности только одной строки для каждого «получателя» сообщения, например, файла. Такого подхода придерживается, в частности, FreeBSD. В итоге можно легко определить, какая информация заносится в конкретный лог-файл, но, например, пункты назначения для сообщений ядра приходится собирать по всему конфигурационному файлу.

    Утилита logger

    В составе системы есть утилита logger, которая позволяет отправлять сообщения службе syslog непосредственно из командной строки. Ее удобно использовать при тестировании правил конфигурации, а также в разрабатываемых сценариях для протоколирования их работы. Примеры:

    user$ logger -p user.err “Error in user program!”

    user$ logger -h syslog.host.ru “Test it”

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

    Использование механизмов ротации

    Рассмотренный выше механизм протоколирования не предусматривает какого-либо управления log-файлами. Сообщения просто помещаются в них согласно правилам, описанным в конфигурационном файле. Это значит, что файлы журналов будут постоянно расти, и если ничего не предпринимать, то рано или поздно заполнят все доступное пространство соответствующего раздела. Чтобы этого избежать, используется механизм ротации.

    Например, как только размер файла debug.log превысит 100 Мб, он переименовывается в debug.log.0 и упаковывается в debug.log.0.bz2. А вместо него создается новый debug.log. Далее, когда размер и нового файла достигает 100 Мб, debug.log.0.bz2 переименовывается в debug.log.1.bz2, и описанная выше процедура повторяется. Система хранит только определенное количество архивных файлов, удаляя наиболее старые из них. Это и есть ротация.

    Утилита newsyslog

    В системе FreeBSD за ротацию отвечает утилита newsyslog, которая по умолчанию запускается в начале каждого часа демоном cron. Изменить период ротации можно, отредактировав файл /etc/crontab.

    Указанные в приведенном выше примере параметры ротации (размер файла, упаковка), а также ряд других задаются в конфигурационном файле /etc/newsyslog.conf. Для каждого файла, нуждающегося в ротации, в нем содержится строка в общем случае из девяти полей: имя файла, владелец и группа, права доступа, наибольший номер в имени архивных файлов, максимальный размер файла, период ротации, дополнительные флаги, а также путь к PID-файлу приложения, которому нужно отправить сигнал после ротации, и номер сигнала, который должен быть послан. (Отправка сигнала процессу может понадобиться, например, в том случае, если процесс держит log-файл все время открытым; если этого не сделать, то используемый файловый дескриптор не будет соответствовать вновь созданному файлу.) Некоторые поля могут быть опущены. Приведем два примера, полный и «типичный»:

    /var/log/pflog root:wheel 600 3 100 * JB /var/run/pflog.pid 1

    В соответствии с этим правилом файл pflog должен перезаписываться, как только его размер превысит 100 Мб (5-е поле) независимо от времени (символ «*» в 6-м поле). Архивные файлы будут иметь имена вида pflog.X.bz2 (pflog.0.bz2, pflog.1.bz2 и т. д), причем X не может быть больше трех (параметр 3 в 4-м поле). Флаг J указывает, что архивный файл должен упаковываться с помощью утилиты bzip2. Благодаря флагу B в архивируемый и вновь создаваемый файлы не будут добавляться служебные сообщения о ротации, поскольку файл воспринимается как двоичный. Вновь создаваемый файл будет принадлежать пользователю root и группе wheel (это поле можно было бы опустить, поскольку этот владелец устанавливается по умолчанию). Права доступа будут установлены в rw------- (числовое значение 600), то есть только владелец сможет читать этот файл и писать в него. Наконец, процессу, PID которого хранится в файле /var/run/pflog.pid, будет послан сигнал 1 (HUP), чтобы он переоткрыл свой лог-файл.

    /var/log/maillog 640 7 * @T00 J

    Это правило указывает параметры ротации для файла maillog: независимо от размера (звездочка в 5-м поле), файл будет перезаписываться каждую ночь в 00:00 (в man newsyslog.conf формат указания времени описан достаточно подробно). Архив должен упаковываться, будут сохраняться последние 8 архивов (с номерами от 0 до 7 включительно), вновь созданный файл будет принадлежать пользователю root (значение по умолчанию, поэтому поле владельца пропущено) и иметь права доступа rw-r-----.

    Для просмотра упакованных log-файлов можно использовать утилиты zcat и bzcat (для gzip и bzip2 соответственно). Midnight Commander вызывает соответствующие утилиты автоматически.

    После редактирования файла newsyslog.conf никакие сигналы никуда посылать не требуется – конфигурация будет перечитана при следующем вызове newsyslog.

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

    Подводя итоги

    Система syslog является очень мощным и эффективным инструментом протоколирования различных событий, происходящих в системе. Настройки, используемые по умолчанию, достаточно сбалансированы и вполне работоспособны для большинства систем. Тем не менее понимание механизма работы syslog позволит вам существенно повысить качество протоколирования, настроив запись журнальной информации строго в соответствии со своими потребностями.

    © 2005-2017, HOCHU.UA