Задача мониторить 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 с именем сервера и хоста, и что бы имя хоста было в нижнем регистре для активных проверок.