====== Мониторинг системы при помощи logwatch ======
Источник - http://www.ashep.org/2012/monitoring-sistemy-pri-pomoshhi-logwatch/
Другие материалы по теме:
* http://www.linux-mag.com/id/7800/ | http://compiling.ru/solutions/logwatch/
* http://wiki.enchtex.info/tools/system/logwatch
* http://pm4u.narod.ru/logwatch.htm
----
Удобную штуку всё таки придумали — лог-файлы. Всегда можно «вернуться в прошлое» и отыскать нужное событие. Особенно полезными лог-файлы оказываются при всякого рода расследованиях: причин нестабильности работы какого-нибудь демона или даже попыток несанкционированного проникновения в систему. Однако частенько бывает так, что «курить логи» администратор начинает уже слишком поздно, когда система пришла в нерабочее состояние. А ведь в большинстве случаев неприятному событию предшествует громкое «кричание» системы в лог-файлах, на которое если вовремя среагировать, можно много чего предотвратить. Конечно же, ежедневное рассматривание содержимого лог-файлов системы — занятие нереальное и глупое, особенно если объёмы логов составляют не пять строчек, да и что нам, время девать некуда? В сегодняшней заметке речь пойдёт об известной многим администраторам автоматическом просмотрщике логов **logwatch**.
Задачей **logwatch** является избавить вас от необходимости создавать велосипеды в области автоматического анализа лог-файлов. Являясь модульной по своей архитектуре, утилита предоставляет вам возможность легко (если знаете Perl) расширять перечень анализируемых типов лог-файлов. Перечень же типов лог-файлов, которые **logwatch** умеет анализировать «из коробки», впечатляет: начиная от ///var/log/messages// и заканчивая логами CISCO-оборудования. Результаты анализа утилита группирует и помещает в отчёт, который может как выводиться в //stdout//, так и отправляться электронной почтой. Формат отчёта предлагается в двух вариантах: plaintext или HTML, при этом вы можете регулировать уровень детализации отчёта исходя из собственных потребностей.
===== Установка =====
Установить утилиту можно либо из [[http://sourceforge.net/projects/logwatch/files/|исходников]], либо же пользуясь штатным менеджером пакетов, благо **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
Удачного вам анализа!