1.Установка/настройка необходимой локали
1 |
# locale-gen en_US.UTF-8 |
1 |
# dpkg-reconfigure locales |
1 |
# nano /etc/default/locale |
1 |
LANG="en_US.UTF-8" |
2.Установка скрипта
1 |
# mkdir /etc/zabbix/scripts/ |
1 |
# chown root:zabbix -R /etc/zabbix/scripts/ |
1 |
# chmod 750 /etc/zabbix/scripts/ |
1 |
# nano /etc/zabbix/scripts/postfix.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#!/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) # Для Ubuntu MAILLOG="/var/log/mail.log" # Для Centos # 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 |
Для парсинга почтового лога используется утилита pflogsumm
1 |
# apt-get install pflogsumm |
1 |
# yum install postfix-perl-scripts |
1 |
# pflogsumm /var/log/mail.log -d today |
Скрипт предусматривает кеш, что позволяет избежать парсинга лога на каждый параметр.
Время действия кеша (TTLCACHE) в секундах должно устанавливается чуть меньше чем минимальный период опроса элементов.(в скрипте установлен кеш 1740 секунд, а в шаблоне интервал обновления составляет 1800 секунд)
При первом запуске (или удалении кеш файла) будет лишь создан пустой файл, и опрос элементов может быть возможен только после истечения кеша (TTLCACHE).
1 |
# chown root:zabbix /etc/zabbix/scripts/postfix.sh |
1 |
# chmod 750 /etc/zabbix/scripts/postfix.sh |
Настройка прав пользователю zabbix в sudo
1 |
# visudo |
Ubuntu/Debian
1 |
zabbix ALL=(ALL) NOPASSWD: /bin/cat /var/log/mail.log |
Centos
1 |
zabbix ALL=(ALL) NOPASSWD: /bin/cat /var/log/maillog |
Проверить работу скрипта для zabbix, но сначала надо создать «старый» кеш файл не нулевого размера:
1 |
# sudo -u zabbix touch /tmp/zabbix.postfix.cache |
1 |
# echo "" >> /tmp/zabbix.postfix.cache |
1 |
# sudo -u zabbix touch -m -d '2000-01-01 01:01' /tmp/zabbix.postfix.cache |
1 |
# sudo -u zabbix /etc/zabbix/scripts/postfix.sh queue |
1 |
0. |
1 |
# sudo -u zabbix /etc/zabbix/scripts/postfix.sh received |
1 |
207 |
Следует увеличить параметр Timeout в Zabbix Agent, что бы скрипт гарантированно успевал отработать
3.Настройка Zabbix-агента
1 |
# nano /etc/zabbix/zabbix_agentd.conf |
1 2 |
###Postfix Monitoring UserParameter=postfix[*],/etc/zabbix/scripts/postfix.sh "$1" |
Перезапуск агента
1 |
# service zabbix-agent restart |
Проверка –выполняем команду на Zabbix-сервере
1 |
# zabbix_get -s <IP-address-Zabbix-агента> -k 'postfix[received]' |
1 |
207 |
1 |
# zabbix_get -s <IP-address-Zabbix-агента> -k 'postfix[queue]' |
1 |
0. |
Либо локально на агенте
1 |
# zabbix_get -s 127.0.0.1 -k 'postfix[received]' |
207
1 |
# zabbix_get -s 127.0.0.1 -k 'postfix[queue]' |
1 |
4.Настройка Zabbix-сервера
Скачиваем,распаковываем и импортируем шаблон zabbix2-mytemplate-postfix-agent.xml
zabbix2-mytemplate-postfix-agent.zip
Применяем шаблон к хосту
Необходимые макросы (переменные) в настройках хоста
1 |
{$MAIL_QUEUE} |
— допустимая длинна очереди
Проверяем,что через 30 минут (такой интервал обновления установлен в шаблоне) на хосте появились Item с именем
1 |
Monitoring->Latest Data->фильтруем по требуемому хосту в поле Hosts->Postfix |
Создал вручную 3 графика
1.Кол-во писем в почтовой очереди
2.Почтовая статистика по кол-ву писем
3.Почтовая статистика по кол-ву байт
Настройки графиков
Непосредственно графики
Источник:
http://wiki.enchtex.info/howto/zabbix/zabbix_postfix_monitoring