Активация/деактивация узлов Zabbix с помощью API на PHP

Обновлено и опубликовано Опубликовано:

Тематические термины: Zabbix, API, PHP.

Zabbix сервер позволяет автоматизировать многие задачи по его администрированию средствами API запросов. Для этого необходимо отправить серверу JSON-команды по http(s).

Пример скрипта

Данный скрипт представлен несколькими функциями, в конце скрипта которые мы просто вызываем:

  1. function my_curl_zabbix($arr) {
  2.     global $auth;
  3.     $url = 'http://monitoring.dmosk.local/zabbix/api_jsonrpc.php';
  4.     $arr[jsonrpc] = '2.0';
  5.     $arr[id] = '1';
  6.     $arr[auth] = $auth;
  7.     $postfields = json_encode($arr);
  8.     $curl = curl_init();
  9.     curl_setopt($curl, CURLOPT_URL, $url);
  10.     curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json-rpc'));
  11.     curl_setopt($curl, CURLOPT_HEADER, false);
  12.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  13.     curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 20);
  14.     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  15.     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  16.     curl_setopt($curl, CURLOPT_POST, 1);
  17.     curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
  18.     $return = curl_exec($curl);
  19.     curl_close($curl);
  20.     return json_decode($return, true);
  21. }
  22.  
  23. function z_auth() {
  24.     $jsonData = array("method" => "user.login","params" => array("user" => "username","password" => "userpassword"));
  25.     $auth_arr = my_curl_zabbix($jsonData);
  26.     return $auth_arr[result];
  27. }
  28.  
  29. function z_get_hosts($filter_arr) {
  30.     $jsonData = array("method" => "host.get","params" => array("output" => array("hostid", "host", "name"),"selectInventory" => "name"));
  31.     if ($filter_arr) {
  32.         $jsonData[params][filter] = $filter_arr;
  33.     }
  34.     $result = my_curl_zabbix($jsonData);
  35.     return $result[result];
  36. }
  37.  
  38. function z_update_hosts($host_id, $action) {
  39.     $jsonData = array("method" => "host.update","params" => array("hostid" => "{$host_id}"));
  40.     switch ($action) {
  41.         case 'disable':
  42.             $jsonData[params][status] = 1;
  43.             break;
  44.         case 'enable':
  45.             $jsonData[params][status] = 0;
  46.             break;
  47.         default:
  48.             return false;
  49.     }
  50.     $result = my_curl_zabbix($jsonData);
  51.     return $result;
  52. }
  53.  
  54. $auth = z_auth();
  55. $z_host = z_get_hosts(array('host'=>'myServer'));
  56. z_update_hosts($z_host[0][hostid], 'disable');

Описание скрипта

Строка Описание
1 - 21 Функция отправки запроса на http-сервер с помощью CURL.
9 - 17 Задаем опции для curl. Подробнее на их описании останавливаться не будем.
23 - 27 Функция авторизации на сервере Zabbix.
29 - 36 Получаем список хостов и информацию по ним. В качестве аргумента можно передать фильтр. Без фильтра функция возвращает все хосты.
38 - 52 Обновляем состояние хоста. Для этого передаем его идентификатор и конкретное действие — деактивировать (disable) или активировать (enable).
54 Выполняем аутентификацию. Полученный идентификатор авторизации заносим в переменную $auth.
55 Получаем информацию о хосте, который необходимо включить или отключить. В качестве аргументов передаем имя хоста.
56 Деактивируем хост. Передаем функции id хоста и действие (disable).
# Серверы
Дмитрий Моск — частный мастер
Был ли вам полезен этот скрипт?

Да            Нет