Удобную штуку всё таки придумали — лог-файлы. Всегда можно «вернуться в прошлое» и отыскать нужное событие. Особенно полезными лог-файлы оказываются при всякого рода расследованиях: причин нестабильности работы какого-нибудь демона или даже попыток несанкционированного проникновения в систему. Однако частенько бывает так, что «курить логи» администратор начинает уже слишком поздно, когда система пришла в нерабочее состояние. А ведь в большинстве случаев неприятному событию предшествует громкое «кричание» системы в лог-файлах, на которое если вовремя среагировать, можно много чего предотвратить. Конечно же, ежедневное рассматривание содержимого лог-файлов системы — занятие нереальное и глупое, особенно если объёмы логов составляют не пять строчек, да и что нам, время девать некуда? В сегодняшней заметке речь пойдёт об известной многим администраторам автоматическом просмотрщике логов 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
Удачного вам анализа!