Чтобы не заглядывать постоянно в логи для выявления ошибок, используются специальные утилиты которые облегчают жизнь системного администратора. Эти утилиты анализируют лог файлы операционной системы и отправляют по почте отчет ИТ-специалисту. Если у вас почтовый сервер начал рассылать спам или СУБД MySQL сыпет неизвестными ошибками, вы это легко узнаете прочтя отчет отправленный вам от анализатора логов.
В этой записке будет установлен анализатор логов logwatch. Желательно ставить его сразу после настройки нового сервер на Linux, причем в обязательном порядке. Лучше быть в курсе о происходящем, чем потом кусать локти. В интернете есть статья, где анализатор помог выявить аномальные действия на сервере вроде скрытой установки софта. Так что, держите руку на пульсе, читайте каждый день его отчет.
Анализаторы это первый рубеж, второй рубеж это Централизованное хранение логов (rsyslog) и их анализ. Хотя есть проверенное решение в виде связки Logstash + ElasticSearch + Kibana.
Про этот анализатор я знаю уже давно с 2012 года. Он помогал мониторить логи Linux серверов. На данный момент опять возникла необходимость, и я вспомнил про добрый logwatch.
Входные данные:
- Сервер CentOS 7 на котором установлен некий софт, допустим Asterisk
- Электронный почтовый ящик системного администратора "admin@yandex.ru"
- Электронный ящик для отсылки отчета "report@yandex.ru"
Задача:
- Установить и настроить logwatch, чтобы он отсылал каждую ночь отчет на ящик "admin@yandex.ru"
- Отсылка тестового отчета, чтобы убедиться в правильности настроек logwatch.
- Использовать специальный ящик "report@yandex.ru" для отправки отчетов на ящик админа "admin@yandex.ru"
1. Установка logwatch
# wget https://sourceforge.net/projects/logwatch/files/logwatch-7.4.1/logwatch-7.4.1-1.noarch.rpm
# rpm -Uvh logwatch-7.4.1-1.noarch.rpm
2. Настройка logwatch
# vi /usr/share/logwatch/default.conf/logwatch.conf
MailTo = admin@yandex.ru
MailFrom = report@yandex.ru
Detail = High
mailer = "/usr/sbin/ssmtp -s admin@yandex.ru"
По умолчанию logwatch мониторит все сервисы которые расположены в каталоге /usr/share/logwatch/scripts/services.
# ls /usr/share/logwatch/scripts/services
3. Установка и настройка ssmtp
# yum install logwatch ssmtp -y
ssmtp - это консольный почтовый клиент, который запускается по мере обращения к нему локальных программ. Мы будем вызывать его из Logwatch, чтобы он отправил письма на почтовый ящик admin@yandex.ru.
Сохраним оригинальный файл настроек:
# mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf_orig
# vi /etc/ssmtp/ssmtp.conf
mailhub=smtp.yandex.ru:465hostname=localhostroot=report@yandex.ruAuthUser=report@yandex.ruAuthPass=passwordUseSTARTTLS=noUseTLS=yesFromLineOverride=yesRewriteDomain=yandex.ruTLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt
Указываем кому разрешено отправлять почту (локальным учетным записям):
# vi /etc/ssmtp/revaliases
root:report@yandex.ru:smtp.yandex.ru:465
asterisk:report@yandex.ru:smtp.yandex.ru:465
Если появляется ошибка:
ssmtp: 553 5.7.1 Sender address rejected: not owned by auth user.
Значить вы отправляете письмо с локальной учетной записи которой не разрешено посылать письма. Проверьте файл /etc/ssmtp/revaliases, чтобы он содержал учетную запись и ящик с которого отсылаются письма. Или как вариант поменять адреса местами.
Примечание: У ssmtp есть параметр запуска, который позволяет использовать иной конфигурационный файл вместо конфига по умолчанию "ssmtp -C config_file.conf"
4. Тестовая отправка отчета
Сперва отправим письмо с текстом "test_message" на адрес "admin@yandex.ru":
# echo "test_message" | ssmtp -s "admin@yandex.ru" report@yandex.ru
Здесь мы отправили письмо на ящика admin@yandex.ru с ящика report@yandex.ru.
Вы можете создать специальный ящик для отсылки отчетов, например zabbix@yandex.ru или logwatch@yandex.ru.
Если письма не отправляются, можно запустить ssmtp в дебаг режиме:
# echo "test_message" | ssmtp -v "admin@yandex.ru"
Для удобства, можно установить консольный клиент Mutt:
# yum install mutt -y
И отправить тестовое письмо:
# echo "Your message" | mutt -e 'Тема_Сообщения From:report@yandex.ru' admin@yandex.ru
или
# echo "Test Message" | mutt -s TEMA admin@yandex.ru
Чтобы поменять поле от кого, измените файл /etc/Muttrc
# vim /etc/Muttrc
set realname="Reports from server"
set from="report@yandex.ru"
set use_from=yes
Далее если пришло письмо, можно попробовать отправить отчет от logwatch:
# /etc/cron.daily/0logwatch
Пример отчета:
5. Добавляем мониторинг Asterisk
По умолчанию logwatch не умеет мониторить Asterisk, поэтому нужно научить logwatch мониторить Asterisk.
Для этого надо скачать файл "asterisk_logwatch.zip":
# cd /etc/logwatch
# wget http://www.mcbsys.com/wp-content/uploads/2012/02/asterisk_logwatch.zip
Устанавливаем unzip:
# yum install unzip -y
Теперь извлекаем файлы из архива:
# unzip asterisk_logwatch.zip
Получится примерно так:
# tree /etc/logwatch/
6. Включаем мониторинг MariaDB (MySQL)
У меня почему-то не появлялась информация по СУБД, поэтому потребовалось включить мониторинг MySQL:
# logwatch --detail high --service mysql --range all --debug 5
Или включение анализа всех сервисов (много лишнего):
# logwatch --detail high --range all --debug 5
Если вы включили анализ всех сервисов, уберите не нужные:
# vi /usr/share/logwatch/default.conf/logwatch.conf
Уберем логи по демону Postfix:
Service = "-postfix"
У меня минимальный конфиг по сервисам такой:
#Service = AllService = "zz-disk_space"Service = "zz-sys"
Если не приходит сообщение с отчетом, то вероятно не хватает модулей perl:
# yum install perl-CPAN perl-Sys-MemInfo perl-Sys-CPU fortune
# yum install "perl(YAML::XS)"
# cpan YAML
Чтобы отображалось количество свободной памяти, отредактируем файл:
# vi /usr/share/logwatch/scripts/services/zz-sys
import Sys::MemInfo qw(totalmem freemem);
print " Memory: " . ((&totalmem - (&totalmem % (1024*1024))) / (1024*1024)) . " MB\n";
print " Free Memory: ", ((&freemem - (&freemem % (1024*1024))) / (1024*1024)) . " MB\n";
Чтобы увидеть как работает logwatch, введите команду:
# logwatch
Ссылки:
1. swatch
2. http://www.mcbsys.com/blog/2012/02/monitor-asterisk-with-logwatch/