Zimbra Services

Zimbra — открытый программный продукт для автоматизации и упрощения совместной деятельности. Почтовый сервер, протоколы POP/POPS и IMAP/IMAPS
Фильтрация спама и антивирусная проверка почты при помощи ClamAV
сервис мгновенного обмена сообщениями (Jabber),
Календарь с возможностью планирования событий, систему управления контактами,
систему обмена документами с полноценным WYSIWYG редактором Zimbra Document. И множество других функций и задач.
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Zimbra Services

Сообщение Артём Мамзиков »

Рекомендую посмотреть более обширный шаблон Шаблон Zimbra-zabbix

Оригинал взят тут YetOpen/zabbix-scripts от 12 Dec 2018

Данные берутся с помощью команд:
Проверка
Список служб
su - zimbra -c "/opt/zimbra/bin/zmcontrol status"
Версия
su - zimbra -c "/opt/zimbra/bin/zmcontrol -v"
Очередь
/opt/zimbra/common/sbin/mailq |grep Request |awk '{print $5}'

Формируются 2 файла zimbra_status-zabbix и zimbra_status-zabbix.tmp

Скачать
Zimbra Services Шаблон+Скрипт от 12 Dec 2018.zip
Zimbra Services Шаблон+Скрипт от 12 Dec 2018.zip
(10.07 КБ) 36 скачиваний
Шаблон Zimbra Services
Шаблон Zimbra Services
Группы элементов данных:
Zimbra Сервис
Zimbra


Элементы данных:
Имя: Zimbra Очередь
Тип: Zabbix агент
Ключ: zimbra.queue
Тип информации: Числовой (целое положительное)
Интервал обновления: 60s
Группы элементов данных: Zimbra
Активировано: V
Zimbra Очередь
Zimbra Очередь
Элементы данных:
Имя: Zimbra Версия
Тип: Zabbix агент
Ключ: zimbra.version
Тип информации: Символ
Интервал обновления: 30s
Группы элементов данных: Zimbra
Активировано: V
Zimbra Версия
Zimbra Версия
Триггеры
Имя: Очередь Zimbra больше 200 Сообщений
Важность: Внимание Предупреждение
Выражение: {Zimbra Services:zimbra.queue.last()}>200 and {Zimbra Services:zimbra.queue.last()}<500
Разрешить закрывать вручную: V
Активировано: V
Триггер Очередь Zimbra больше 200 Сообщений
Триггер Очередь Zimbra больше 200 Сообщений
Имя: Очередь Zimbra больше 500 Сообщений
Важность: Высокая
Выражение:{Zimbra Services:zimbra.queue.last()}>500
Разрешить закрывать вручную: V
Активировано: V
Триггер Очередь Zimbra больше 500 Сообщений
Триггер Очередь Zimbra больше 500 Сообщений
Графики
Имя: Очередь сообщений
Элемент данных: Zimbra Services: Zimbra Очередь
График Zimbra Очередь
График Zimbra Очередь
Правила обнаружения
Имя: Zimbra services discovery
Тип: Zabbix агент
Ключ: zimbra.discovery
Интервал обновления: 86400
Активировано: V
Правило обнаружения Zimbra services discovery
Правило обнаружения Zimbra services discovery
Прототипы элементов данных
Имя: Zimbra service "$1"
Тип: Zabbix агент
Ключ: zimbra.status[{#ZIMBRASERVICE}]
Тип информации: Числовой (целое положительное)
Интервал обновления: 120
Отображение значения: Service state
Группы элементов данных: Zimbra Сервис
Создать активированным: V
Прототип элемента данных Zimbra service
Прототип элемента данных Zimbra service
Прототипы триггеров
Имя: Zimbra service "{#ZIMBRASERVICE}" not running on {HOST.NAME}
Важность: Внимание Предупреждение
Выражение: {Zimbra Services:zimbra.status[{#ZIMBRASERVICE}].last()}<>1
Разрешить закрывать вручную: V
Создать активированным: V
Прототип триггера Zimbra service not running on
Прототип триггера Zimbra service not running on
Установка
Копируем скрипт /etc/zabbix/scripts/zbx_zimbra.sh
Даем права на выполнение chmod 777 zbx_zimbra.sh

Файле конфиге заббикс агента прописываем если zabbix agent работает от root
#UserParameter=zimbra.status[*],/etc/zabbix/scripts/zbx_zimbra.sh "$1"
#UserParameter=zimbra.version,/etc/zabbix/scripts/zbx_zimbra.sh version
#UserParameter=zimbra.discovery,/etc/zabbix/scripts/zbx_zimbra.sh discover
UserParameter=zimbra.status[*],su - zimbra -c "/etc/zabbix/scripts/zbx_zimbra.sh "$1""
UserParameter=zimbra.version,su - zimbra -c "/etc/zabbix/scripts/zbx_zimbra.sh version"
UserParameter=zimbra.discovery,su - zimbra -c "/etc/zabbix/scripts/zbx_zimbra.sh discover"
#UserParameter=zimbra.queue,/opt/zimbra/common/sbin/mailq |grep Request |awk '{print $5}'
UserParameter=zimbra.queue,/opt/zimbra/postfix-2.11.1.2z/sbin/mailq |grep Request |awk '{print $5}'

Timeout=15
Конфигурация заб агент на скрипты от root
Конфигурация заб агент на скрипты от root
Скрипты
Скрипты
Сохраняем перезапускаем заббикс агент

Так как скрипт в моем случае запускается от пользователя zimbra не хватает прав на папку и файлы
/var/run/zabbix/zimbra_discover
/var/run/zabbix/zimbra_status

Я прописал в скрипте следующие пути в переменных
FILE='/opt/zimbra/log/zimbra_status-zabbix'
DISCOVER_FILE='/opt/zimbra/log/zimbra_discover_zabbix'


Так же изменена команда запуска так как запуск скрипта уже происходить от пользователя zimbra
COMMAND="/opt/zimbra/bin/zmcontrol"

Делаем импорт шаблона - подключаем к узлу - Готово

Скрипт
zbx_zimbra.sh
Показать
#!/bin/bash

# Скрипт Zabbix для проверки служб Zimbra и выполнения обнаружения служб.
# Поддерживает Zimbra 8.6 и "двухсловные" имена служб
# Автор: Лоренцо Милези <maxxer@yetopen.it>
# # Авторское право: YetOpen S. r.l. 2016
# Лицензия: GPLv3

# раскомментировать для отладки
#set -x

# Переменные
#COMMAND="sudo -H -u zimbra /opt/zimbra/bin/zmcontrol"
#COMMAND="su - zimbra -c "/opt/zimbra/bin/zmcontrol""
COMMAND="/opt/zimbra/bin/zmcontrol"
FILE='/opt/zimbra/log/zimbra_status-zabbix'
DISCOVER_FILE='/opt/zimbra/log/zimbra_discover_zabbix'

fork_get_status() {
maxage=100

# Очень простая проверка параллелизма
# Задаем переменную х значение 0
x=0
# проверке существования временного файла (tmp) операторы -e и -f первый проверит, существует ли файл независимо от типа, а второй вернет истину,не более 5 секунд. Если файл существует условие истено x будет 0 делаем 3 проверки +1 и удаляем файл, если значение ложь (файла нет) пропускаем (удаление файла) и идем дальше по скрипту.
while [ -f "$FILE.tmp" ]; do
sleep 5;
# Получаем новое значение переменной x если файл существует и прибавляем +1
x=$((x+1))
# в любом случае, не ждите слишком долго, удалите в конечном итоге устаревший замок. В любом случае у нас есть тайм-аут агента zabbix на 15 секунд
# Проверяем что переменная x больше или равно 3, если да удаляем файл
if [ $x -ge 3 ]; then
rm "$FILE.tmp";
fi
done

# check if cached status file size > 0 ; проверьте, если размер кэшированного файла состояния > 0 ; [-s FILE] Истина, если FILE существует и имеет размер больше нуля.
if [ -s ${FILE} ]; then
# Получаем переменные
# Получаем -c %Z время последнего изменения статуса, секунды с момента эпохи файла
OLD=`stat -c %Z $FILE`
# Дает количество секунд с 1970 года
NOW=`date +%s`

# if older then maxage, update file если старше максимального возраста, обновите файл
# текущие секунды - секунды файла больше > 100
if [ `expr $NOW - $OLD` -gt $maxage ]; then
# Если файл устарел запускаем команду получения данных и запоняем файл свежими данными
$COMMAND status > $FILE.tmp
# Переименовать файл из временного .tmp в постоянный
mv $FILE.tmp $FILE
fi
else
# Удаляем файл
rm -f ${FILE}
# Если файл свежий запускаем команду получения данных и запоняем файл свежими данными
$COMMAND status > $FILE.tmp
# Переименовать файл из временного .tmp в постоянный
mv $FILE.tmp $FILE
fi
}

fork_discover() {
# Возвращает список запущенных служб в JSON
SRVCS=$($COMMAND status | grep -v ^Host | awk '{$(NF--)=""; print}' | sed 's/^/\t{ \"{#ZIMBRASERVICE}\":\"/' | sed 's/\ $/\" },/')
echo "{"
echo -e "\t\"data\":[\n"
# Удалите последнюю запятую из жала, чтобы сделать хороший JSON
echo $(echo $SRVCS | sed 's/,\+$//')
echo -e "\n\t]\n"
echo "}"
}

# Распределение входных переменных version , discover, имена служб - запускают тот или иной блок сооствествия
case "$1" in
version)
# Вернуть версию zimbra
VERS=$($COMMAND -v)
if [ $? -eq 0 ] ; then
echo $VERS
exit 0;
fi
# ошибка
exit 1;
;;
discover)
# Обнаружение сервисов, проверка что файл существует DISCOVER_FILE, читаем файл , запускаем блок скрипта fork_discover получаем список служб и заполняем файл zimbra_discover
[ -f "$DISCOVER_FILE" ] && cat $DISCOVER_FILE
fork_discover > $DISCOVER_FILE &
exit 0;
;;
*)
#Любое другое входное значение имена сервисов подставляем в переменную check
# двигаться дальше...
check=$1

if [ "$check" = "" ]; then
# если пустая входная переменная check
echo "Сервис Zimbra не указан..."
exit 1
fi

fork_get_status &
# Читаем файл, Подставляем имя сервиса ищем его выводим последний столбец, Если стобец содержит Running отправляем 1 если нет 0
STATUS="$(cat $FILE | grep "`printf '\t'`$check " | awk '{print $NF}')"

if [ "$STATUS" != "Running" ]; then
echo 0
else
echo 1
fi
;;
esac

exit 0;
Команды запроса очереди
Показать
su - zimbra -c "/opt/zimbra/postfix-2.11.1.2z/sbin/mailq"|grep Request |awk '{print $5}'
su - zimbra -c "mailq"|grep Request |awk '{print $5}'

от root прописать весь путь
/opt/zimbra/postfix-2.11.1.2z/sbin/mailq |grep Request |awk '{print $5}'
или
/opt/zimbra/common/sbin/mailq |grep Request |awk '{print $5}'

проверка от root полный путь
zabbix_get -s 192.168.ххх.ххх -k system.run["/opt/zimbra/postfix-2.11.1.2z/sbin/mailq |grep Request |awk '{print $5}'"]
от пользователя zimbra
zabbix_get -s 192.168.ххх.ххх -k system.run["su - zimbra -c \"/opt/zimbra/postfix-2.11.1.2z/sbin/mailq\"|grep Request |awk '{print $5}'"]
zabbix_get -s 192.168.ххх.ххх -k system.run["su - zimbra -c \"mailq\"|grep Request |awk '{print $5}'"]

Еще варианты как вывести 5 столбец если не отработало |grep Request |awk '{print $5}'
|grep Request | cut -f 5 -d ' '
|grep Request |sed 's/.*Kbytes in //'|sed 's/ Requests.*//g'
|grep Request |sed 's/.*Kbytes in \| Requests.*//g'

zabbix_get -s 192.168.ххх.ххх -k system.run["su - zimbra -c \"mailq\"|grep Request | cut -f 5 -d ' '"]
zabbix_get -s 192.168.ххх.ххх -k system.run["su - zimbra -c \"mailq\"|grep Request |sed 's/.*Kbytes in //'|sed 's/ Requests.*//g'"]
zabbix_get -s 192.168.ххх.ххх -k system.run["su - zimbra -c \"mailq\"|grep Request |sed 's/.*Kbytes in \| Requests.*//g'"]

В некоторых случаях
/opt/zimbra/common/sbin/mailq | grep -v "Mail queue is empty" | grep -c '^[0-9A-Z]'
Стандартное описание
2016.07.15 Обновлен скрипт bash для форка в фоновом режиме, благодаря @Ufo28.
Скрипт больше не блокирует Zabbix агент и разветвляет процесс обновления в фоновом режиме.
Это обеспечивает намного более быстрый ответ и избегает проблем таймаута с агентом.

Мониторинг Zimbra с Zabbix Этот шаблон предлагает службы автообнаружения, отслеживания версий и состояния службы.
Он совместим с Zimbra 8.6+ (и его услугами с пространствами).
Обратите внимание, что для запуска внешнего сценария Требуются права доступа sudo,
поэтому скопируйте содержимое sudo_zbx-zimbra.conf, чтобы вашим пользователям использовать sudo?
или ссылку в /etc/sudoers.d/
Также копируем yo-zimbra.conf в /etc/zabbix/zabbix_agentd.d/
и файл скрипта в папку скриптов вашего zabbix агент (обычно в /etc/zabbix/scripts, если differeny отрегулировать йо-сгруппированы вместе.конф
соответственно). Перезапустите zabbix-agent и импортируйте шаблон на ваш сервер. Обнаружение сервиса
установлено очень долго (1 день), поэтому может потребоваться так много времени, чтобы сервисы появились в Zabbix.
Команда обнаружения может занять больше 3 секунд времени ожидания команды по умолчанию,
используемого агентом и сервером / прокси. В случае, если вы видите что-то вроде Zabbix агент пункт
" zimbra.обнаружение веб-почты "на хосте".домен.это " ошибка: первая ошибка сети, подождите 15 секунд

вы должны изменить значение тайм-аута в zabbix_agentd.d / yo-zimbra.конф.
Обратите внимание, что вы должны изменить тайм-аут на сервер/прокси соответственно.
Сценарий bash был вдохновлен блогом.linuxnet.ch. Лицензия И Авторские Права Код и документацию
об авторском праве 2017 YetOpen С. р.л.. Выпущен под лицензией GPLv3.

Триггер Очередь Zimbra больше 500 Сообщений
Триггер Очередь Zimbra больше 200 Сообщений
Автообноружение триггеры Zimbra service "{#ZIMBRASERVICE}" not running on {HOST.NAME}

Содержимое файла
sudo_zbx-zimbra.conf
Показать
# Don't log every invocation of zmcontrol
Cmnd_Alias ZIMBRA_BIN_ZABBIX = /opt/zimbra/bin/zmcontrol
Defaults!ZIMBRA_BIN_ZABBIX !syslog
zabbix ALL=(zimbra) NOPASSWD: ZIMBRA_BIN_ZABBIX
yo-zimbra.conf
Показать
UserParameter=zimbra.status[*],/etc/zabbix/scripts/zbx_zimbra.sh "$1"
UserParameter=zimbra.version,/etc/zabbix/scripts/zbx_zimbra.sh version
UserParameter=zimbra.discovery,/etc/zabbix/scripts/zbx_zimbra.sh discover
UserParameter=zimbra.queue,/opt/zimbra/common/sbin/mailq |grep Request |awk '{print $5}'
# zmcontrol takes some time...
Timeout=15
Скрипт оригинал
zbx_zimbra original.sh
Показать
#!/bin/bash

# Zabbix script to check Zimbra services and perform service discovery.
# Supports Zimbra 8.6 and "two-worded" service names
# Author: Lorenzo Milesi <maxxer@yetopen.it>
# Copytight: YetOpen S.r.l. 2016
# License: GPLv3

# uncomment for debug
#set -x

COMMAND="sudo -H -u zimbra /opt/zimbra/bin/zmcontrol"
FILE='/var/run/zabbix/zimbra_status'
DISCOVER_FILE='/var/run/zabbix/zimbra_discover'

fork_get_status() {
maxage=100

# Very basic concurrency check
x=0
while [ -f "$FILE.tmp" ]; do
sleep 5;
x=$((x+1))
# don't wait too long anyway, remove an eventually stale lock. Anyway we have 15s zabbix agent timeout
if [ $x -ge 3 ]; then
rm "$FILE.tmp";
fi
done
#check if cached status file size > 0
if [ -s ${FILE} ]; then
OLD=`stat -c %Z $FILE`
NOW=`date +%s`

# if older then maxage, update file
if [ `expr $NOW - $OLD` -gt $maxage ]; then
$COMMAND status > $FILE.tmp
mv $FILE.tmp $FILE
fi
else
rm -f ${FILE}
$COMMAND status > $FILE.tmp
mv $FILE.tmp $FILE
fi
}

fork_discover() {
# Return a list of running services in JSON
SRVCS=$($COMMAND status | grep -v ^Host | awk '{$(NF--)=""; print}' | sed 's/^/\t{ \"{#ZIMBRASERVICE}\":\"/' | sed 's/\ $/\" },/')
echo "{"
echo -e "\t\"data\":[\n"
# Remove last comma from the sting, to make a good JSON
echo $(echo $SRVCS | sed 's/,\+$//')
echo -e "\n\t]\n"
echo "}"
}

case "$1" in
version)
# Return zimbra version
VERS=$($COMMAND -v)
if [ $? -eq 0 ] ; then
echo $VERS
exit 0;
fi
# error
exit 1;
;;
discover)
[ -f "$DISCOVER_FILE" ] && cat $DISCOVER_FILE
fork_discover > $DISCOVER_FILE &
exit 0;
;;
*)
# move on...
check=$1

if [ "$check" = "" ]; then
echo "No Zimbra service specified..."
exit 1
fi

fork_get_status &

STATUS="$(cat $FILE | grep "`printf '\t'`$check " | awk '{print $NF}')"

if [ "$STATUS" != "Running" ]; then
echo 0
else
echo 1
fi
;;
esac

exit 0;
количество слов: 1257

Вернуться в «Zimbra»