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 каждый раз. Если знаете как — прошу в комментарии.

Мой телеграм-канал .