flapflapjack
@flapflapjack
на треть я прав

Каким API методом Zabbix вытащить не только название проблемы, но и к какому хосту она относится?

Версия Zabbix 4.2.8.

У меня есть доступ к мониторингу Zabbix, но много каких триггеров в мониторинг не заведено.
Моя учетка Zabbix только в режиме просмотра. Добавить новые триггеры в заббикс мне никто не позволит. Еле клиентский доступ то выпросил.

На моем ноуте поднят HTTP сервер с PHP.
Идея в том, что на одной странице я у себя хочу разметить все интересующие меня данные.
При чем данные будут выдираться самыми разными способами:

Отсутствие свежих записей в БД - с помощью T_SQL клиента. Их я вытаскиваю, всё отлично.
Упавшие сетевые интерфейсы на серверах видеонаблюдения - через netsh и shell_exec.
И т.д.

Также хочу мониторить некоторые хосты, недоступные из моей сети, но доступные серверу Заббикс, расположенные у клиента, с помощью Zabbix API.

Столкнулся с тем, что читая документацию API я могу вытащить проблемы в интересующей группе хостов, но в приходящем ответе имеется только название активной проблемы, но я не вижу к какому хосту она относится.

Пример запроса:
$res=$zab->Execute("event.get", ["groupids"=>19,"active"=>1,"recent"=>false,"acknowledged"=>true]);


Ответ:
[0]=>
    object(stdClass)#5 (15) {
      ["eventid"]=>
      string(6) "121790"
      ["source"]=>
      string(1) "0"
      ["object"]=>
      string(1) "0"
      ["objectid"]=>
      string(5) "17299"
      ["clock"]=>
      string(10) "1621404763"
      ["value"]=>
      string(1) "1"
      ["acknowledged"]=>
      string(1) "1"
      ["ns"]=>
      string(9) "667737540"
      ["name"]=>
      string(18) "Фиксация-1"
      ["severity"]=>
      string(1) "5"
      ["r_eventid"]=>
      string(1) "0"
      ["c_eventid"]=>
      string(1) "0"
      ["correlationid"]=>
      string(1) "0"
      ["userid"]=>
      string(1) "0"
      ["suppressed"]=>
      string(1) "0"


или например запрос:
$res=$zab->Execute("problem.get", ["groupids"=>19,"active"=>1,"recent"=>false,"acknowledged"=>true]);


Ответ то же самое:
[0]=>
    object(stdClass)#5 (15) {
      ["eventid"]=>
      string(6) "121782"
      ["source"]=>
      string(1) "0"
      ["object"]=>
      string(1) "0"
      ["objectid"]=>
      string(5) "17233"
      ["clock"]=>
      string(10) "1621404417"
      ["ns"]=>
      string(8) "67117042"
      ["r_eventid"]=>
      string(1) "0"
      ["r_clock"]=>
      string(1) "0"
      ["r_ns"]=>
      string(1) "0"
      ["correlationid"]=>
      string(1) "0"
      ["userid"]=>
      string(1) "0"
      ["name"]=>
      string(18) "Обзорная-1"
      ["acknowledged"]=>
      string(1) "1"
      ["severity"]=>
      string(1) "5"
      ["suppressed"]=>
      string(1) "0"


Привязки к хосту я не вижу.

Запрашивать проблемы на все хосты по host_id в цикле - по моему дичь.

Подскажите, кто знает, как правильно вытащить все активные проблемы, и чтобы у меня была информация, к какому хосту она вообще относится.

Заранее благодарю.
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
На сколько я понял из документации, из problem.get с object=0 берёте objectid, из trigger.get берёте эти objectid, там и будет hostid, вам дорога в host.get.

И не стоит acknowledged=true, так вы увидите только проблемы, увиденные и подтверждённые человеком. Нелогично.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы