Анализатор сообщений logwatch.

Многие пользователи начинают решать проблемы возникающие в системе когда они уже мешают работе. Часто (особенно у Windows пользователей) это "лечится" новой установкой системы - а ведь как говорится "болезнь легче предупредить, чем лечить".Любое хорошее программное обеспечение сообщает о пользователю проблемах в своей работе, не только в диалогах сообщений об ошибках, но и сохраняет их в журналы или логи. Регулярный просмотр и анализ сообщений в журналах позволит вам обнаружить многие проблемы до их серьезных проявлений, а также поможет вам лучше узнать вашу систему. В linux журналы обычно хранятся в директории /var/log. Для просмотра логов в Ubuntu используйте программу просмотра системных журналов:

#sudo gnome-system-log

Запуск с правами суперпользователя нужен для просмотра тех логов которые не доступны обычному пользователю. Информации много - очень много, с непривычки тяжело :) . Просмотр журналов можно "автоматизировать" с помощью таких программ как grep, find, awk и т.п.. Что бы получать информацию которая нам действительно необходима мы можем писать скрипты обработки информации из журналов или использовать специальные программы. Одна из них, это logwatch. В Ubuntu установка как обычно проста, до безобразия:

#sudo apt-get install logwatch

Logwatch представляет из себя простой в настройке и расширении анализатор сообщений, записываемых системой и программами в log файлы. По умолчанию он ежедневно запускается планировщиком заданий Cron, просматривает указанные файлы и генерирует отчёты. Отчёты направляются администратору системы по почте или выводятся на консоль. Запуск программы в консоле:

#logwatch

В зависимости от ваших настроек, дистрибутива и установленых программ вы после некоторой паузы получите результат. По умолчанию программа обрабатывает логи за предыдущий день. Изменить эту настройку можно параметром range, например:

#logwatch --range Today

будет выведен отчет по анализу журналов за сегодняшний день. Что бы вывести все сообщения связаные с авторизацией в системе выполните:

#logwatch --range All --service secure

Для получения подробной информации, как обычно используйте команду man, а теперь давайте посмотрим как можно настроить программу под свои нужды.

Logwatch представляет собой набор perl скриптов (называемых фильтрами). Основные скрипты располагаются в каталоге /usr/share/logwatch. При необходимости настройки или внесений изменений в скрипты, необходимо скопировать нужные файлы в каталог /etc/logwatch с сохранением вложенной структуры каталогов. Фильтры должны быть написаны так, что читают данные с stdin и выводят результат на stdout.

Меня не нравились выводимые сообщения в конце отчета (из пакета fortune). Поэтому для начала я отключил этот скрипт. Введем в консоле:

#sudo echo "Service = -zz-fortune">> /etc/logwatch/conf/logwatch.conf

что приведет к созданию вашего файла настроек logwatch и добавлению в него строчки "Service = -zz-fortune" которая и отключит не нужный нам скрипт zz-fortune.

Если у вас в отчет попадают безвредные сообщения, не распознанные модулями Logwatch, то в /etc/logwatch/conf/ignore.conf можно прописать набор регулярных выражений, которые будут отфильтровывать лишние строки. При настройке этого фильтра следует соблюдать осторожность, чтобы не заблокировать оповещение о важных событиях в системе. У меня отчеты "засорялись" сообщениями https://bugs.launchpad.net/indicator-applet/+bug/346513. Я создал файл /etc/logwatch/conf/ignore.conf и добавил строчку "dbus-daemon: Rejected send message", и в секции отчета secure-log вместо нескольких X сообщений выводится "X Ignored Lines".

Далее я захотел добавить новую секцию с отчетом по использованию интернета. У меня стоит vnstat — простая утилита подсчета сетевого трафика, и я захотел ежедневно получать статистику в отчете (на предмет проверки аномальной сетевой активности). Задача не требует обработки логов и сводится только к записи вывода команды "vnstat" в отчет. Я не знаю perl и поэтому решил просто изменить существующий скрипт из пакета zz-disk_space (выводит в отчет информацию о использовании дисков в системе). Сначала скопировал файл настроек:

#sudo cp /usr/share/logwatch/default.conf/services/zz-disk_space.conf /etc/logwatch/conf/services/aa-vnstat.conf

и отредактировав привел его к виду

Title = "vnstat"

LogFile = NONE

$vnstat_options = "-q"

где $vnstat_options - параметр команды который мы будем передавать скрипту. Далее скопировал сам скрипт:

#sudo cp /usr/share/logwatch/scripts/services/zz-disk_space.conf /etc/logwatch/scripts/services/aa-vnstat.conf

и привел его к следующему виду:

#!/usr/bin/perl

$| = 1;

use POSIX qw(uname);

my (%Config);

$ENV{PRINTING} = "y";

my $Debug = $ENV{'LOGWATCH_DEBUG'} || 0;

my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;

my $logwatch_hostname = $ENV{'LOGWATCH_ONLY_HOSTNAME'};

my $vnstat_options;

my $vnstat_cmd;

my ($OSname, $hostname, $release, $version, $machine) = POSIX::uname();

$hostname =~ s/\..*//;

exit (0) if ($ENV{'LOGWATCH_ONLY_HOSTNAME'} and ($logwatch_hostname ne $hostname));

$vnstat_options = "-q";

if ( $ENV{'vnstat_options'} ) {

$vnstat_options = $ENV{'vnstat_options'};

};

system("vnstat $vnstat_cmd");

print "\n";

Теперь проверим выполнение скрипта

#logwatch --service aa-vnstat --debug 10

Параметр --debug указывает что нужно выводить отладочные сообщения с указанной детализацией (от 0 до 100) - полезная

штука что бы узнать логику выполнения logwatch и отладить ваш скрипт. Если вы хотите продолжить изучение этого замечательного инструмента советую изучить содержимое директорий /usr/share/logwatch и /usr/share/doc/logwatch.

Кстати скрипты можно писать на любом вашем любимом языке, главное что бы он выполнялся в вашей системе :).



Сайт создан в системе uCoz