Zabbix

Связка с мониторингом двусторонняя и состоит из двух независимых частей:

  1. Наполнение мониторинга данными инвентаризации — внешним скриптом синхронизации (репозиторий arms.zabbix) через REST API. Он же, заведя узел в Zabbix, записывает его hostid обратно в инвентаризацию — в external_links объекта под ключом Zabbix.hostid.
  2. Показ состояния в карточке объекта инвентаризации — подключаемой интеграцией zabbix: панель с базовыми метриками узла, активными проблемами (сработавшими триггерами) и ссылкой на узел в веб-интерфейсе Zabbix. Панель только читает, в Zabbix ничего не меняет.

Что показывает панель

В шапке — состояние узла и число активных проблем, дальше аптайм, загрузка CPU и памяти, заполнение файловых систем и список самих проблем. Проблемы отключённых триггеров не показываются — как и в веб-интерфейсе Zabbix (API их отдаёт, панель отфильтровывает).

Состояние узла:

Признак Что значит
доступен узел отвечает на проверки
недоступен Zabbix не получает ответ (проверки падают)
доступность неизвестна проверок доступности ещё не было
мониторинг выключен узел отключён в Zabbix, данные не собираются

Доступность берётся из интерфейсов узла (пассивные проверки) и из признака активного агента (Zabbix 6.4+). Явная недоступность любого канала важнее доступности остальных.

Справа в шапке — три ссылки-иконки в Zabbix: дашборд узла, последние данные и проблемы (появляются, если в конфиге задан web).

Свежесть данных

Под шапкой указано время последнего замера («данные: 3 минуты назад», точное время — во всплывающей подсказке). Так видно, живые это цифры или снятые с машины, которую выключили неделю назад: сами метрики в этом случае показываются, но с пометкой «данные устарели».

Порог — 10 минут (штатные шаблоны снимают метрики раз в минуту), меняется параметром staleAfter (секунды) в конфиге провайдера. Если подходящие item’ы у узла есть, но значений нет вовсе, панель пишет «данные не поступали более суток» — глубже суток история не запрашивается.

Метрики берутся по ключам item’ов, а не по имени шаблона: у штатных шаблонов «… by Zabbix agent» ключи Windows и Linux совпадают, поэтому ОС различать не требуется:

Показатель Ключ item’а
Аптайм system.uptime
CPU system.cpu.util (у старых шаблонов system.cpu.util[,idle] — пересчитывается в загрузку)
Память vm.memory.utilization, либо vm.memory.size[pused] / vm.memory.size[pavailable]; если готового процента в шаблоне нет — считается из байтов (vm.memory.size[total] + [used] или [available])
Диски vfs.fs.size[<ФС>,pused] или vfs.fs.dependent.size[<ФС>,pused] (варианты с pfree пересчитываются)

Если у узла таких item’ов нет (нестандартный шаблон, SNMP-мониторинг), показатель просто не выводится — проблемы и ссылка на узел остаются. Разобраться, почему показателя нет, помогает

php yii zabbix/items <hostid>

— он покажет ключи узла, распознан ли каждый из них и есть ли по нему свежее значение (нет истории = item есть, но данных за сутки нет). Файловых систем показывается не больше восьми. Отключить блок метрик целиком: 'metrics' => false в конфиге провайдера.

Токену нужны права не только на узлы, но и на чтение истории значений — иначе метрик не будет.

Включение панели

Провайдер zabbix добавляется в params-local.php (пример конфига и описание опций — в Подключаемых интеграциях). Нужны адрес api_jsonrpc.php и API-токен сервисного пользователя Zabbix с правом чтения нужных узлов; пользователи инвентаризации в Zabbix не логинятся.

Проверить настройку с сервера:

php yii zabbix/ping

Одна карточка с «Постановкой на мониторинг»

Если включён и провайдер zabbix-sync (вердикт «попадёт ли узел в мониторинг»), две отдельные карточки можно объединить: флаг 'embedded' => true в конфиге провайдера zabbix прячет его карточку, а её содержимое рисуется внутри «Постановки на мониторинг» под бейджем вердикта. Живой блок Zabbix при этом показывается только когда узел на мониторинге либо реально заведён в Zabbix (есть привязка hostid — в том числе заведённый вручную): у узлов, которым в мониторинге быть не положено, остаётся один бейдж — без дублирующего «узел не найден в Zabbix». Недоступность одной из двух внешних систем не прячет вторую половину панели.

Привязка объекта к узлу

Панель ищет узел по hostid из external_links объекта:

{"Zabbix.hostid":"218430"}

Обычно это поле заполняет скрипт синхронизации; при разовой проверке его можно записать вручную. Если привязки нет, панель делает разовый поиск узла по FQDN (для ОС) либо имени/инвентарному номеру (для оборудования) — только для отображения, в базу инвентаризации ничего не пишется.

Узнать hostid и проверить, что именно увидит карточка:

php yii zabbix/find <имя-узла>
php yii zabbix/object comps 42