Собираем статистику amavisd (SpamAssassin) в zabbix
Постановка задачи
Есть почтовый сервер, на котором работает антиспам на базе amavis. Необходимо собирать статистику по количеству зафиксированного спама.
Решение
Статистику будем собирать путем парсинга лога.
Создадим на сервере скрипт, который будет вызываться заббиксом раз в минуту, находить в логе все записи, о найденном спаме/чистых письмах за прошедшую минуту и выдавать заббиксу число найденных писем.
Таким образом в заббиксе будет два элемента данных:
- Количество “чистых” писем в минуту
- Количество “спамовых” писем в минуту
Сначала сделаем так, что бы amavisd писал лог в отдельный файл
Для этого в amavisd.conf
добавим:
$log_level = 1; $do_syslog = 1; $syslog_facility = 'local6';
в /etc/syslog/syslog.conf
:
local6.* /var/log/amavisd.log
рестартуем syslog:
service syslogd restart
Создаем скрипт
Скрипт /etc/zabbix/scripts/amavis_stat_zabbix
в качестве параметра принимает слово, которое будет искать в логе. Например SPAM
или CLEAN
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #! /bin/bash LOGFILE="/var/log/amavisd.log" SEARCH_PATTERN=$1 export LANG=us MINUTE=`date +%M` HOUR=`date +%H` MONTH=`date +%b` let HOUR=10#$HOUR-1+1 if [ $MINUTE -gt 0 ]; then let MINUTE=10#$MINUTE-1; else MINUTE=59; let HOUR=10#$HOUR-1; fi if [ $HOUR -lt 0 ]; then let HOUR=HOUR+24; fi if [ $MINUTE -lt 10 ]; then if [ $MINUTE != "00" ]; then MINUTE=0$MINUTE; fi fi if [ $HOUR -lt 10 ]; then HOUR=0$HOUR; fi cat $LOGFILE | grep -P "$MONTH .+ $HOUR:$MINUTE:.*$SEARCH_PATTERN.*Hits:" | wc -l |
Настраиваем zabbix
Создаем конфиг для Zabbix
echo 'UserParameter=amavisd[*],/etc/zabbix/scripts/amavis_stat_zabbix "$1"' > /etc/zabbix/zabbix_agentd.d/userparameter_amavisd.conf
Рестартуем zabbix
service zabbix restart
Настраиваем элементы данных в zabbix:
Элемент для подсчета чистых (не спамовых) писем: |
Элемент для подсчета спамовых писем: |
Настраиваем график |
Результат: |