Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Изучение Linux.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
2.5 Mб
Скачать

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

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 с параметрами по умолчанию.

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