Последнее изменение файла: 2010.04.16
Скопировано с www.bog.pp.ru: 2012.02.04
Bog BOS: 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.
Для приема сообщений используется порт 514/UDP.
Рекомендуется также использовать исходный порт 514 для передачи сообщений.
Сообщение представляет собой текстовую строку и не может иметь длину более
1024 байт, в противном случае его разрешается обрезать или даже выбрасывать.
Даже неправильно сформированное сообщение, посланное на 514 порт,
должно рассматриваться как сообщение syslog. Однако, если релей передает
сообщение дальше, то он должен добавить к нему стандартные заголовки (при этом,
возможно обрезав его до 1024 байт) - USER, NOTICE, свое локальное время и
простое имя источника сообщения.
Сообщение начинается с поля PRI, которое в закодированном виде
содержит информацию об источнике сообщения (facility) и уровне серьезности
(Severity level)
сообщения. За ним записывается время (TIMESTAMP), пробел, имя или IP
адрес хоста в десятичной записи (HOSTNAME), пробел, произвольный текст сообщения
(MSG) в US-ASCII (0x20 - 0x7e).
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 осуществляет прием сообщений с порта 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.
Представляет собой набор правил маршрутизации сообщений.
Комментарии начинаются с символа '#'. Обратная косая черта в конце строки
означает продолжение правила на следующей строке.
Каждое правило состоит из селектора и действия, которые разделяются
табуляциями (в старых системах - Solaris 5) или пробелами (Linux).
Получив сообщение для записи в журнал (от klogd, от локальной или удаленной
программы), syslogd для каждого правила проверяет не подходит ли
сообщение под шаблон, определяемый селектором. Если подходит, то
выполняется указанное в правиле действие.
Для одного сообщения м.б. выполнено произвольное количество действий
(т.е. обработка сообщения не прекращается при первом успехе).
Селектор состоит из двух частей, разделенных точкой:
источник сообщения и уровень серьезности.
Прописные и строчные буквы не различаются.
Можно также использовать числа (см. /usr/include/syslog.h).
Кроме определенных в syslog(3) источников, можно указывать mark
(регулярные временные метки), security
(устаревший синоним для auth).
Кроме определенных в syslog.h уровней серьезности можно
использовать warn (синоним для warning), error
(синоним для err), panic (синоним для emerg).
Сообщения с уровнем, равным или выше указанного в селекторе,
и источником, равным указанному в селекторе, считается подходящим.
Звездочка перед точкой соответствует любому источнику
(кроме daemon и syslog!),
после точки - любому уровню.
Слово none после точки - никакому уровню для данного источника.
Можно указывать несколько источников в одном селекторе (через запятую).
В этом случае приоритет можно указывать только для последнего источника.
В одной строке можно указывать несколько селекторов через ';'.
Семантика не ясна: если использовать
позитивные селекторы, то выполняется логическое ИЛИ,
если негативные (none и восклицательный знак), то логическое
И.
В новом syslogd (linux)
перед уровнем можно поставить знак равенства - селектору будут
соответствовать только сообщения с указанным уровнем (но не с высшим);
восклицательный знак - не будут соответствовать сообщения с
уровнем равным или большим; восклицательный знак и равенство - не будут
соответствовать сообщения с уровнем, равным указанному.
В качестве действия можно указывать:
имя обычного файла (полный путь от корня), минус
перед именем отключает синхронизацию записи (ускорение на порядок и более!)
поименованные каналы - fifo (перед именем ставится
вертикальная черта), сам канал д.б. создан перед
запуском syslogd командой mkfifo
терминал или консоль (/dev/console)
@имя-хоста (передать сообщений для удаленной
журнализации)
список пользователей (через запятую), на терминалы которых будет послано
сообщение
звездочка для посылки сообщения на все терминалы (wall)
Включен в состав пакета 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.
rsyslog - это один из претендентов на замену "стандартного" сервера
sysklogd в Linux (может быть полностью с ним совместим).
Продвигается фирмой Red Hat (в частности, в RHEL5.2 (2.0.0) и Fedora 8 (1.19.6 и 2.0.2)
как вариант; в Fedora 10 (3.21.9) по умолчанию).
Имеется платная поддержка (Adiscon). Лицензия - GPLv3.
Работает под Linux (Red Hat, Debian, Ubuntu, OpenSUSE, Gentoo), FreeBSD, Solaris, AIX.
Среди улучшений:
возможность использовать TCP для передачи сообщений
возможность сжатия сообщений пи передаче
возможность шифрования и цифровой подписи при передаче сообщений (пакет rsyslog-gnutls)
аутентификация и авторизация с использованием Kerberos (пакет rsyslog-gssapi)
возможность обеспечения резервного сервера
возможность хранения журналов в БД (MySQL - пакет rsyslog-mysql,
Postgres - пакет rsyslog-pgsql, прочие СУБД - через libdbi)
возможность использовать RELP (надёжный протокол передачи, TCP не гарантирует доставки,
т.к. неизвестно какие сообщения - до 1000 - потерялись при разрыве соединения)
для передачи и приёма сообщений (пакет rsyslog-relp) и RFC 3195 при приёме
буферизация сообщений перед записью
фильтрация и обработка сообщений (включая регулярные выражения)
возможность посылки e-mail и запуска скриптов по фильтру
многозадачность и многопоточность
управление нагрузкой и приоритетами
Имеет модульную структуру (загрузка модулей производится директивой "$ModLoad имя-модуля"):
модули ввода - /usr/lib64/rsyslog/im*
imudp - приём сообщений с использованием обычного syslog протокола UDP
imuxsock - приём местных сообщений (logger) через сокет
imklog - приём сообщений ядра (klogd)
immark - отметки MARK
imfile - ввод сообщений из текстового файла
imtcp - приём сообщений с использованием протокола TCP
imrelp - приём сообщений с использованием протокола RELP
модули ? - /usr/lib64/rsyslog/lm*
lmnet
lmnetstrms
lmnsd_ptcp
lmregexp
lmtcpclt
lmtcpsrv
модули вывода -/usr/lib64/rsyslog/om*
omsnmp - посылка сообщений с помощью SNMP trap
ommail - посылка сообщений с помощью e-mail
omrelp - модуль передачи сообщений с помощью протокола RELP
ommysql - модуль записи сообщений в БД MySQL
ompgsql - модуль записи сообщений в БД PostgreSQL
omlibdbi - модуль записи сообщений в БД через libdbi (Firebird/Interbase,
MS SQL, Sybase, SQLLite, Ingres, Oracle)
Между модулем ввода (imtcp) и подлежащим транспортным уровнем можно
поместить драйвер потока (Network Stream Drivers), который обеспечивает
последовательность, аутентификацию и секретность:
ptcp - просто TCP, без шифрования и аутентификации
gtls - GnuTLS (режимы шифрования: 0 - без шифрования, 1 - TLS;
режимы аутентификации: anon, x509/fingerprint - проверка fingerprint,
x509/certvalid - проверка сертификата на корректность,
x509/name - проверка имени (Subject), в текущей реализации корневой CA должен быть одинаков)
-c версия (выбор режима совместимости; д.б. первым в строке;
-c0 или по умолчанию - совместимость с sysklogd; -c2 - rsyslogd 2)
-A (использовать все возможные пути посылки UDP-сообщений, может приводить к дублированию)
-4 (прослушивать только IPv4 порт)
-6 (прослушивать только IPv6 порт)
-a дополнительный-прослушиваемый-сокет
(версия 0 или 2; полезен для демонов, делающих chroot; может быть несколько)
-d (отладочный режим; не переходит в фоновый режим)
-f имя-конфигурационного-файла (по умолчанию, /etc/rsyslog.conf)
-h (версия 0 или 2; изменить обычное поведение, при котором сообщения, принятые от
удаленных хостов, не передаются дальше для записи на удаленном хосте
во избежание зацикливания)
-i pid-файл (/var/run/syslogd.pid)
-l список-хостов (список хостов, имена которых должны
записываться в простом виде, а не FQDN; разделяются двоеточием)
-m минут (версия 0 или 2;
интервал для регулярных временных записей; по
умолчанию - 20; если 0, то не делать вообще)
-n (не уходить в фоновый режим; необходим для запуска из init)
-N уровень (проверить правильность конфигурационного файла, 1 - обычная проверка)
-o (версия 2; не читать с /dev/log)
-p прослушиваемый-сокет (версия 0 или 2; по умолчанию: /dev/log)
-q (при сбоях DNS во время обработки ACL использовать имена хостов)
-Q (не разрешать DNS во время обработки ACL)
-r[порт] (версия 0 или 2; разрешить принимать UDP сообщения от
удаленных хостов)
-s список-доменов (обрезать из имен хостов имена указанных
доменов; разделяются двоеточием; по умолчанию обрезается домен, совпадающий
с доменом сервера syslog)
-t[порт] (версия 2; разрешить принимать TCP сообщения от
удаленных хостов)
-v (показать версию и закончить работу)
-w (не выводить предупреждения о получении сообщений от недоверенных хостов)
-x (запретить определять имя хоста по его адресу, предотвращает
deadlock при работе на одном хосте с сервером DNS)
Используемые файлы:
/etc/rsyslog.conf - конфигурационный файл (изменяется при запуске
параметром -f)
/dev/log - сокет, с которого читаются локальные сообщения
(изменяется при запуске параметром -p)
/var/run/syslogd.pid - идентификатор процесса
Реакция на сигналы:
SIGHUP - реинициализация (закрывает все файлы, читает заново файл
конфигурации, разрываются TCP соединения, сбрасываются хранящиеся в памяти очереди)
SIGTERM, SIGINT, SIGQUIT - завершение работы
SIGUSR1 - включить/выключить отладку (только при использовании ключа -d)
SIGCHLD - дождаться завершения порождённых процессов
В отличие от sysklogd синхронизация выключена по умолчанию.
Формат временных отметок при записи в файл по умолчанию изменён.
При передаче сообщений на удалённый сервер они предваряются именем хоста
(как это обрабатывается logwatch?!),
рекомендуется обеспечить совместимость следующим образом:
Принимаемые сообщения могут складываться в главную очередь сообщений
(MainMsg, параметры собираются по всему файлу настройки)
перед обработкой правил (есть и другие очереди перед каждым действием - Action,
отдельная очередь для каждого действия, параметры должны быть определены до описания действия).
Типы очередей (QueueType):
Direct - отсутствие очереди, позволяет вернуть статус выполнения, что обязательно
для работы логики резервирования сервера журналов
Disk - буферизация с использованием файлов, надёжно (требуется ручная работа), медленно;
можно задать шаблон имени файла (QueueFilename, WorkDirectory),
размер куска (QueueMaxFileSize), интервал сохранения (QueueCheckpointInterval)
LinkedList - очередь в памяти, быстро, не переживёт аварию;
реализована в виде связанного списка, динамическое выделение памяти
FixedArray - очередь в памяти, быстро, не переживёт аварию;
реализована в виде массива указателей, меньшее потребление CPU
очередь в памяти с файловой поддержкой (disk-assisted, DA);
LinkedList или FixedArray с заданием шаблона имени файла;
файловая очередь используется при необходимости (переполнение очереди в памяти или
выключение сервера) с учётом HighWatermark и LowWatermark
Количество потоков обработки очереди выбирается автоматически
в зависимости от заполнения очереди (QueueWorkerThreadMinimumMessages, QueueWorkerThreads).
Ненужные более потоки уничтожаются при истечении времени неактивности
(QueueWorkerTimeoutShutdown).
При катастрофическом переполнении очереди (QueueDiscardMark) менее приоритетные сообщения
(QueueDiscardSeverity) выкидываются.
При длительном переполнении очереди приём новых сообщений останавливается полностью
(QueueTimeoutEnqueue) и все входящие сообщения могут выкидываться.
Скорость обработки можно замедлять паузами между обработкой сообщений (QueueDequeueSlowdown).
Файл представляет собой набор общих директив, директив модулей
и правил маршрутизации сообщений.
Комментарии начинаются с символа '#'.
Обратная косая черта в конце строки означает продолжение правила на следующей строке.
Максимальная длина строки - 4KB.
Директивы начинаются с символа '$'.
Общие директивы (параметры, описывающие действие должны быть до активизации действия;
при задании размера можно использовать суффиксы: k, m, g, t (двоичные) и K, M, G, T (десятичные)):
$ActionExecOnlyWhenPreviousIsSuspended off|on (если для селектора определено несколько
действий, то следующее действие выполняется только, если предыдущее завершилось неуспешно,
так реализуется резервирование сервера)
$ActionExecOnlyOnceEveryInterval секунд (выполнять действия не чаще указанного,
полезно для ommail)
$ActionExecOnlyEveryNthTime число (обрабатывать только каждое n-ое сообщение)
$ActionExecOnlyEveryNthTimeTimeout секунд (сбрасывать счётчик n-ых сообщений, 0 - по умолчанию)
$ActionFileDefaultTemplate имя-шаблона (шаблон формата при записи в файл журнала,
шаблон RSYSLOG_TraditionalFileFormat совместимость со форматом журналов при записи в файл,
шаблон RSYSLOG_ForwardFormat задаёт новый формат при передаче сообщений на удалённый сервер)
$ActionFileEnableSync off|on (синхронизация при записи)
$ActionForwardDefaultTemplate имя-шаблона (шаблон формата при передаче по протоколам UDP и TCP)
$ActionGSSForwardDefaultTemplate имя-шаблона (шаблон формата при передаче по протоколу GSS-API)
параметры очереди действия:
$ActionQueueCheckpointInterval число-сообщений
$ActionQueueDequeueSlowdown микросекунд (0)
$ActionQueueDiscardMark число (9750)
$ActionQueueDiscardSeverity уровень-серьёзности (4, т.е. warning)
$AllowedSender список-допустимых-отправителей (по умолчанию - любой;
список разделяется запятыми; первым элементом должен быть "UDP" или "TCP или "";
сетевой адрес может сопровождаться "/длина-маски-сети";
в именах можно использовать шаблоны
$ControlCharacterEscapePrefix символ (\)
$DefaultNetstreamDriver ptcp|gtsl
$DefaultNetstreamDriverCAFile имя-файла-CA (в формате .pem)
$DefaultNetstreamDriverCertFile имя-файла-сертификата (в формате .pem)
$DefaultNetstreamDriverKeyFile имя-файла-частного-ключа (в формате .pem)
$DirCreateMode 0644
$DirGroup имя-группы (только для создаваемых каталогов)
$DirOwner имя-владельца (только для создаваемых каталогов)
$DropMsgsWithMaliciousDnsPTRRecords off|on
$DropTrailingLFOnReception on|off
$DynaFileCacheSize число (10, определяет число одновременно открытых файлов)
$EscapeControlCharactersOnReceive on|off (например, ^G преобразуется в "\007")
$ErrorMessagesToStderr on|off
$FailOnChownFailure on|off (не создавать файл, если обнаружены ошибки в $DirOwner/$FileOwner)
$FileCreateMode 0644 (зависит также от $umask)
$FileGroup имя-группы (только для создаваемых файлов)
$FileOwner имя-владельца (только для создаваемых файлов)
$IncludeConfig имя-включаемого-файла (допустимо вложение,
можно включать целый каталог/ или файлы по шаблону*)
параметры основной очереди:
$MainMsgQueueCheckpointInterval число-сообщений
$MainMsgQueueDequeueSlowdown микросекунд (0)
$MainMsgQueueDiscardMark число (9750)
$MainMsgQueueDiscardSeverity уровень-серьёзности (4, т.е. warning)
$MaxMessageSize размер (2k; UDP - до 4k; MS Windows Event Log - до 64k)
$ModDir каталог-модулей ('/' в конце имени)
$ModLoad имя-модуля (можно использовать полный путь или сокращённое имя, модуль
должен быть загружен до первой директивы его настройки)
$RepeatedMsgReduction on|off
$outchannel имя-канала,имя-файла,максимальный-размер,имя-скрипта-обработки-переполнения
(предполагалось вынести описание действия из правила маршрутизации
в отдельную директиву, работы не завершены и заброшены)
$ResetConfigVariables (полезен после $IncludeConfig, чтобы привести все значения по умолчанию)
$template имя-шаблона,описание-шаблона[,{sql|stdsql}]
(sql и sqlstd вызывает форматирование результата выполнения шаблона в вид, пригодный
для MySQL или стандартный SQL)
$WorkDirectory имя-рабочего-каталога (сюда пишутся файлы с очередью)
$umask маска
Директивы модуля imudp:
$UDPSeverAddress IP-адрес (по умолчанию прослушиваются все интерфейсы ("*"),
директив может быть несколько)
$UDPServerRun имя-или-номер-порта (514, обязательно после задания адреса,
директив может быть несколько)
Директивы модуля imtcp (возможно шифрование и аутентификация
с помощью stunnel, gtls или imgssapi):
$TCPSeverAddress IP-адрес (по умолчанию прослушиваются все интерфейсы ("*"),
директив может быть несколько, не реализовано)
$InputTCPServerRun имя-или-номер-порта (514, обязательно после задания адреса,
в будущем директив может быть несколько, а пока либо TLS для всех, либо никому)
$InputTCPMaxSessions число-одновременных-сессий
$InputTCPServerStreamDriverMode режим-шифрования
(зависит от драйвера потока ptcp или gtls)
$InputTCPServerStreamDriverAuthMode режим-аутентификации
(зависит от драйвера потока ptcp или gtls)
$InputTCPServerStreamDriverPermittedPeer список-допустимых-соседей
(можно использовать шаблоны, можно указывать несколько раз)
Директивы модуля imklog:
$KLogInternalMsgFacility источник-сообщения (kern; для собственных сообщений - запуск, останов)
$KLogPermitNonKernelFacility off|on
$DebugPrintKernelSymbols off|on
$klogSymbolLookup off|on (в ядре 2.6 преобразование символов производится самим ядром;
аналог "klogd -x")
$klogUseSyscallInterface off|on (использовать только системные вызовы
и не обращаться к /proc/kmsg для получения исходных сообщений; аналог "klogd -s")
$klogSymbolsTwice off|on (сообщения аварийного завершения ядра -
Oops! -выдаются дважды: до преобразования адресов в имена - для ksymoops - и после;
аналог "klogd -2")
Директивы модуля immark:
$MarkMessageInterval секунд (1800; 0 - никогда)
Директивы модуля imuxsock:
$AddUnixListenSocket имя-дополнительного-сокета
$InputUnixListenSocketIgnoreMsgTimestamp on|off
(временные отметки, полученные от приложения, игнорируются)
$InputUnixListenSocketFlowControl off|on
(блокировать сокет при переполнении очереди)
$InputUnixListenSocketHostName имя-хоста (будет записываться в сообщение)
$OmitLocalLogging off|on (не читать с системного сокета /dev/log)
$SystemLogFlowControl off|on
(блокировать системный сокет при переполнении очереди)
$SystemLogSocketIgnoreMsgTimestamp on|off
(временные отметки, полученные от приложения через системный сокет, игнорируются)
$SystemLogSocketName имя-системного-сокета
Директивы модуля imfile (каждая строка считается сообщением,
файл может быть динамически дополняться и подменяться (ротация),
можно мониторить до 100 файлов):
$InputFileName абсолютное-имя-файла
$InputFileTag метка-процесса (двоеточие необходимо указывать явно)
$InputFileStateFile имя-файла (в этом файле хранится текущая позиция в обрабатываемом файле,
хранится в рабочем каталоге, необходимо самостоятельно заботится об отсутсвии
многократного использования)
$InputFileFacility источник-сообщения (local0)
$InputFileSeverity уровень-серьёзности (botice)
$InputRunFileMonitor (активизация мониторинга с накопленными параметрами)
$InputFilePollInterval секунд (10; интервал опроса для всех файлов)
Директивы модуля imrelp
InputRELPServerRun номер-порта
Директивы модуля ommail (аутентификация SMTP не поддерживается,
вызывается в форме: ":ommail:;имя-шаблона-для-тела-письма", рекомендуется фильтровать
сообщения и использовать $ActionExecOnlyOnceEveryInterval):
$ActionMailSMTPServer имя-или-адрес (127.0.0.1)
$ActionMailSMTPPort имя-или-номер (25)
$ActionMailFrom адрес-отправителя
$ActionMailTo адрес-получателя (можно использовать несколько раз, сбрасывается?)
$ActionMailSubject имя-шаблона
$ActionMailEnableBody on|off
Директивы модуля omsnmp (версии протокола
SNMP - SNMPv1 и SNMPv2c, сообщение заворачивается в OCTED STRING,
вызывается в форме: ":omsnmp:"):
$actionsnmptrapoid идентификатор-OID ("1.3.6.1.4.1.19406.1.2.1", что означает
"ADISCON-MONITORWARE-MIB::syslogtrap"; только для SNMPv2c;
на стороне получателя должны быть установлены
ADISCON-MONITORWARE-MIB)
и ADISCON-MIB
$actionsnmpsyslogmessageoid идентификатор ("1.3.6.1.4.1.19406.1.1.2.1", что означает
"ADISCON-MONITORWARE-MIB::syslogMsg")
$actionsnmpenterpriseoid идентификатор ("1.3.6.1.4.1.3.1.1", что означает
"enterprises.cmu.1.1"; только для SNMPv1)
$actionsnmpspecifictype номер-trap (0; только для SNMPv1)
$actionsnmptraptype тип-trap (6, что означает SNMP_TRAP_ENTERPRISESPECIFIC; только для SNMPv1)
Директивы модуля ommysql
(при вызове ":ommysql:имя-сервера,имя-БД,имя-пользователя,пароль[;имя-шаблона]"
выполняется SELECT с подставленным значением шаблона):
$ActionOmmysqlServerPort номер-порта
Директивы модуля omlibdbi
(при вызове ":omlibdbi:[;имя-шаблона]" выполняется SELECT с подставленным значением шаблона):
$ActionLibdbiDriverDirectory имя-каталога
$ActionLibdbiDriver mysql|firebird|ingres|msql|Oracle|sqlite|sqlite3|freetds|pgsql
(freetds - для Microsoft SQL и Sybase)
$ActionLibdbiHost имя-хоста
$ActionLibdbiUserName имя-пользователя
$ActionlibdbiPassword пароль
$ActionlibdbiDBName имя-БД
Директивы модуля omrelp
(при вызове использовать :omrelp:имя-сервера:порт;имя-шаблона)
отсутствуют
Каждое правило маршрутизации состоит из селектора и действия,
которые разделяются табуляциями или пробелами.
Каждое сообщение из главной (входной) очереди проверяется селектором каждого правила.
Если подходит, то выполняется указанное в правиле действие.
Для одного сообщения м.б. выполнено произвольное количество действий
(т.е. обработка сообщения не прекращается при первом успехе).
Перед действием отфильтрованные сообщения преобразуются с использованием
шаблона вывода (либо шаблона по умолчанию, указанного в директиве,
либо явно указанного по имени через точку с запятой после описания действия).
Шаблон также может использоваться для генерации самого текста действия
с указанием символа '?' перед именем шаблона.
Шаблон должен быть определён до использования, иначе селектор будет проигнорирован.
Встроенные шаблоны:
RSYSLOG_TraditionalFileFormat - традиционный формат журнала для записи в файл
RSYSLOG_FileFormat - традиционный формат журнала,
с добавлением долей секунды и зоны
RSYSLOG_TraditionalForwardFormat - традиционный формат журнала для передачи на удалённый сервер
RSYSLOG_ForwardFormat - традиционный формат журнала для передачи
с добавлением долей секунды и зоны
RSYSLOG_SyslogProtocol23Format - формат, определённый в проекте стандарта IETF
ietf-syslog-protocol-23
Описание шаблона заключается в кавычки.
Обратная косая черта обеспечивает специальное действие следующего символа вида \7 или \n.
Текст описания шаблона выводится в результат как есть, кроме переменных (property replacer),
заключённых в знаки процента. Внутри знаков процента после имени переменной
могут идти начальная и конечная позиция и опции, разделённый двоеточиями.
Имена переменных:
msg - тело сообщения
hostname - имя хоста из сообщения
fromhost - имя хоста, от которого пришло сообщения
fromhost-ip - адрес хоста, от которого пришло сообщения (127.0.0.1 для местных источников)
syslogtag - имя и номер процесса (" exim[16895]:"),
который выдал сообщение (извлекается из сообщения)
programname - имя процесса, который выдал сообщение (извлекается из сообщения)
pri - источник и приоритет, в виде числа
pri-text - декодированные источник и уровень (syslog.info)
syslogfacility - источник в виде числа
syslogfacility-text - декодированный источник ("local7")
syslogseverity - уровень в виде числа
syslogseverity-text - декодированный уровень ("debug")
timegenerated - время получения сообщения (с высоким разрешением)
timereported - время, извлечённое из сообщения
inputname - имя входного модуля
$now, $year, $month, $day - текущая дата в формате YYYY-MM-DD
$hour, $minute - текущее время
$myhostname - имя хоста обработки
Простейший шаблон для использования с модулем ommysql
(однако, рекомендуется использовать встроенную схему, совместимую с
phpLogCon, createDB.sql):
"insert into syslog(message) values ('%msg%')"
Использование начальной и конечной позиции позволяет выделять подстроку.
Нумерация символов начинается с 1. Символ "$" означает конец строки.
Если в качестве начальной позиции указать символ "R", то конечная позиция должна содержать
регулярное выражение. В конце регулярного выражения необходимо дописать "--end".
Имеются модификаторы типа регулярного выражения и что делать при отсутствии совпадения,
подробности в документации (property_replacer.html).
Если в качестве начальной позиции указать символ "F", то конечная позиция должна содержать
номер требуемого поля (нумеруются с 1, разделителем по умолчанию является символ табуляции,
можно изменить указав после символа "F" запятую и десятичное значение символя-разделителя.
Тема UNICODE не раскрыта.
Опции позволяеь форматировать результат обработки шаблона специальным образом
(можно указать несколько опций, разделяя их запятыми):
uppercase - преобразование к строчным символам (?!)
lowercase - преобразование к прописным символам
drop-last-lf - удалить последний LF
date-mysql - преобразовть в формат даты MySQL
date-rfc3164 - преобразовать в формат даты RFC 3164
date-rfc3339 - преобразовать в формат даты RFC 3339
date-subseconds - выделить только доли секунды
escape-cc - заменить управляющие символы строками вида "#009"
space-cc - заменить управляющие символы пробелами
drop-cc - удалить управляющие символы
Селектор состоит из двух частей, разделенных точкой:
источник сообщения и уровень серьезности.
Прописные и строчные буквы не различаются.
Можно также использовать числа (см. /usr/include/rsyslog.h).
В качестве источников, можно указывать фuth, authpriv, cron, daemon,
kern, lpr, mail, news, syslog, user, uucp, mark (регулярные временные метки),
security (устаревший синоним для auth) и от local0 до local7.
В качестве уровней серьезности можно
использовать debug, info, notice, warning, warn (синоним для warning),
err, error (синоним для err), crit, alert, emerg, panic (синоним для emerg).
Сообщения с уровнем, равным или выше указанного в селекторе,
и источником, равным указанному в селекторе, считается подходящим.
Звездочка перед точкой соответствует любому источнику, после точки - любому уровню.
Перед уровнем можно поставить знак равенства - селектору будут
соответствовать только сообщения с указанным уровнем (но не с высшим);
восклицательный знак - не будут соответствовать сообщения с
уровнем равным или большим; восклицательный знак и равенство - не будут
соответствовать сообщения с уровнем, равным указанному.
Можно использовать слово none после точки - селектору не будут
соответствовать сообщения никакого уровня для данного источника.
Можно указывать несколько источников в одном селекторе (через запятую).
В этом случае приоритет можно указать только для последнего источника.
В одной строке можно указывать несколько селекторов через ';'.
Семантика не ясна (не описана): если использовать
позитивные селекторы, то выполняется логическое ИЛИ,
если негативные (none и восклицательный знак), то логическое
И.
В качестве действия можно указывать:
имя обычного файла (полный путь от корня), минус
перед именем отключает синхронизацию записи (ускорение на порядок и более!)
поименованные каналы - fifo (перед именем ставится
вертикальная черта), сам канал д.б. создан перед
запуском syslogd командой mkfifo
терминал или консоль (/dev/console)
@имя-хоста[:порт] (передать сообщений для удаленной журнализации с использовнием UDP)
@@[(модификаторы)]имя-хоста[:порт]
(передать сообщений для удаленной журнализации
с использовнием TCP; модификаторы:
zцифра (сжатие, каждое сообщение сжимается отдельно, так что пользы немного)
o (разделители между сообщениями в соответсвии с draft syslog-transport-tls-06)
список пользователей (через запятую), на терминалы которых будет послано
сообщение (не e-mail!)
звездочка для посылки сообщения на все терминалы (wall)
:имя-модуля-вывода:параметры-модуля[;имя-шаблона] (описание возможностей
конкретных модулей вывода описана выше; для модуля MySQL имеется устаревший формат
('>' в начале строки))
символ '~' (сообщение будет удалено, т.е. не попадёт на вход следующему селектору)
$имя-канала (канал должен быть описан предварительно)
^имя-программы;имя-шаблона (результат обработки сообщения по шаблону
передаётся в качестве первого параметра; rsyslog дожидается завершения выполнения)
Правила маршрутизации могут быть выделены в блоки,
предварительно отфильтровывающие неподходящие сообщения на основе
имени выдавшей сообщения программы и имени хоста, для этого в качестве селектора указывается
(мутно описано и реализовано, не советую использовать):
!имя-программы (обрабатываются только сообщения,
имеющие в тексте сообщения указанное имя программы;
как это отличают от "!источник.уровень-серьёзности"?)
-имя-программы (обрабатываются только те сообщения, которые не имеют
в тексте сообщения указанное имя программы)
!* (конец блока по имени программы)
+имя-хоста (обрабатываются только сообщения, полученные с указанного хоста;
а proxy?)
-имя-хоста (обрабатываются только сообщения, полученные не с указанного хоста;
как отличить от имени программы?)
+@ (обрабатываются только местные сообщения)
+* (конец блока по имени хоста)
В качестве селектора можно использовать значения
переменных (property) в следующем формате:
:имя-переменной,[!]{contains|isequal|startswith|regex},"строка"
Прописные и строчные буквы различаются.
Обратная косая черта маскирует последующий символ (в текущей реализации - '"' и '\').
В качестве селектора можно использовать выражения
на бестиповом скриптовом языке RainerScript (Rainer - фамилия разработчика rsyslog)
с использованием логических (not, and, or), арифметических (*, /, %, +, -)
и строковых (contains, contains_i, startswith, startswith_i, &) операций, а также сравнений
(==, !=, <>, <, >, <=, >=) с учётом приоритетов и скобок
в следующем формате:
if выражение then действие
Значения переменных извлекаются использованием символа '$',
за которым указывается имя переменной.
Специальный селектор '&' повторяет действие предыдущего селектора.
Жаль, что авторы не уделили времени проектированию перед началом реализации,
а исходили из списка пожеланий пользователей.
При разборе файла конфигурации syslogd сравнивает адрес
loghost (определяется в /etc/hosts, не через DNS) с адресом своего
компьютера и при совпадении определяет переменную LOGHOST.
После этого syslog.conf пропускается через макропроцесссор m4(1).
В основном, это используется для того, чтобы один и тот же
конфигурационный файл можно было использовать на
клиентских и серверном (с точки зрения syslog) хостах.
Процедура запуска и остановки:
/etc/init.d/syslog (ссылки на нее из директорий
/etc/rc?.d). Номер процесса хранится в /etc/syslog.pid.
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 или системные вызовы)
Инициализация записи в журнал: openlog - указывается
стандартный префикс, добавляемый ко всем последующим сообщениям (обычно имя
программы, номер процесса в квадратных скобках и
двоеточие); источник и опции. closelog -
завершить запись в журнал. syslog - запись в журнал
(указывается источник, уровень серьезности и формат строки как в printf).
logrotate (версия 3.2-1/3.3.2-1/3.5.9/3.6.9/3.7.1) -
борьба с растущими
журналами: ротация (создание версий), сжатие, удаление и отправка по почте.
Запускается ежедневно cron-ом (/etc/cron.daily/logrotate) и позволяет
обрабатывать журналы, если они превысили указанный размер или с указанным
временным интервалом. Позволяет обрабатывать не только журналы syslog, но
и любых других программ.
Параметры:
[-d] (отладочный режим, реальных изменений не производится)
[-f] (производить изменения,
даже если logrotate не видит необходимости -
используется при изменениях в списке обрабатываемых журналов)
[-s имя-файла-состояния] (текущее состояние журналов
хранится в этом файле между
запусками, по умолчанию - /var/lib/logrotate.status)
[-m имя-почтовой-программы] ("/bin/mail -s"; на вход
ей подаётся текст письма, первый параметр - тема письма, второй -
получатель)
имена-конфигурационных-файлов
(имена через пробел;
порядок имеет значение;
если указано имя директории, то каждый файл в ней считается конфигурационным;
в 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 представляет собой платформу (framework) для
написания программ (называемых фильтрами) извлечения полезной информации
из многочисленных,
больших и разноформатных журналов (не только syslog).
Фильтры могут быть написаны на любом языке программирования,
но автор пакета предпочитает 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 - это символьные ссылки на нее).
Старая версия logwatch размещает настроечные файлы в каталоге /etc/log.d/,
новая - в /usr/share/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 есть символьная ссылка на него) или
/etc/logwatch/conf/logwatch.conf (/usr/share/logwatch/default.conf/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 с параметрами по умолчанию.
К сожалению, все фильтры рассчитаны на то, что журналы
записываются на том же хосте, на котором работает сервис.
На сервере должен быть открыт экран для порта 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 и ниже без синхронизации)
local1 - в директории bind создать для каждого уровня серьезности
отдельный файл (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.
Настроить /etc/logwatch/scripts и /usr/share/logwatch/.
syslog-ng (маршрутизация сообщения в зависимости от источника, текста сообщения, использование TCP; генерация имени журнала в зависимости от даты, сжатие, шифрование; выдача журнала на stdin запускаемой программы и много других полезных вещей)
nsyslogd (TCP, SSL, libwrap, фильтрация по тексту сообщения, проблемы с linux)