В Zabbix'е к каждому устройству можно прикрепить так называемые «инвентарные данные», среди которых есть поле адреса. Было бы неплохо показывать это поле в списке проблем, чтобы можно было без лишних телодвижений определить адрес устройства. К сожалению, Zabbix не предоставляет для этого штатных средств. Но к счастью, это можно сделать, внеся в исходный текст веб-интерфейса Zabbix небольшую правку.
Интересующий нас виджет находится в файле frontends/php/app/views/monitoring.widget.problems.view.php
Этот виджет фигурирует в списке маршрутов в файле frontends/php/include/classes/mvc/CRouter.php:
'widget.problems.view' => ['CControllerWidgetProblemsView', 'layout.widget', 'monitoring.widget.problems.view'],Класс CControllerWidgetProblemsView описан в файле frontends/php/app/controllers/CControllerWidgetProblemsView.php. Именно в этом классе готовятся данные, которые потом будут использованы в виджете для отображения. Данные об узлах, связанных с триггерами, в этом классе формируется при помощи функции getTriggersHostsList.
Определение функции getTriggersHostsList находится в файле frontends/php/include/triggers.inc.php, для получения списка узлов с триггерами используется метод API host.get:
$db_hosts = $hostids ? API::Host()->get([ 'output' => ['hostid', 'name', 'status', 'maintenanceid', 'maintenance_status', 'maintenance_type'], 'selectGraphs' => API_OUTPUT_COUNT, 'selectScreens' => API_OUTPUT_COUNT, 'hostids' => array_keys($hostids), 'preservekeys' => true ]) : [];Внесём правку, которая добавит в этот список строку местоположения устройства из его инвентарных данных:
Index: zabbix-3.4.12-1+buster/frontends/php/include/triggers.inc.php =================================================================== --- zabbix-3.4.12-1+buster.orig/frontends/php/include/triggers.inc.php +++ zabbix-3.4.12-1+buster/frontends/php/include/triggers.inc.php @@ -2170,6 +2170,7 @@ function getTriggersHostsList(array $tri 'output' => ['hostid', 'name', 'status', 'maintenanceid', 'maintenance_status', 'maintenance_type'], 'selectGraphs' => API_OUTPUT_COUNT, 'selectScreens' => API_OUTPUT_COUNT, + 'selectInventory' => ['location'], 'hostids' => array_keys($hostids), 'preservekeys' => true ])Теперь эти данные нужно отобразить в виджете. Внесём соответствующую правку в файл frontends/php/app/views/monitoring.widget.problems.view.php:
Index: zabbix-3.4.12-1+buster/frontends/php/app/views/monitoring.widget.problems.view.php =================================================================== --- zabbix-3.4.12-1+buster.orig/frontends/php/app/views/monitoring.widget.problems.view.php +++ zabbix-3.4.12-1+buster/frontends/php/app/views/monitoring.widget.problems.view.php @@ -54,6 +54,7 @@ $table = (new CTableInfo()) $show_recovery_data ? _('Status') : null, _('Info'), ($data['sortfield'] === 'host') ? [_('Host'), $sort_div] : _('Host'), + ($data['sortfield'] === 'location') ? [_('Location'), $sort_div] : _('Location'), [ ($data['sortfield'] === 'problem') ? [_('Problem'), $sort_div] : _('Problem'), ' • ', @@ -198,11 +199,19 @@ foreach ($data['data']['problems'] as $e ]; } + $trigger_hosts = array_values($data['data']['triggers_hosts'][$trigger['triggerid']]); + $locations = array(); + foreach($trigger_hosts as $host) + { + $locations[] = $host['inventory']['location']; + } + $table->addRow(array_merge($row, [ $show_recovery_data ? $cell_r_clock : null, $show_recovery_data ? $cell_status : null, makeInformationList($info_icons), $triggers_hosts[$trigger['triggerid']], + join(', ', $locations), $description, (new CCol( ($problem['r_eventid'] != 0)Как видно, в правке:
- в таблицу был добавлен заголовок новой колонки Location,
- по каждому из триггеров формируется строка со списком адресов узлов, на значения элементов данных из которых опирается этот триггер,
- строки с адресами через запятую с пробелом склеиваются в одну строку,
- полученная строка добавляется в строку таблицы, в колонку Location.
Комментариев нет:
Отправить комментарий