Задача мониторить ksmg Версия: 2.1.1.8310 (2.1.1) на rocky linux . Так как ksmg основан на postfix начал копать в эту сторону. Делал по статье https://serveradmin.ru/monitoring-postfix-v-zabbix/ спасибо ему за это .
Шаблон для zabbix 7
Сначала включил репозиторий
включаем репозиторий mcedit /etc/yum.repos.d/rocky.repo [baseos] enabled=1 [appstream] enabled=1
После выполните очистку кэша и обновление метаданных:
dnf clean all dnf makecache
установка пакета:
dnf install -y postfix-pflogsumm
правим
mcedit /etc/logrotate.d/rsyslog
compress
missingok
/var/log/messages
{
size 100M
rotate 40
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
/var/log/cron
{
size 10M
rotate 10
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
/var/log/maillog
{
daily
missingok
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
/var/log/secure
{
size 20M
rotate 20
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
/var/log/spooler
{
size 1M
rotate 1
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
потом
mcedit /etc/anacrontab
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=1 # the jobs will be started during the following hours only START_HOURS_RANGE=0-1 #period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly
Проверка
pflogsumm -d yesterday -h 0 -u 0 --bounce_detail=0 --deferral_detail=0 --reject_detail=0 --smtpd_warning_detail=0 --no_no_msg_size /var/log/maillog
Создаем скрипт
mkdir /etc/zabbix/scripts mcedit /etc/zabbix/scripts/postfix.sh
Наполняем
#!/bin/bash
export LC_ALL=""
export LANG="en_US.UTF-8"
#
if [[ -z "$1" ]]; then
exit 1
fi
##### PARAMETERS #####
MAILQ=$(which mailq)
PFLOGSUMM=$(which pflogsumm)
MAILLOG="/var/log/maillog"
METRIC="$1"
CACHE_TTL="1740"
CACHE_FILE="/tmp/zabbix.postfix.cache"
EXEC_TIMEOUT="4"
NOW_TIME=`date '+%s'`
##### RUN #####
if [ "$METRIC" = "queue" ]; then
TEMP_DATA=`${MAILQ} 2>&1 | tail -n1`
if echo "${TEMP_DATA}" | grep -iq "Mail queue is empty"; then
echo 0
elif echo "${TEMP_DATA}" | grep -iPq "in\s+\d+\s+request"; then
echo "${TEMP_DATA}" | sed -e 's/.*in\s\+\([0-9]\+\)\s\+request.*/\1/gI' 2> /dev/null | head -n1
else
# Error
echo 65535
fi
exit 0
else
if [ -s "${CACHE_FILE}" ]; then
CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
echo "" >> "${CACHE_FILE}" # !!!
DATE_TO=`date +%d\ %H:%M:%S`
DATE_FROM=`date -d @${CACHE_TIME} +%d\ %H:%M:%S`
DATA_CACHE=`sudo cat ${MAILLOG} | sed -e 's/^\([a-zA-Z]\{3\}\s\)\s\([0-9]\s\)/\10\2/g' | awk '$2" "$3>=from && $2" "$3<=to' from="${DATE_FROM}" to="${DATE_TO}" | ${PFLOGSUMM} -h 0 -u 0 --bounce_detail=0 --deferral_detail=0 --reject_detail=0 --smtpd_warning_detail=0 --no_no_msg_size 2>&1`
echo "${DATA_CACHE}" > ${CACHE_FILE} # !!!
chmod 640 ${CACHE_FILE}
fi
else
echo "" > ${CACHE_FILE} # !!!
exit 0
fi
awk "BEGIN{IGNORECASE=1} /${METRIC}/ {print \$1}" ${CACHE_FILE} | awk '{print $1}' | awk '/k|m/{p = /k/?1:2}{printf "%d\n", int($1) * 1024 ^ p}' | head -n1
fi
exit 0
Даем права
chown root:zabbix /etc/zabbix/scripts/postfix.sh chmod 750 /etc/zabbix/scripts/postfix.sh
mcedit /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: /bin/cat /var/log/maillog zabbix ALL=(ALL) NOPASSWD: /usr/sbin/pflogsumm zabbix ALL=(ALL) NOPASSWD: /usr/bin/mailq
права на файл
chmod 644 /var/log/maillog
правим конфиг забикса
UserParameter=postfix.received-full,pflogsumm -h 0 -u 0 --bounce_detail=0 --deferral_detail=0 --reject_detail=0 --smtpd_warning_detail=0 --no_no_msg_size /var/log/maillog | grep received | awk 'NF == 2' | awk '{print $1}'
UserParameter=postfix.delivered-full,pflogsumm -h 0 -u 0 --bounce_detail=0 --deferral_detail=0 --reject_detail=0 --smtpd_warning_detail=0 --no_no_msg_size /var/log/maillog | grep delivered | awk 'NF == 2' | awk '{print $1}'
UserParameter=postfix[*],/etc/zabbix/scripts/postfix.sh "$1"
рестарт агента
systemctl restart zabbix-agent2
Со статьи инфа
Триггеры проверки работы сервисов:
- Postfix: IMAP service is unreachable on {HOST.NAME} — стандартная проверка работы сервиса на определенном tcp порту. В данном случае это imap сервис и 143 порт.
- Postfix: SMTP service is unreachable on {HOST.NAME} — то же самое, только smtp порт 25.
- Postfix: Mail queue is much on {HOST.NAME} — проверка количества писем в почтовой очереди. Если минимальное значение за последние 3 минуты выше заданного в макросе $MAIL_QUEUE, то срабатывает триггер. Сам элемент данных проверяется каждую минуту. Сделаны 3 разных триггера с разными порогами срабатывания. В принципе, тут может быть достаточно и одного триггера, но я для примера оставил все три.
- Postfix: Mail deferred is much on {HOST.NAME} — триггер срабатывает, если количество отклоненных писем превышает значение, установленное в макросе $MAIL_DEFERRED. Это значение подбирается опытным путем. Проверка отклоненных писем и почтовой очереди самые эффективные для определения массовой рассылки спам писем с вашего сервера. Это может случиться, если пароль одного из ящиков уйдет к злоумышленникам. Ситуация эта достаточно частая. Во время отладки этого мониторинга, я как раз столкнулся с такой ситуацией и убедился, что рост значения deferred однозначно указывает на наличие какой-то проблемы. Когда вас взломают, вы получите примерно такую картинку.
- Postfix: pickup is not running on {HOST.NAME} — данный триггер контроллирует стандартный элемент данных, который получает информацию о работающем процессе на линукс сервере. Везде, где я видел шаблоны для мониторинга postfix, использовалась стандартная проверка работы сервиса — 0 или 1 в последнем полученном значении. Опытным путем я выяснил, что такая проверка дает много ложных срабатываний со службой pickup. Она запускается и работает ограниченное кол-во времени, потом завершается и запускается новый экземпляр. В мониторинг время от времени попадает информация о том, что сервис не работает, но в этом нет ошибки. Я сделал проверку трех последних состояний сервиса, и только в том случае, если все 3 проверки выявили неработающую службу, то будет оповещение. Остальные службы мониторятся просто последним значением. Они всегда должны быть запущены.
- Postfix: Mail delivered is much on {HOST.NAME} — этот триггер следит за количеством доставленных писем за последний час. Если их будет в 5 раз больше, чем часом ранее, то сработает оповещение. Этот триггер помогает следить за тем, что происходит на сервере. Если писем стало слишком много, стоит обратить на это внимание. Значение в 5 раз подобрано опытным путем. Возможно, в вашем случае будет уместно использовать другое значение. Тут только нужно понимать, что это за письма. Pflogsumm просто анализирует лог файл postfix. Значение delivered может расти, к примеру, если будут массовые рассылки. Кто-то сделает пару рассылок на весь офис, в котором 100 человек и вы сразу получите значение delivered 200. Если в предыдущем часе массовых рассылок не было, то значение delivered может быть в районе 20-30. Сразу получите сработавший триггер, который по сути не указывает на какую-то проблему. Так что калибруйте этот параметр в зависимости от ваших условий. В принципе, триггеры на queue и deferred достаточно четко фиксируют проблему на сервере, так что от этого триггера можно и отказаться. Привожу для примера, сами подумайте, как его использовать. Возможно, удобнее было бы использовать значение received для триггера, либо использовать и то и другое.
Similar Posts:
- Zabbix.Как включить в zabbix мониторинг Mysql.
- Zabbix. Как установить Grafana.
- Zabbix начало. Установка Агента на удаленную машину linux
- Zabbix. Где исправить timezone (Часовой пояс)
- Как установить агент zabbix через msi с именем сервера и хоста, и что бы имя хоста было в нижнем регистре для активных проверок.



