====== Мониторинг системы при помощи 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 Удачного вам анализа!