Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Операционные системы -> Linux -> syslog - сетевой системный журнал


syslog - сетевой системный журнал

Протокол syslog и программные средства поддержки обеспечивают запись информации о событиях в системный журнал (журналы, системную консоль), а также передачу их на сервер журнализации по сети, сортировку и обработку в зависимости от источника и важности сообщений. В статье описывается протокол syslog, его реализация в Solaris и Linux (syslogd), Cisco IOS, а также вспомогательные средства: logrotate, logwatch.

Оглавление:

Архитектура системы журнализации

Компонентами системы являются генератор сообщений (устройство или процесс), протокол обмена, коллектор сообщений (collector, syslog server), релей (relay, принимает сообщения от одного или нескольких генераторов и передает одному или нескольким коллекторам или следующим релеям). Генератор (или релей при передаче) не знает является ли приемник релеем или коллектором, может передавать одно сообщение нескольким приемникам, может обрабатывать сообщение самостоятельно (например, записывая в файл).

Протокол syslog не содержит никаких средств защиты от подделок сообщений. Хуже того, использование протокола UDP позволяет злоумышленникам посылать сообщения от имени любого хоста. Локальная сеть должна быть защищена экраном (IOS ACL, ipchains) от приема пакетов с поддельными локальными адресами (хотя это не помешает посылать поддельные сообщения изнутри локальной сети) и от приема пакетов снаружи на порт 514/udp. Известны случаи переполнения диска ложными сообщениями.

Протокол syslog и UDP не обеспечивают гарантированной доставки (сообщения могут быть потеряны при перегрузке сети или перехвачены, поврежденные сообщения удаляются без предупреждения), правильной последовательности доставки (сообщение о завершении процесса может придти раньше сообщения о его запуске), приоритетной доставки.

Конфиденциальность сообщений не обеспечивается, так как они передаются открытым текстом.

Если при настройке генератора сообщений указать неправильный адрес коллектора или релея, то никаких сообщений об ошибке не будет - сообщения будут удаляться (или записываться в чужой журнал ;).

Средства защиты от зацикливания передачи сообщений неправильно настроенными релеями не предусмотрены.

RFC 3195 предлагает новый протокол над TCP (syslog-conn, 601), обеспечивающий гарантированную доставку в правильной последовательности. Реализация мне не известна. Чудовищная смесь XML, команд и кодов возврата в стиле SMTP и заголовков MIME (BEEP), в которую заворачиваются сообщения стандартного формата syslog. Используется два режима - RAW (аналог нынешнего UDP протокола) и COOKED (сообщения структурированы по полям). BEEP позволяет обеспечить аутентификацию, целостность и конфиденциальность (SASL, TLS).

Проект RFC syslog-sign предлагает обеспечить аутентификацию, упорядоченность, целостность сообщений и обнаружение пропавших сообщений за счет генерации специальных сообщений, содержащих цифровую подпись (signature) блока предыдущих сообщений с сохранением стандартного протокола и формата syslog и использованием UDP. Используется SHA1, OpenPGP DSA.

Протокол syslog

Для приема сообщений используется порт 514/UDP. Рекомендуется также использовать исходный порт 514 для передачи сообщений. Сообщение представляет собой текстовую строку и не может иметь длину более 1024 байт, в противном случае его разрешается обрезать или даже выбрасывать. Даже неправильно сформированное сообщение, посланное на 514 порт, должно рассматриваться как сообщение syslog. Однако, если релей передает сообщение дальше, то он должен добавить к нему стандартные заголовки (при этом, возможно обрезав его до 1024 байт) - USER, NOTICE, свое локальное время и простое имя источника сообщения.

Сообщение начинается с поля PRI, которое в закодированном виде содержит информацию об источнике сообщения (facility) и уровне серьезности (Severity level) сообщения. За ним записывается время (TIMESTAMP), пробел, имя или IP адрес хоста в десятичной записи (HOSTNAME), пробел, произвольный текст сообщения (MSG) в US-ASCII (0x20 - 0x7e).

Источник сообщения кодируется числом от 0 до 23:

  • 0 - KERN (сообщения ядра)
  • 1 - USER (сообщения пользовательских программ)
  • 2 - MAIL (почтовая система)
  • 3 - DAEMON (прочие демоны)
  • 4 - AUTH (безопасность/права доступа)
  • 5 - SYSLOG (генерируемые самим syslog)
  • 6 - LPR (подсистема печати)
  • 7 - NEWS (Netnews, USENET)
  • 8 - UUCP
  • 9 - CRON
  • 10 - AUTHPRIV (безопасность/права доступа - защищенный режим)
  • 11 - FTP
  • 12 - NTP
  • 13 - log audit
  • 14 - log alert
  • 15 - clock daemon
  • с 16 по 23 зарезервированы для локального использования (LOCAL0 - LOCAL7)

Уровень серьезности кодируется числом от 0 до 7:

  • 0 - EMERG (система неработоспособна, старое название PANIC)
  • 1 - ALERT (требуется немедленное вмешательство)
  • 2 - CRIT (критическое состояние)
  • 3 - ERR (ошибка, старое название ERROR)
  • 4 - WARNING (предупреждение, старое название WARN)
  • 5 - NOTICE (все нормально, но важно)
  • 6 - INFO (информационное сообщение)
  • 7 - DEBUG (отладочная печать)

Номер источника умножается на 8 и складывается с уровнем серьезности, получившееся число заключается в угловые скобки и образует поле PRI.

Время (местное!) записывается в формате: Feb 13 21:12:06. Если номер дня является однозначным числом, то перед ним ставится дополнительный пробел (не 0!). Заметьте отсутствие года и зоны в дате, что необходимо учесть при долговременном хранении. Для того, чтобы время в сообщении было правильным, устройство должно быть синхронизовано (например, по NTP).

Имя хоста (простое, не FQDN!) записывается так, как оно известно генератору сообщения. Если устройство имеет несколько интерфейсов с различными IP-адресами, то в качестве имени или адреса хоста может быть использовано любое из них.

Текст сообщения (MSG) обычно содержит этикетку (TAG), указывающую на программу или процесс, выдавшую это сообщение и тело сообщения (CONTENT). Этикетка может содержать латинские буквы и цифры. Начало тела сообщения определяется по первому специальному символу - обычно двоеточие или открывающая квадратная скобка. Например, Cisco IOS в качестве этикетки использует последовательный номер сообщения и двоеточие, а Unix - простое имя программы (тело сообщения начинается с номера процесса в квадратных скобках и двоеточия).

syslogd - "стандартная" реализация протокола syslog в Unix

syslogd осуществляет прием сообщений с порта 514/UDP и от местных источников (сокет /dev/log), их маршрутизацию в зависимости от источника сообщений и уровня серьезности. Позволяет выводить сообщения в журнал, выводить на консоль, на терминал, посылать на другой сервер. Вводится дополнительный тип источника MARK (регулярные отметки, info)

Каждая строка журнала содержит запись одного сообщения, состоящую из полей, разделенных пробелами:

  • дата в стандартном текстовом формате (поле TIMESTAMP из сообщения syslog)
  • имя хоста (fqdn или сокращенное, поле HOSTNAME из сообщения syslog)
  • текст сообщения (поля TAG и CONTENT из сообщения syslog)

Параметры запуска:

  • -a дополнительный-прослушиваемый-сокет (полезен для демонов, делающих chroot; может быть несколько)
  • -d (отладочный режим)
  • -f имя-конфигурационного-файла (по умолчанию, /etc/syslog.conf)
  • -h (изменить обычное поведение, при котором сообщения, принятые от удаленных хостов, не передаются дальше для записи на удаленном хосте во избежание зацикливания)
  • -l список-хостов (список хостов, имена которых не должны записываться в виде FQDN; разделяются двоеточием)
  • -m минут (интервал для регулярных временных записей; по умолчанию - 20; если 0, то не делать вообще)
  • -n (не уходить в фоновый режим; необходим для запуска из init)
  • -p прослушиваемый-сокет (по умолчанию: /dev/log)
  • -r (разрешить принимать сообщения от удаленных хостов; firewall д.б. приоткрыт; в /etc/services д.б. определен syslog для 514/udp)
  • -s список-доменов (обрезать из имен хостов имена указанных доменов; разделяются двоеточием; по умолчанию обрезается домен, совпадающий с доменом сервера syslog)
  • -v (показать версию и закончить работу)
  • -x (запретить определять имя хоста по его адресу, предотвращает deadlock при работе на одном хосте с сервером DNS)

Используемые файлы:

  • /etc/syslog.conf - конфигурационный файл (изменяется при запуске параметром -f)
  • /dev/log - сокет, с которого читаются локальные сообщения (изменяется при запуске параметром -p)
  • /var/run/syslogd.pid - идентификатор процесса

Реакция на сигналы:

  • SIGHUP - реинициализация (закрывает все файлы, читает заново файл конфигурации)
  • SIGTERM - завершение работы
  • SIGINT, SIGQUIT - завершение работы, если выключена отладка
  • SIGUSR1 - включить/выключить отладку (только при использовании ключа -d)

Запускается с правами root. Не меняет права доступа к файлам. Если вынужден создавать файл, то делает его с правами 644. При необходимости ограничить доступ к журналу, соответствующий файл надо создать вручную (или поменять права доступа). Особые проблемы создает logrotate.

Настройка syslog.conf

Представляет собой набор правил маршрутизации сообщений. Каждое правило состоит из селектора и действия, которые разделяются табуляциями (в старых системах - Solaris 5) или пробелами (Linux). Получив сообщение для записи в журнал (от klogd, от локальной или удаленной программы), syslogd для каждого правила проверяет не подходит ли сообщение под шаблон, определяемый селектором. Если подходит, то выполняется указанное в правиле действие. Для одного сообщения м.б. выполнено произвольное количество действий (т.е. обработка сообщения не прекращается при первом успехе).

Селектор состоит из двух частей, разделенных точкой: источник сообщения и уровень серьезности. Прописные и строчные буквы не различаются. Можно также использовать числа (см. /usr/include/syslog.h). Кроме определенных в syslog.3 источников, можно указывать mark (регулярные временные метки), security (устаревший синоним для auth). Кроме определенных в syslog.h уровней серьезности можно использовать warn (синоним для warning), error (синоним для err), panic (синоним для emerg). Сообщения с уровнем, равным или выше указанного в селекторе, и источником, равным указанному в селекторе, считается подходящим. Звездочка перед точкой соответствует любому источнику, после точки - любому уровню. Слово none после точки - никакому уровню для данного источника. Можно указывать несколько источников в одном селекторе (через запятую). В одной строке можно указывать несколько селекторов. Семантика не ясна: если использовать позитивные селекторы, то выполняется логическое ИЛИ, если негативные (none и восклицательный знак), то логическое И.

В новом syslogd (linux) перед уровнем можно поставить знак равенства - селектору будут соответствовать только сообщения с указанным уровнем (но не с высшим); восклицательный знак - не будут соответствовать сообщения с уровнем равным или большим; восклицательный знак и равенство - не будут соответствовать сообщения с уровнем, равным указанному.

В качестве действия можно указывать:

  • имя обычного файла (полный путь от корня), минус перед именем отключает синхронизацию записи
  • поименнованные каналы - fifo (перед именем ставится вертикальная черта), сам канал д.б. создан перед запуском syslogd командой mkfifo
  • терминал или консоль
  • @имя-хоста (передать сообщений для удаленной журнализации)
  • список пользователей (через запятую), на терминалы которых будет послано сообщение
  • звездочка для посылки сообщения на все терминалы (wall)

Особенности syslogd в Linux

Включен в состав пакета sysklogd (RH 6.2: sysklogd-1.3.31-16, RH 7.0: sysklogd-1.3.33-8, RH 7.2: sysklogd-1.4.1-4). Также в этот пакет входит klogd.

Процедура запуска, остановки, перезапуска (syslogd и klogd): /etc/rc.d/init.d/syslog (символьные ссылки на нее из директорий /etc/rc.d/rc?.d/). Ключи запуска считывает из файла /etc/sysconfig/syslog (начиная с RH 7.2). Статус определяется по наличию файла /var/lock/subsys/syslog. Номер процесса хранится в /var/run/syslogd.pid.

Особенности syslogd в Solaris

При разборе файла конфигурации syslogd сравнивает адрес loghost (определяется в /etc/hosts, не через DNS) с адресом своего компьютера и при совпадении определяет переменную LOGHOST. После этого syslog.conf пропускается через макропроцесссор m4(1). В основном, это используется для того, чтобы один и тот же конфигурационный файл можно было использовать на клиентских и серверном (с точки зрения syslog) хостах.

Процедура запуска и остановки: /etc/init.d/syslog (ссылки на нее из директорий /etc/rc?.d). Номер процесса хранится в /etc/syslog.pid.

klogd - журнализация сообщений ядра

klogd читает сообщения ядра (либо через /proc/kmsg, либо с помощью системных вызовов), определяет уровень, преобразует адреса команд в имена программ и передает сообщение syslogd.

Параметры запуска:

  • -c уровень (сообщения данного уровня и менее серьезные будут передаваться syslog, а более серьезные - выводиться на консоль; по умолчанию - 7; 0 указывать нельзя)
  • -d (отладочный режим)
  • -f имя-файла (журнализовать в указанный файл вместо syslog)
  • -i (перезагрузить символы модулей в уже работающем klogd, необходимо использовать при каждой загрузке или выгрузке модуля; надеюсь, что текущие версии insmod, rmmod и modprobe делают это самостоятельно)
  • -I (перезагрузить символы ядра и модулей в уже работающем klogd)
  • -k имя-файла (использовать указанный файл как таблицу символов ядра вместо /boot/System.map)
  • -n (не уходить в фоновый режим; необходим для запуска из init)
  • -o (одноразовый режим - журнализовать все сообщения, скопившиеся в буфере ядра и завершить работу)
  • -p (на всякий случай перезагружать таблицу символов модулей в момент преобразования адресов - ядро может оказаться не в состоянии сделать это)
  • -s (использовать только системные вызовы и не обращаться к /proc/kmsg для получения исходных сообщений)
  • -v (показать версию и закончить работу)
  • -x (не преобразовывать адреса в имена)
  • -2 (сообщения аварийного завершения ядра - Oops! -выдаются дважды: до преобразования адресов в имена - для ksymoops - и после)

Уровни сообщений ядра (определяется по цифре в угловых скобках и преобразуется в уровень серьезности syslog, при выводе в файл не изменяется):

  • KERN_EMERG - 0 (system is unusable)
  • KERN_ALERT - 1 (action must be taken immediately)
  • KERN_CRIT - 2 (critical conditions)
  • KERN_ERR - 3 (error conditions)
  • KERN_WARNING - 4 (warning conditions)
  • KERN_NOTICE - 5 (normal but significant condition)
  • KERN_INFO - 6 (informational)
  • KERN_DEBUG - 7 (debug-level messages)

Реакция на сигналы:

  • SIGINT, SIGKILL, SIGTERM and SIGHUP - завершение работы
  • SIGTSTP - остановить журнализацию
  • SIGCONT - возобновить, возможно выбрав другой
  • источник сообщений (/proc/kmsg или системные вызовы)
  • SIGUSR1 - перезагрузить символы модулей
  • SIGUSR2 - перезагрузить символы ядра и модулей

Номер процесса хранится в /var/run/klogd.pid.

logger - утилита записи в журнал

logger - запись сообщения в журнал из командной строки (sh, bash и др.). Входит в состав пакета util-linux. Параметры:

  • [-i] (включать номер процесса в сообщение)
  • [-s] (дублировать сообщение на stderr)
  • [-f имя-файла] (сохранять сообщение в указанном файле)
  • [-p facility.level] (по умолчанию: user.notice)
  • [-t tag] (задать поле TAG)
  • [-u socket] (записывать в указанный сокет, вместо обращения к syslogd)
  • текст сообщения

syslog API

Инициализация записи в журнал: openlog - указывается стандартный префикс, добавляемый ко всем последующим сообщениям (обычно имя программы, номер процесса в квадратных скобках и двоеточие); источник и опции. closelog - завершить запись в журнал. syslog - запись в журнал (указывается источник, уровень серьезности и формат строки как в printf).

logrotate или "что делать со старыми журналами?"

logrotate (версия 3.2-1/3.3.2-1/3.5.9) - борьба с растущими журналами: ротация (создание версий), сжатие, удаление и отправка по почте. Запускается ежедневно cron-ом (/etc/cron.daily/logrotate) и позволяет обрабатывать журналы, если они превысили указанный размер или с указанным временным интервалом. Позволяет обрабатывать не только журналы syslog, но и любых других программ. Параметры:

  • [-d] (отладочный режим, реальных изменений не производится)
  • [-f] (производить изменения, даже если logrotate не видит необходимости - используется при изменениях в списке обрабатываемых журналов)
  • [-s имя-файла-состояния] (текущее состояние журналов хранится в этом файле между запусками, по умолчанию - /var/lib/logrotate.status)
  • имена-конфигурационных-файлов (имена через пробел; порядок имеет значение; если указано имя директории, то каждый файл в ней считается конфигурационным; в RH используется файл /etc/logrotate.conf и директория /etc/logrotate.d)

Конфигурационный файл определяет глобальные параметры (по одному на строке), задающие параметры по умолчанию для всех журналов. Для каждой серии обрабатываемых журналов задаются локальные параметры: указывается базовое имя файла, а затем в фигурных скобках локальные параметры по одному на строке. Имя файла может быть заключено в кавычки по правилам shell, если оно содержит пробелы и другие специальные символы. Можно указывать несколько имен файлов или шаблонов имен файлов через пробел (шаблоны также по правилам shell). Обработка каждой секции рассматривается как единое действие. Строки, начинающиеся с символа "#" являются комментраиями. Параметры, указанные в следующем конфигурационном файле перекрывают значение параметров, указанных в предыдущем файле. Локальные параметры имеют приоритет над глобальными. Порядок файлов в конфигурационной директории не определен.

Параметры:

  • compress | nocompress (старые версии сжимаются или не сжимаются с помощью gzip)
  • compresscmd (задает программу сжатия, по умолчанию - gzip)
  • uncompresscmd (задает программу разжатия, по умолчанию - ungzip)
  • compressext (задает суффикс для сжатых файлов)
  • compressoptions (задает параметры программы сжатия; по умолчанию - "-9", т.е. максимальное сжатие для gzip)
  • copytruncate | nocopytruncate (обычно старая версия переименовывается и создается новая версия журнала; при задании этого параметра logrotate копирует журнал в новый файл, а затем обрезает старый; используется, если программа, создающая журнал, не умеет его закрывать; теряются записи, сделанные в промежутке между копированием и обрезанием; а поможет ли, если создающая журнал программа вместо режима append просто пишет в файл, используя внутренний указатель?)
  • create [права-доступа владелец группа] | nocreate (сразу после переименования старой версии журнала и до вызова postrotate создается новый журнал с указанными атрибутами - права доступа задаются в восьмеричном виде, как в chmod.2; если атрибуты не указаны, то берутся от старого журнала)
  • daily (смена версий в серии происходит ежедневно)
  • delaycompress | nodelaycompress (некоторые программы не сразу закрывают журнал, в этом случае сжатие надо отложить до следующего цикла)
  • errors email (кому направлять сообщения об ошибках)
  • extension суффикс (задается суффикс, добавляемый к именам файлов при ротации перед суффиксом сжатия)
  • ifempty | notifempty (смена версий даже если файл пуст; действует по умолчанию)
  • include имя-файла | имя-директории (текстуально подставить файл или все файлы из указанной директории; не включаются поддиректории, специальные файлы и файлы с суффиксами из списка исключений; нельзя использовать внутри секции)
  • mail адрес | nomail (когда смена версий приводит к необходимости удалить старый журнал, то послать его по указанному адресу)
  • mailfirst (посылать не удаляемую версию журнала, а первую)
  • maillast (посылать удаляемую версию журнала; действует по умолчанию)
  • missingok | nomissingok (не посылать сообщения об ошибке, если журнал отсутствует)
  • monthly (смена версий происходит ежемесячно)
  • olddir директория | noolddir (во время смены версий журнал перемещается в указанную директорию; д.б. на том же физическом устройстве)
  • postrotate (все дальнейшие строчки до строки endscript исполняются как команды shell после процесса смены версии)
  • prerotate (все дальнейшие строчки до строки endscript исполняются перед процессом смены версии)
  • rotate число (сколько старых версий хранить; если 0, то ни одной)
  • size байт (смена версии происходит, если размер журнала превысил указанное число; можно использовать суффиксы "k" - килобайт - и "M" - мегабайт)
  • sharedscripts | nosharedscripts (выполнять команды prerotate и postrotate только один раз для всех файлов, описанных в секции)
  • tabooext [+] список-суффиксов (задание списка суффиксов-исключений для include; если указан знак "плюс", то дополнение, иначе замена; по умолчанию: .rpmorig, .rpmsave, .rpmnew, ",v", .swp и "~")
  • weekly (смена версий происходит еженедельно)

В поставке RH /etc/logrotate.conf описывает глобальные параметры и параметры для /var/log/wtmp и /var/log/lastlog и ссылается на директорию /etc/logrotate.d, в которую каждый пакет записывает локальные параметры для своих журналов.

logwatch или "как извлечь полезную информация из кучи мусора?"

logwatch представляет собой платформу (framework) для написания программ (называемых фильтрами) извлечения полезной информации из многочисленных, больших и разноформатных журналов (не только syslog). В "пакете" приходит несколько фильтров, рассчитанных на Red Hat Linux (какой-то древней версии, т.к. упоминается inetd вместо xinetd), но адаптировать их под конкретную ситуацию придется самому. Последнее изменение было внесено автором в сентябре 2000, так что дальнейшего развития можно уже не ждать.

Фильтры могут быть написаны на любом языке программирования, но автор пакета предпочитает perl. Фильтры должны быть написаны так, что читают данные с stdin и выводят результат на stdout. Перед вызовом фильтра устанавливаются переменные окружения: LOGWATCH_DATE_RANGE, LOGWATCH_DETAIL_LEVEL, LOGWATCH_TEMP_DIR, LOGWATCH_DEBUG. Основная программа также написана на perl: /etc/log.d/scripts/logwatch.pl (/etc/log.d/logwatch, /usr/sbin/logwatch и /etc/cron.daily/00-logwatch - это символьные ссылки на нее).

Директория /etc/log.d/conf/logfiles/ содержит конфигурационные файлы групп журналов, в которых хранятся записи обслуживаемых сервисов. Каждая группа описывается отдельным файлом имя-группы.conf, в котором задаются:

  • LogFile = имя файла, содержащего журнал, или шаблон имен; можно задавать несколько имен или шаблонов; имена м.б. относительно LogDir
  • Archive = имя файла, созданного logrotate архивной версии журнала, или шаблон имен; можно задавать несколько имен или шаблонов; имена м.б. относительно LogDir
  • имена фильтров (только по одному разу, хотя в показано другое!) из /etc/log.d/scripts/shared/ в виде
    *имя-фильтра = параметры, например, чтобы отфильтровать журнал по дате, если она записана в стандартном формате syslog, надо использовать строку:
    *ApplyStdDate =

Директория /etc/log.d/conf/services/ содержит конфигурационные файлы сервисов, чьи записи в журналах logwatch будет обрабатывать. Каждый сервис описывается отдельным файлом имя-сервиса.conf, в котором задаются:

  • LogFile = имя группы журналов
  • имена фильтров из /etc/log.d/scripts/shared/ в виде
    *имя-фильтра = параметры, запускаемых до фильтра сервиса
  • $имя-переменной окружения = значение

Директория /etc/log.d/scripts/logfiles/ содержит фильтры обработки групп журналов: при обработке группы журналов все файлы в директории /etc/log.d/scripts/logfiles/имя-группы используются как фильтры.

Директория /etc/log.d/scripts/services/ содержит фильтры обработки записей конкретных сервисов.

Директория /etc/log.d/scripts/shared/ содержит общие фильтры, используемые в конфигурационных файлах групп журналов:

  • applystddate - фильтрует журнал по требуемой дате, если он записан в формате syslog (здесь и в приватных фильтрах по дате навставлять LANG= перед вызовом date, а то Mar никак не совпадает с Мар ;)
  • expandrepeat - превращает строки "last message repeated" в соответствующее число строк с текстом сообщения из предыдущей строки
  • onlycontains - оставляет только те строки журнала, которые содержат указанную строку (я поставил кавычки вокруг "$*")
  • onlyservice - выделяет из журнала в формате syslog строки, относящиеся к указанному сервису (имя сервиса передается как параметр)
  • remove - оставляет только те строки журнала в формате syslog, которые не содержат указанную строку (я поставил кавычки вокруг "$*" и наделал remove1, remove2 и т.д. так как не понял как указать несколько подшаблонов для egrep в одной строке; кстати, параметры подставляются в shell, так что спецсимволы тоже нельзя использовать)
  • removeheaders - удаление стандартных полей (дата, время, имя хоста, этикетка сервиса и номер процесса)
  • removeservice - выделяет из журнала в формате syslog строки, не относящиеся к указанному сервису (имя сервиса передается как параметр)

Параметры по умолчанию хранятся в файле /etc/log.d/conf/logwatch.conf (/etc/log.d/logwatch.conf есть символьная ссылка на него), комментарии в котором позволяют понять смысл параметров:

  • LogDir - директория, относительно которой рассматриваются имена файлов
  • MailTo - кому отправлять отчет
  • Print - вместо посылки отчета по почте выдать его на stdout
  • Save - вместо посылки отчета по почте сохранит его в указанном файле
  • Archives - использовать версии журналов, созданных logrotate
  • Range - рассматриваемый временной интервал: All, Today, Yesterday (вчерашние календарные сутки)
  • Detail - уровень подробности отчета: от 0 до 10 или Low, Med, High
  • Service - All или имя фильтра из /etc/log.d/scripts/services/ (можно указывать несколько фильтров)
  • LogFile - All или имя группы журналов (можно указывать несколько групп)

Параметры запуска:

  • --detail уровень (уровень продробности отчета: high, med или low)
  • --logfile группа-журналов (обрабатывать только журналы данной группы; группа задается символическим именем в конфигурационном файле; можно задавать несколько групп)
  • --service имя-сервиса (обрабатывать только те записи в журналах, которые относятся к данному сервису; сервис задается символическим именем в конфигурационном файле; можно задавать несколько сервисов; имя All вызывает обработку записей для всех сервисов)
  • --print (выдавать отчет на stdout)
  • --mailto адрес (послать отчет по указанному адресу)
  • --save имя-файла (записать отчет в указанный файл)
  • --archives (обрабатывать не только текущие версии журналов, но и созданные logrotate старые копии)
  • --range интервал-дат (обрабатывать только те записи в журналах, которые относятся к данному интервалу времени: Yesterday, Today, All)

Основной способ использования состоит во включении файла 00-logwatch (начинается с "00", чтобы выполняться до logrotate) в директорию /etc/cron.daily, что вызывает ежедневное выполнение logwatch с параметрами по умолчанию.

К сожалению, все фильтры рассчитаны на то, что журналы записываются на том же хосте, на котором работает сервис.

Местные особенности

Все журналы ведутся на одном компьютере (если есть параноидальные наклонности, то можно записывать журналы сразу на двух серверах).

Соответствие между формальным именем источника и реальным устройством или программой:

  • local0 - Cisco
  • local3 - ftp (есть специальное имя источника, но Solaris 2.5 его не знает)
  • local4 - зарезервировано под учет
  • local5 - POP3/IMAP
  • local6 - tac_plus>
  • local7 - загрузка Linux

На сервере должен быть открыт экран для порта 514/udp (можно ограничить исходные адреса пакетов, но это поможет только от случайностей). Запуск syslogd (параметры в /etc/rc.d/init.d/syslog или /etc/sysconfig/syslog) должен быть с ключами "-r -m 0" (и еще "-x", если на этом же компьютере работает сервер DNS). Запуск klogd с ключами "-2 -c 1". Настройка syslog.conf:

  • *.crit - сообщения уровня серьезности CRIT и выше выдавать на терминалы и записывать в отдельный файл (chmod 600), свои сообщения посылать на запасной сервер; sendmail считает критическими сообщения о проблемах с приемом письма
  • kern - создать файл kern для сообщений всех уровней (chmod 600)
  • mail - создать файл mail для сообщений всех уровней (без синхронизации)
  • auth, authpriv - создать файл secure для сообщений всех уровней (chmod 600)
  • news - в директории news создать для каждого уровня серьезности отдельный файл (debug без синхронизации)
  • cron - создать файл cron для сообщений всех уровней (cron в RH 6.2 и Solaris 2.5 не умеют использовать syslog)
  • local0 - в директории cisco создать для каждого уровня серьезности отдельный файл (err и ниже без синхронизации)
  • local3 - в директории ftp создать для каждого уровня серьезности отдельный файл (info и debug без синхронизации)
  • local5 - создать файл imap.log для сообщений всех уровней
  • local6 - создать файл tac_plus.log для сообщений всех уровней
  • local7 - файл boot.log (сообщения при загрузке системы и запуске или остановке syslogd и klogd)
  • все сообщения уровня INFO и выше, не попавшие в один из определенных выше файлов, записывать в файл messages (chmod 600)

На клиентских компьютерах настраиваем syslog так, чтобы все сообщения передавались на сервер syslog, сообщения об ошибках дублировались в /var/log/syslog, сообщения о критическом состоянии дублировались на консоль, терминалы пользователей. На компьютерах с linux также сбрасывать в локальный файл сообщения о загрузке (local7, boot.log). Запасной сервер syslog должен принимать сообщения критического уровня из сети и записывать их в файл (дырка в экране, ключ запуска "-r").

logrotate: хранить вечно, менять версии по возможности реже (ежемесячно, кроме squid), сбрасывать в отдельные директории (кроме squid) и сжимать (в отложенном режиме, кроме ftpd, linuxconf, sendfax), ошибки и удаляемые файлы посылать мне. Привести в соответствие параметры для syslog.

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100