Удобную штуку всё таки придумали — лог-файлы. Всегда можно «вернуться в прошлое» и отыскать нужное событие. Особенно полезными лог-файлы оказываются при всякого рода расследованиях: причин нестабильности работы какого-нибудь демона или даже попыток несанкционированного проникновения в систему. Однако частенько бывает так, что «курить логи» администратор начинает уже слишком поздно, когда система пришла в нерабочее состояние. А ведь в большинстве случаев неприятному событию предшествует громкое «кричание» системы в лог-файлах, на которое если вовремя среагировать, можно много чего предотвратить. Конечно же, ежедневное рассматривание содержимого лог-файлов системы — занятие нереальное и глупое, особенно если объёмы логов составляют не пять строчек, да и что нам, время девать некуда? В сегодняшней заметке речь пойдёт об известной многим администраторам автоматическом просмотрщике логов logwatch.
Задачей logwatch является избавить вас от необходимости создавать велосипеды в области автоматического анализа лог-файлов. Являясь модульной по своей архитектуре, утилита предоставляет вам возможность легко (если знаете Perl) расширять перечень анализируемых типов лог-файлов. Перечень же типов лог-файлов, которые logwatch умеет анализировать «из коробки», впечатляет: начиная от /var/log/messages и заканчивая логами CISCO-оборудования. Результаты анализа утилита группирует и помещает в отчёт, который может как выводиться в stdout, так и отправляться электронной почтой. Формат отчёта предлагается в двух вариантах: plaintext или HTML, при этом вы можете регулировать уровень детализации отчёта исходя из собственных потребностей.
Установка
Установить утилиту можно либо из исходников, либо же пользуясь штатным менеджером пакетов, благо logwatch присутствует в репозиториях всех популярных дистрибутивов. В Ubuntu/Debian утилита легко устанавливается командой:
# apt-get install logwatch
В процессе установки из пакета в Debian/Ubuntu logwatch автоматически не создаёт нужного ей для хранения временных файлов каталога /var/cache/logwatch, и вам необходимо сделать это самостоятельно:
# mkdir /var/cache/logwatch
Файлы конфигурации logwatch по умолчанию находятся в /usr/share/logwatch, и если вы намерены редактировать какой-либо из них, то делать это нужно не с оригинальным файлом, а с его копии, размещённой в каталоге /etc/logwatch.
Настройка
Основной файл конфигурации logwatch находится в/usr/share/logwatch/default.conf/logwatch.conf и прежде, чем редактировать, скопируйте его:
# cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
Файл logwatch.conf очень хорошо само-документирован и настолько прост, что у вас не должно быть сложностей с его исправлением. Среди опций, обычно затрагиваемых при конфигурации, можно отметить следующие:
- LogDir — путь к каталогу, в котором программа будет искать файлы, обычно это /var/log;
- TmpDir — путь к каталогу, в котором утилита будет размещать временные файлы. По умолчанию это /var/cache/logwatch, который мы с вами создали ранее;
- Output — указывает программе метод вывода отчёта. Может быть: stdout (в поток стандартного вывода), mail (почтовым сообщением) или file (в файл);
- Format — определяет формат отчёта. Может иметь значение text или html;
- MailTo — определяет адрес получателя отчёта, если Output = mail;
- MailFrom — определяет адрес отправителя отчёта, если Output = mail;
- Filename — задаёт путь к файлу отчёта, если Ouput = file;
- Archives — используется для указания утилите необходимости анализа не только текущих лог-файлов, но и архивных (например messages.1, messages.2.gz и т. п.). Принимает значения Yes или No;
- Range — за какой период времени отбирать анализируемые сообщения: All, Today илиYesterday;
- Detail — определяет уровень детализации отчёта. Может принимать как числовые значения от 0 (минимум детализации) до 10 (максимум). Также можно использовать синонимы: Low,Med и High, которые соответственно равны числовым 0, 5 и 10;
- Service — этот параметр указывает программе имя службы, логи которой необходимо анализировать. Может иметь значение All или имя службы (имя файла из каталога/usr/share/logwatch/scripts/services/). Если необходимо анализировать логи более одной службы, но не всех, то опцию Service следует определить несколько раз с указанием имён нужных служб, по одной за раз. Если же необходимо анализировать лог-файлы всех служб, кроме некоторых, то необходимо сначала определить Service = All, а затем перечислить мена ненужных служб, предварив их знаком «минус», например: Service = «-zz-network»;
Настраиваемые параметры анализатора для каждой службы можно найти в/usr/share/logwatch/default.conf/services, а пути размещения лог-файлов каждой службы — в /usr/share/logwatch/default.conf/logfiles. Обычно значений параметров, определённых в этих файлах, достаточно для корректной работы, если в вашей системе все файлы хранятся в каталогах по умолчанию и имеют стандартные имена. Если же у вас в системе некоторые файлы расположены в специфических местах, то вам следует указать logwatch, где их искать. Рассмотрим на примере лог-файлов Apache, конфигурация для которого расположена в файле /usr/share/logwatch/default.conf/logfiles/http:
########################################################
# Define log file group for httpd
########################################################
# What actual file? Defaults to LogPath if not absolute path....
LogFile = httpd/*access_log
LogFile = apache/*access.log.1
LogFile = apache/*access.log
LogFile = apache2/*access.log.1
LogFile = apache2/*access.log
LogFile = apache2/*access_log
LogFile = apache-ssl/*access.log.1
LogFile = apache-ssl/*access.log
# If the archives are searched, here is one or more line
# (optionally containing wildcards) that tell where they are...
#If you use a "-" in naming add that as well -mgt
Archive = archiv/httpd/*access_log.*
Archive = httpd/*access_log.*
Archive = apache/*access.log.*.gz
Archive = apache2/*access.log.*.gz
Archive = apache2/*access_log.*.gz
Archive = apache-ssl/*access.log.*.gz
# Expand the repeats (actually just removes them now)
*ExpandRepeats
# Keep only the lines in the proper date range...
*ApplyhttpDate
Как видим, logwatch использует опцию LogFile для определения маски имён лог-файлов, и опцию Archive — для маски архивов. Обратите внимание, что маски файлов указываются относительно каталога, определённого в опции LogDir основного файла конфигурации. Допустим, у вас есть отдельный каталог для хранения логов Apache, скажем, для отдельного домена. В этом случае необходимо скопировать файл /usr/share/logwatch/default.conf/logfiles/http.conf в /etc/logwatch/conf/logfiles и добавить в него несколько строк:
LogFile = apache2/mydomain.com/access.log
LogFile = apache2/mydomain.com/access.log.1
Archive = apache2/mydomain.com/access.log.*.gz
Запуск
После того, как файлы конфигурации готовы и проверены, достаточно лишь запустить утилиту:
# logwatch
и приступить к анализу полученной информации. Естественно, анализом лог-файлов стоит заниматься как можно чаще, поэтому обычно запуск logwatch осуществляют по расписанию, а многие дистрибутивы автоматически добавляют запуск logwatch в ежедневное расписание планировщика. Например, в Ubuntu/Debian:
$ ls -l /etc/cron.daily/*logwatch*
-rwxr-xr-x 1 root root 268 Mar 4 2011 /etc/cron.daily/00logwatch