System.run довольная простая, но в то же время очень полезная проверка. Прямо в гуе заббикса в активной проверке указываем system.run(команда) и получаем её вывод. Получается, с помощью этой проверки мы можем получать какие угодно метрики и состояния, которые можем получить из комадной строки. И это всё «от и до» в веб-гуе заббикса, в отличие от UserParameter.
Самое важное, что можем узнать о кластере из комманды pvecm:
- Статус кластера
- Количество нод в кластере
- Активные ноды
- Зафейленые ноды
Все значения переменных я получал эксперементальным путём, выключая ноды.
Статус кластера можем получить из состояния переменной Quorate. Если Yes — всё ок, No — не ок. Нужное значение отфильтруем с помощью регулярного выражения
sudo pvecm status | grep -oP "Quorate:\s+\K\w+"
Но текстовое значение нам не нужно, нужно 1 либо 0. Параметр «-с» grep даёт количество строк, которое соответствует запрошенному значению, при grep -c Yes, мы как раз получим то, что нужно
sudo pvecm status | grep -oP "Quorate:\s+\K\w+" | grep -c Yes
Вешаем триггер, проверяющим последнее значение, если последнее значение не будет равно 1 — триггер загорится
{Template Proxmox:system.run[sudo pvecm status | grep -oP "Quorate:\s+\K\w+" | grep -c Yes].last()}<>1
За общее количество нод отвечает переменная Expected votes
system.run[sudo pvecm status | grep -oP "Expected votes:\s+\K\w+"]
За количество активных нод отвечает переменная Nodes
sudo pvecm status | grep -oP "Nodes:\s+\K\w+"
Переменной, которая показывает зафейленые ноды в promox версии 5.2, нет. Поэтому будем вычитать из общего количества нод активные ноды. С помощью комманды paste делаем выражение и скармливаем его bc, которое уже делает вычитание
system.run[sudo pvecm status | grep -oP "(Expected votes:\s+\K\w+)|(Nodes:\s+\K\w+)" | paste -sd- | bc]
Так же вешаем простой тригер. Он сработает, если это значение больше нуля
{Template Proxmox:system.run[sudo pvecm status | grep -oP "(Expected votes:\s+\K\w+)|(Nodes:\s+\K\w+)" | paste -sd- | bc].last()}>0
Ещё надо проверять службы pve-manager и pve-cluster. Zabbix 3.4 ещё пока не умеет смотреть статус служб в systemd. Поэтому и здесь используем system.run
system.run[sudo service pve-manager status | grep -oP "Active:\s+\K\w+" | grep -c active]
system.run[sudo service pve-cluster status | grep -oP "Active:\s+\K\w+" | grep -c active]
Уверен, что можно не вызывать два раза grep каждый раз. Если знаете как — прошу в комментарии.
Мой телеграм-канал .