Изменение статуса узла в zabbix с помощью api. пример скрипта на php для zabbix api на включения или отключения узлов

Изменение статуса узла в Zabbix с помощью API. Пример скрипта на PHP для Zabbix API на включения или отключения узлов

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

Тематические термины: 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. function z_auth() {
  23.     $jsonData = array(«method» => «user.login»,»params» => array(«user» => «username»,»password» => «userpassword»));
  24.     $auth_arr = my_curl_zabbix($jsonData);
  25.     return $auth_arr[result];
  26. }
  27. function z_get_hosts($filter_arr) {
  28.     $jsonData = array(«method» => «host.get»,»params» => array(«output» => array(«hostid», «host», «name»),»selectInventory» => «name»));
  29.     if ($filter_arr) {
  30.         $jsonData[params][filter] = $filter_arr;
  31.     }
  32.     $result = my_curl_zabbix($jsonData);
  33.     return $result[result];
  34. }
  35. function z_update_hosts($host_id, $action) {
  36.     $jsonData = array(«method» => «host.update»,»params» => array(«hostid» => «{$host_id}»));
  37.     switch ($action) {
  38.         case 'disable':
  39.             $jsonData[params][status] = 1;
  40.             break;
  41.         case 'enable':
  42.             $jsonData[params][status] = 0;
  43.             break;
  44.         default:
  45.             return false;
  46.     }
  47.     $result = my_curl_zabbix($jsonData);
  48.     return $result;
  49. }
  50. $auth = z_auth();
  51. $z_host = z_get_hosts(array('host'=>'myServer'));
  52. 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).

Был ли вам полезен этот скрипт?

Да            Нет

Источник: https://www.dmosk.ru/scripts.php?object=zabbix-api-php

Начало работы с Zabbix API [Zabbix Documentation 1.8]

ru:api:getting_started

Как правило у вас есть только один путь для манипуляций, настройки и создания объектов в Zabbix — через PHP веб интерфейс. Это очень удобно, однако только до того момента пока вы не решите создать что то особенное: создать пакетный скрипт добавления/обновления, или пользовательский инструмент мониторинга, или что то еще, что не Zabbix GUI интерфейс не предоставляет по умолчанию.

Вот тогда Zabbix API и приходит на помощь. Он позволяет создавать, обновлять и получать объекты Zabbix(например, узлы сети, элементы данных, графики и др.) через протокол JSON RPC и делать все, что вам нравится (если у вас есть аккаунт, уполномоченный на эти действия, конечно).

Zabbix API был введен в версии 1.8 и активно разрабатывается до сих пор. В некоторых местах, функциональность все еще ограничена, но он обещает стать гораздо шире после выпуска Zabbix 2.0.

Если вы не знакомы с JSON RPC, не бойтесь, все сложности отмечены ниже. Весь рабочий процесс заключается в нескольких шагах:

  1. Подготовка объекта JSON, который описывает то что вы хотите сделать (создать узел сети, получить график, обновить элемент данных и т.д.);

  2. Получитьответ с желаемыми данными в формате JSON.

В большинстве случаев вы будете делать это из скриптов, с помощью инструментов скриптового язык, но, конечно, вы можете отправлять запросы «вручную», используя любой из желаемых инструментов JSON-RPC.

В самом деле, правильно! Все, что вам нужно знать сейчас, это способ аутентификации для этого, и то, какой формат JSON является ожидаемым для Zabbix.

Упрощенный запрос JSON в Zabbix API выглядит следующим образом:{ «jsonrpc»: «2.0», «method»: «method.name», «params»: { «param_1_name»: «param_1_value», «param_2_name»: «param_2_value» }, «id»: 1, «auth»: «159121b60d19a9b4b55d49e30cf12b81»
}Давайте взглянем на каждую строку:

  • “jsonrpc”: “2.0” — это стандартный параметр JSON PRC идентификации версии протокола. Он не будет меняться для всех ваших запросов;
  • “method”: “method.name” — этот параметр определяет фактически выполняемую операцию. Общие примеры: “host.create”, “item.update” и так далее;
  • “params” — здесь вы передаете объект JSON с параметрами требуемыми для указанного метода. Если вы хотите создать элемент данных, например, параметры “name” и “key_” будут обязательными. Возможные параметры для каждого метода (и сами методы) описываются в документации Zabbix API;
  • “id”: 1 — это поле может быть использовано, чтобы связать каждый запрос JSON с ответом. Ответ будет иметь такой же “id” как и указанный в запросе. Не обязательно должен быть уникальным или последовательным;
  • “auth”: “159121b60d19a9b4b55d49e30cf12b81” — Это ключ аутентификации для идентификации пользователя для доступа к API. Смотрите раздел Аутентификация для получения более подробной информации.

И так, теперь мы знаем как использовать API. Давайте взглянем на метод host.create и создадим новый узел сети. Давайте отправим запрос:

{ «jsonrpc»: «2.0», «method»: «host.create», «params»: { «host»: «My first host name», «ip»: «192.168.3.1», «port»: 10050, «useip»: 1, «groups»: [ { «groupid»: 50 } ] }, «id»: 1
}

Zabbix ответит:

{ «jsonrpc»: «2.0», «error»: { «code»: -32602, «message»: «Invalid params.», «data»: «Not authorized» }, «id»: 1
}

Что произошло? Конечно, не случайный человек может отправить запрос Zabbix на получение информации или для изменения чего-нибудь. Вот зачем вам нужно проходить аутентификацию для того, чтобы что-нибудь сделать.

Хорошее время отметить несколько моментов:

В случае любой ошибки, в результате вы получите параметр “error”:

  • Параметр “code” будет всегда равен -32602 (это код ошибки JSON для ошибочных параметров);
  • “message” отражает ту же информацию что и вернул нам “code” и не будет сильно отличаться;
  • “data” будет описывать, что действительно пошло не так.

В случае успеха, вы получите параметрo “result” вместо “error” (как вы увидите далее).

И так, как получить аутентификацию? Вам потребуется отправить запрос, вызвав метод “user.login” и указав параметрами “user” и “password”.

{ «jsonrpc»: «2.0», «method»: «user.login», «params»: { «user»: «Admin», «password»: «zabbix» }, «id»: 1
}

“Admin/zabbix” является учетной записью в Zabbix по умолчанию, но вы уже вероятно изменили пароль Админа. Не так ли?

Таким образом, мы получим ответ:

{ «jsonrpc»: «2.0», «error»: { «code»: -32602, «message»: «Invalid params.», «data»: «No API access» }, «id»: 1
}

Опять, отказ. Что случилось на этот раз? Дело в том, что в Zabbix 1.8 пользователи, которые не находятся в группе с “Доступом к API” не имеют доступа к Zabbix API по умолчанию.

Для того чтобы использовать API для нужного пользователя, вам нужно установить “Доступ к API” в “Активирован” для группы пользователей этого пользователя или поместить пользователя в группу с предустановленным “API доступом”.

Теперь, когда ваш пользователь является членом группы пользователей с включенным “Доступ к API”, попробуем отправить такой же запрос снова:

{ «jsonrpc»: «2.0», «method»: «user.login», «params»: { «user»: «Admin», «password»: «zabbix» }, «id»:1
}

Ответ:

{ «jsonrpc»: «2.0», «result»: «7cd4e1f5ebb27236e820db4faebc1769», «id»: 1
}

Ура! Аутентификация успешна! Что теперь? Теперь мы можем использовать хэш возвращенный в параметре “result”, как доказательство наших прав, путем включения в каждый создаваемый запрос API, параметром “auth”.

Теперь, когда вы авторизовались можно пойти дальше и сделать что-нибудь. Прежде всего, давайте попробуем получить какую-нибудь информацию.

Вот простой запрос на получение всех доступных групп узлов сети с сортировкой по имени{ «jsonrpc»: «2.0», «method»: «hostgroup.get», «params»: { «output»: «extend», «sortfield»: «name» }, «id»: 1, «auth»: «7cd4e1f5ebb27236e820db4faebc1769»
}Обратите внимание, что “method” содержит “hostgroup.get”, фактическую процедуру которую мы выполняем, и “params” содержащий дополнительные опции.

“sortfield”, как вы можете догадаться, позволяет сортировать результат, который вы получаете по выбранному полю.

“output”:“extend” означает, что вы хотите получить всю доступную информацию о каждой группе. Это, в некотором роде похоже на “SELECT *” в SQL. Возможными вариантами “output” могут быть:

  • “extend” — получить всю информацию;
  • “shorten” — получить только id объектов;
  • “refer” — получить id объекта и так же id связанных объектов;
  • список полей, таких как [“groupid”, “name”] — получить поля только из списка.

Список полей доступен только для get методов Alert, DCheck, Host, DService, Screenitem, Template и Trigger.

И не забывайте о хэше “auth”, который вы получили используя “user.login”.

Ответ на данный запрос может выглядеть следующим образом::

{ «jsonrpc»: «2.0», «result»: [ { «groupid»: «5», «name»: «Discovered hosts», «internal»: «1» }, { «groupid»: «2», «name»: «Linux servers», «internal»: «0» }, { «groupid»: «1», «name»: «Templates», «internal»: «0» }, { «groupid»: «3», «name»: «Windows servers», «internal»: «0» }, { «groupid»: «4», «name»: «Zabbix servers», «internal»: «0» } ], «id»: 1
}

Это стандартные группы, созданные при первичной настройке Zabbix. Обратите внимание на поле “groupid”, поля “XXXXid” уникальные идентификаторы системы, которые будут использоваться для адресации на объект в других запросах. Смотрите следующий раздел для объяснений.

Мы получили группы узлов сети, теперь попробуем что-нибудь создать. Попробуем создать узел сети, который будет находиться в группе узлов сети “Linux servers” и “Zabbix servers”. Запрос будет выглядеть следующим образом:

{ «jsonrpc»: «2.0», «method»: «host.create», «params»: { «host»: «My new fancy host that I have created using API», «ip»: «192.168.3.1», «port»: 10050, «useip»: 1, «groups»: [ { «groupid»: 2 }, { «groupid»: 4 } ] }, «id»: 1, «auth»: «7cd4e1f5ebb27236e820db4faebc1769»
}

Обратите внимание, мы используем поля “groupid” полученные ранее, для связки с группами в которые мы хотим, чтобы входил наш узел сети. Мы, говорим, что хотим чтобы узел сети был в группах с id 2 (Linux servers) и 4 (Zabbix servers). Таким способом, вы будете работать со всеми сопутствующими объектами.

Если все пойдет верно, вы получите ответ:

{ «jsonrpc»: «2.0», «result»: { «hostids»: [ «10051» ] }, «id»: 1
}

Список “hostids” содержит элементы id, которые мы только что создали. В нашем случае, мы создавали только один узел сети и получили ID — 10051. Вы можете его использовать в будущих запросах.

Конечно, если вы можете создавать что-либо, вы должны иметь возможность обновлять или удалять. И для вас, чтобы попробовать и обновить элемент данных, я создал элемент данных с описанием “agent.ping” в созданном ранее “Моем новом придуманном узле сети, который я создал с помощью API”, так что можно поиграть с ним. Во-первых, давайте посмотрим на это:

Запрос:

{ «jsonrpc»: «2.0», «method»: «item.get», «params»: { «output»: «extend», «filter»: { «description»: «agent.ping» }, «hostids»: [ «10051» ] }, «id»: 1, «auth»: «7cd4e1f5ebb27236e820db4faebc1769»
}

Обратите внимание, мы использовали параметр “filter”, для указания описания элемента данных и “hostids”, чтобы сказать что мы заинтересованы в элементе данных у узла сети, который мы создали (это было и его ID был 10051, помните?)

Ответ:

{ «jsonrpc»: «2.0», «result»: [ { «hosts»: [ { «hostid»: «10051» } ], «itemid»: «22162», «type»: «0», «snmp_community»: «», «snmp_oid»: «», «snmp_port»: «161», «hostid»: «10051», «description»: «agent.ping», «key_»: «agent.

ping», «delay»: «30», «history»: «90», «trends»: «365», «lastvalue»: null, «lastclock»: null, «prevvalue»: null, «status»: «0», «value_type»: «3», «trapper_hosts»: «», «units»: «», «multiplier»: «0», «delta»: «0», «prevorgvalue»: null, «snmpv3_securityname»: «», «snmpv3_securitylevel»: «0», «snmpv3_authpassphrase»: «», «snmpv3_privpassphrase»: «», «formula»: «0», «error»: «», «lastlogsize»: «0», «logtimefmt»: «», «templateid»: «0», «valuemapid»: «0», «delay_flex»: «», «params»: «», «ipmi_sensor»: «», «data_type»: «0», «authtype»: «0», «username»: «», «password»: «», «publickey»: «», «privatekey»: «», «mtime»: «0» } ], «id»: 1
}

Ничего себе, много ж информации здесь. Теперь попробуем и обновить элемент данных, изменим “snmp_port” на 162 и “item type” на SNMPV1. Метод item.update будет верным инструментом для этого.

Запрос:

{ «jsonrpc»:»2.0″, «method»:»item.update», «params»:{ «itemid»:»22162″, «snmp_port»:»162″, «type»:1 }, «id»:1, «auth»:»7cd4e1f5ebb27236e820db4faebc1769″
}

Обратите внимание, мы указали три параметра: “itemid”, таким образом Zabbix будет знать какой элемент данных обновлять (не забывайте это!) и два параметра, которые мы хотим изменить. Кстати, откуда я знаю, что “type”:1 означает SNMPV1? Это все есть в общем разделе элемента данных.

Ответ:

{ «jsonrpc»: «2.0», «result»: { «itemids»: [ «22162» ] }, «id»: 1
}

Обычно, Zabbix возвращает ID претерпевшего изменение элемента.

Источник: https://www.zabbix.com/documentation/1.8/ru/api/getting_started

Использование Zabbix API. Когда не хватает стандартной статистики

Возникла задача получить некоторую статистику из Zabbix, делюсь опытом получения данных из базы Zabbix через API средствами Python.
Куски кода будут для Python 2.7

Для работы с zabbix-api есть готовая библиотека py-zabbix, документация по ней доступна тут, но примеров там не много. Официальное руководство по Zabbix API.

Итак, после стандартной установки:pip install py-zabbixПробуем подключиться к серверу Zabbix:from pyzabbix import ZabbixAPI
z = ZabbixAPI('https://172.16.1.10', user='user1', password='pass1')
answer = z.do_request('apiinfo.

version')
print «Version:»,answer['result']
Формат ответа от сервера — JSON:{u'jsonrpc': u'2.0', u'result': u'3.0.2', u'id': u'1'}

Скрипт печатает содержимое поля result:Version: 3.0.2Теперь можно приниматься за решение интересующей задачи.

Задача — получить среднее значение Disk Idle Time со всех виртуальных машин за неделю (Пн-Пт) в рабочее время (с 10:00 до 19:00) за определенную неделю. Я не хочу заострять внимание на актуальности этих параметров, а просто поделиться опытом работы с Zabbix API на примере этой конкретной задачи.

Итак, виртуальные машины в Zabbix лежат в отдельной группе, для начала получим список доступных групп с помощью метода hostgroup.get:

#Get List of available groups
groups = z.hostgroup.get(output=['itemid','name'])
for group in groups: print group['groupid'],group['name']

Параметром output можно определить, какие поля вернет API:38 _Local Domains
53 _Local NAS
23 _Local Servers Linux
27 _Local Servers Virtual Linux
25 _Local Servers Virtual Windows
24 _Local Servers Windows
35 _Local Switches

Затем можно получить список хостов в конкретной группе с помощью метода host.get:#Get List of hosts in the group
hosts = z.host.get(groupids=25, output=['hostid','name'])
for host in hosts: print host['hostid'],host['name']

Параметр groupids определяет идентификатор группы:10197 DC1_—172.16.1.4—
10204 DC2_—172.16.1.5—
10637 LocalDB_—172.16.1.12—
10686 WSUS_—172.16.1.16—
10708 Jira_—172.16.1.24—

Для получения списка items по определенному хосту используется метод item.get:#Get List of items on the host
items = z.item.get(hostids=10637, output=['itemid','name'])
for item in items: print item['itemid'],item['name']
Результат:525617 ICMP ping
525618 ICMP loss
525619 ICMP response time
940205 Input Microsoft Hyper-V Network Adapter #2
940206 Output Microsoft Hyper-V Network Adapter #2
990808 Disk Idle time on C:
990809 Disk Idle time on D:

Как видно из ответа, выбранный хост имеет 2 диска, нужно вывести минимальное значение из нескольких. Для доступа к данным по items используется метод history.get. Следующий код не претендует на оптимальность, я только начал осваивать Python, но в целом с поставленной задачей скрипт справился.

Для метода history.get нужно определить следующие параметры:

  • history — тип возвращаемого значения
  • itemids — id интересующего item
  • time_from — начало временного интервала
  • time_till — конец временного интервала

Источник: https://habr.com/post/325876/

zabbix — простая проверка узлов сети (доступность)

Доброго времени суток. Мы продолжаем серию постов по мониторингу Zabbix. Так мы уже установили и настроили Zabbix, разобрали основные понятия и познакомились с интерфейсом Zabbix . Пришло время приступить к мониторингу узлов сети с помощью Zabbix.

И первое, что мы рассмотрим — это мониторинг доступности узлов. Давайте я приведу план действий:

  1. Создание группы узлов, где будут храниться шаблоны.

  2. Создание шаблона простой проверки (создание элементов данных, триггера, графика)
  3. Создание группы узлов, где будут храниться узлы сети.

  4. Создание узла сети (добавление узла сети и применение к нему созданного шаблона)

Ну, что ж, приступим к реализации…

Первое, что нам необходимо сделать — это авторизоваться в системе Zabbix. Напомню, что логин по умолчанию Admin, а пароль zabbix.

 Переходим в “Настройка” -> “Группы узлов сети” и жмем “Создать группу узлов сети”
 
В поле “Имя группы” вводим имя, например, mytemplate и жмем “Сохранить”.
Давайте повторим процедуру и создадим еще одну группу (пункт 3 нашего плана), например, myhost.
Мы создали с Вами две группы: одна для шаблонов, вторая для узлов сети. Напомню, что группы узлов сети служат для логического обьединения узлов.
С пунктами 1 и 3 нашего плана мы разобрались. Переходим к созданию шаблона.
Переходим “Настройка” -> ”Шаблоны” и жмем “Создать шаблон”
 В поле “Имя шаблона” вводим название нашего шаблона, например, availability. В поле “Видимое имя” вводим availability. В поле “В группах” удаляем все группы, если что-то было, и переносим нашу группу mytemplate.
Жмем “Сохранить”. На этом сам шаблон мы создали, но он пока не несет никакой смысловой нагрузки. Давайте добавим к шаблону некоторые элементы данных.
Переходим в “Настройки” -> “Шаблоны” и в правом верхнем углу в поле группы выбираем нашу группу mytemplate.
В списке видим наш шаблон availability, как видим у него еще нет групп элементов данных, элементов данных, триггеров, графиков, комплексных экранов, обнаружения. Создавать группы элементов данных мы не будем (они создаются по аналогии с группами узлов сети и служат для логического обьединения элементов данных), а вот элементы данных мы и создадим дальше.
Переходим по ссылке элементы данных. И в правом верхнем углу жмем по кнопке “Создать элемент данных”
В поле “Узел сети” у нас стоит availability, если нет то жмем по выбрать и выбираем наш шаблон с именем availability.
В поле “Имя” указываем имя нашего элемента данных, например, ping.
В поле “Тип” выбираем “Простая проверка”. Напомню, мы хотим с помощью системы мониторинга Zabbix следить за доступностью узла.
В поле “Ключ” жмем по “Выбрать” выбираем icmpping[,,,,] или вводим icmpping[]. Убираем все, что находиться в квадратных скобках. Это дополнительные параметры для ping и они нам пока не понадобятся. И так, в поле “Ключ” должна быть команда icmpping[].
Команда icmpping возвращает два значения 0 — узел не доступен, 1 — узел доступен. Это нам понадобиться для создания триггера.
В поле “Тип информации” оставим “Числовой(целое положительное)”, т.к. результат выполнения команды icmpping в Zabbix либо 0, либо 1.
В поле “Тип данных” оставим “Десятичное” по той же причине.
В поле “Единица измерения” ничего не пишем.
В поле “Пользовательский множитель” ничего не ставим. Об этом поле я подробно расскажу в другой статье, когда мы будем настраивать Zabbix для работы по snmp.
В поле “Интервал обновления” указываем интервал с которым будет выполняться данная команда, измеряется в секундах. По умолчанию интервал равен 30, оставим как есть.
Дальше идут настройки периодичности проверки, оставим по умолчанию.
И последнее поле “Состояние” ставим в “Активно”, тем самым мы активировали данный элемент данных.
Жмем “Сохранить”.
На этом создание элемента данных завершено.
Давайте создадим еще один элемент данных: назовем loss, тип — Простая проверка, Ключ — icmppingloss[] (возвращает процент потерянных пакетов), тип информации — числовой (с плавающей точкой), а все остальное оставим по умолчанию.

 Теперь если мы создадим узел сети и добавим к нему наш шаблон, то данный узел мы начнем отслеживать, zabbix будет собирать данные по данному узлу. Но в случае недоступности узла zabbix никак не отреагирует на это. Для того, чтобы zabbix нам сообщил о проблемном узле необходимо создать триггер.

Перейдем по ссылке триггеры (см. рисунок выше). И нажмем “Создать триггер”.
В поле “Имя” введем название триггера, например, down.
В поле “Выражение” жмем по “Добавить”. И в открывшемся окне:

 В поле “Элементы данных” жмем “Выбрать”  и выбираем элемент данных ping. Будьте внимательны группа и узел сети должны быть наши, которые мы только что создали. В моем случае в поле “Элемент данных” должно появиться availability:ping
В поле “Функция” выбираем функцию (выражение при истинности, которого триггер сработает).

Так, как наш элемент данных возвращает 0 при недоступности узла, то наш триггер должен срабатывать, когда последнее значение равно 0. Значит в поле “Функция” выбираем “Last value = N”, в поле “N” ставим “0”. Остальное не трогаем, в данном случае нам это не надо. Жмем “Вставить”.
В итоге в поле “Выражение” в моем случае появилось {availability:icmpping[].

last(0)}=0
Если выражение более сложное, например, использует параметры нескольких элементов данных, то можно воспользоваться “Конструктором выражений”.
В поле “Важность” устанавливаем степень важности, в нашем случае — это “Чрезвычайно”.
Убедимся, что в поле “Активировано” стоит галочка.
Жмем “Сохранить”.

Мы создали триггер, который обрабатывает элемент данных. И уже по результату обработки сработает или нет. 

 В нашем случае, если наблюдаемый узел сети вдруг станет недоступен, то элемент данных ping вернет значение 0 и в этом случае сработает триггер down. И zabbix выдаст нам ошибку с важностью “Чрезвычайно”.
Но мы также собираем данные по потерям пакетов и хотим вывести эти данные в виде графика.

Для создания графика перейдем по ссылке “Графики” (см. рис. выше) и нажмем “Создать график”
В поле “Имя” вводим имя нашего графика, например “Потери”.
В полях “Высота” и “Ширина” задаем размер графика.
В поле “Тип графика” задаем тип графика.
Остальные поля также служат для настройки внешнего вида графика.

В поле “Элементы данных” жмем “Добавить” и в открывшемся окне выбираем необходимый тип данных, в нашем случае — loss. Только будьте внимательны при выборе элемента данных, убедитесь, что Вы выбираете элемент данных необходимого узла.
Жмем “Сохранить”.
На этом создание шаблона закончено.

Теперь мы можем приступить к созданию узла сети.

Переходим в “Настройки” -> “Узлы сети” и жмем “Создать узел сети”

В поле “Имя узла сети” вводим название узла сети, например host_1.

В поле “Видимое имя” вводим host_1

В поле “В группах” добавляем группы в которых будет наш узел, в нашем случае в группе myhost.

В поле “Интерфейсы агента” вводим IP адрес узла или в поле “DNS” доменное имя.

Переходим на вкладку шаблоны и жмем “Добавить” выбираем наш шаблон availability в группе mytemplate.

Во вкладке “Инвентарные данные” Вы можете ввести инвентарные данные узла сети. Жмем “Сохранить”.

Все узел добавлен. Теперь с помощью zabbix мы следим за узлом сети: zabbix нас уведомит о “падении” узла, а также собирает информацию по потерям пакетов.

Давайте посмотрим, что получилось.

Переходим в “Мониторинг” и находим группу узлов “myhost” видим, что проблем нет — узел доступен. Теперь перейдем в “Мониторинг” -> “Графики” выбираем “Группа узлов сети” — myhost, “Узлы сети” — host_1, “График” — Потери. У меня все по нулям — потерь нет.

 Мы с Вами создали две группы узлов сети: первая для хранения шаблонов, вторая для хранения узлов сети. Заем мы создали шаблон, в который поместили элементы данных, триггер и график. А после создали узел сети и привязали к нему данный шаблон.

Вообще шаблон можно было бы не создавать, а сразу все элементы данных, триггер и график создать узлу сети. Но при добавлении другого узла нам бы пришлось снова создавать для него элементы данных, триггер и график. А так просто привязываем к узлу шаблон и все.

А теперь представьте, что у нас сотни узлов.

На этом я заканчиваю данную статью. А в следующей  мы остановимся на настройке zabbix для получения и обработки данных по SNMP.

Источник: http://zloykolobok.blogspot.com/2012/10/zabbix_22.html

Знакомство с Zabbix API

Содержание

  • 1 HTML-файл:
  • 2 PHP-файл
  • 3 JavaScript файл:
  • 4 CSS-файл

Развернул систему мониторинга Zabbix, вроде всё нравится, куча показаний снимается, но нет простого способа визуализировать некоторые данные. По крайней мере я не нашёл.

Решено было написать их самостоятельно с использованием Zabbix API. Я буду визуализировать коммутатор Cisco для примера, при желании это можно расширить до необходимых масштабов.

Итак, нам потребуется подготовить кое-какие данные:

  1. Получить hostid – идентификатор хоста;
  2. Получить itemids – идентификаторы нужных параметров;
  3. Создать пользователя для доступа к API.

Получаем hostid

Для получения hostid нужно перейти в раздел “Настройка -> Узлы сети”, навести мышь на искомый узел и посмотреть ссылку – параметр hostid. Его выпишем отдельно.

Получить itemids

Переходим в раздел “Элементы данных”, наводим мышью на нужные параметры и переписываем себе itemid. Я буду снимать показания ifOperStatus каждого порта.

HTML-файл:

Накидаем html-файлик с внешним видом коммутатора:

Развернуть »

Fa0/1 Fa0/3 Fa0/5 Fa0/7 Fa0/9 Fa0/11 Fa0/13 Fa0/15 Fa0/17 Fa0/19 Fa0/21 Fa0/23 Fa0/25 Fa0/27 Fa0/29 Fa0/31 Fa0/33 Fa0/35 Fa0/37 Fa0/39 Fa0/41 Fa0/43 Fa0/45 Fa0/47
Fa0/2 Fa0/4 Fa0/6 Fa0/8 Fa0/10 Fa0/12 Fa0/14 Fa0/16 Fa0/18 Fa0/20 Fa0/22 Fa0/24 Fa0/26 Fa0/28 Fa0/30 Fa0/32 Fa0/34 Fa0/36 Fa0/38 Fa0/40 Fa0/42 Fa0/44 Fa0/46 Fa0/48

Начнём кодить скриптец. Я тот ещё программёр, поэтому если кто-то может улучшить код – буду только рад.

Итак, что мы делаем? При помощи CURL посылаем запрос с именем-паролем, получаем токен для авторизации.

Затем посылаем следующий запрос к API с методом item.get и передаём hostid и список параметров itemids. Затем результат кодируем в json и возвращаем ответ.

Таблица обновляется раз в 10 секунд. Планирую добавить ещё трафик на интерфейсе и таблицу MAC-адресов. Теперь эту шляпу можно использовать в комплексных экранах. Тип элемента – URL, динамический.

Источник: https://litl-admin.ru/zhelezo/znakomstvo-s-zabbix-api.html

Массовое добавление/удаление хостов в Zabbix при помощи API

На одном из проектов часто разворачивались/удалялись новые ноды в облаке, соответственно, появилась задача добавления/удаления новых хостов в Zabbix для мониторинга доступности и снятия статистики. Для саморазвития было решено использовать библиотеку zabbix API на питоне.

Это был первый опыт написания скриптов, поэтому буду благодарен за отзывы и замечания по коду.

Мы используем zabbix 1.8.5 — как показала практика, порой в разных версиях 1.8.

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

Для добавления нового хоста, нам потребуется знать следующие параметры:

  • Будущее имя хоста в Zabbix
  • DNS
  • IP
  • порт, который слушает zabbix агент
  • будем ли мы мониторить хост по IP (1 или 0.) Соответственно, если 0 — то будем мониторить по DNS
  • id групп, в которые мы добавим хост
  • id шаблонов (templates), которые мы хотим подключить к хосту
  • опционально — макросы для хоста

Кратко по приведенным выше пунктам: если с первыми пятью все довольно просто и понятно, то оставшиеся для человека, имеющего небольшой опыт с заббиксом, могут вызывать вопросы. Более подробную информацию, разумеется, правильнее и лучше смотреть на сайте с документацией zabbix.

Группы хостов — вещь довольно удобная. Например, при настройке сценариев уведомлений, для разных групп можно создать разные условия и типы уведомлений, к примеру, для одних групп — отсылать E-Mail и SMS уведомления, для других — только E-Mail и так далее.

Шаблоны — это, грубо говоря, набор параметров, по которым снимаются данные а также триггеры, реагирующие на события. Для веб-серверов, например, мы будем снимать данные с apache или nginx, в то время как для БД нам будут нужны абсолютно другие параметры. Соотвественно, к разным хостам мы будем подключать разные шаблоны.

Наконец, макросы — это переменные, которые мы передаем хосту. К примеру, у нас есть item (в русском варианте — «Элементы данных»), который снимает статистику утилизации HDD. Так как дисков у нас может быть несколько, макросы позволяют нам передать, что $DISK1=/dev/sda, $DISK2=/dev/sdb и т.д., таким образом, снимая статистику с разных дисков одним item-ом при помощи макросов.

Что нужно изменить в конфигурации скриптов?
Нужные параметры хранятся в файле zabbix_credentials.py

  • server — URL сервера. По умолчанию — http://127.0.0.1/zabbix
  • username, password — логин и пароль пользователя, от имени которого будет идти запрос к API. Также, этот пользователь должен иметь права на доступ к API. По умолчанию — admin/zabbix.
  • По желанию — log level. Значение по умолчанию — 0.

Добавление хоста осуществляется таким образом: zabbix_host_add.py

Удаление — zabbix_host_del.py<\p>

Собственно, сами скрипты с кратким readme — github.com/gnetsman/zabbix_api

Источник: http://www.pvsm.ru/linux/10452

Zabbix — мониторинг сети

Zabbix — высоко интегрированное решение мониторинга сети, которое предлагает множество возможностей в одном пакете.

  • Сбор данных
    • проверки доступности и производительности
    • поддержка мониторинга по SNMP, IPMI, JMX
    • пользовательские проверки
    • сбор желаемых данных за выборочные интервалы
  • Широкие возможности визуализация
    • Графики в режиме реального времени
    • Карты сети
    • Пользовательские экраны и слайд шоу
    • Отчеты
  • Хранение истории
  • Гибкая настройка
    • Определение порогов
    • Настраиваемые оповещения
    • Автоматические реакции на события, в том числе удаленные команды
    • Шаблонизация
    • Система прав доступа
  • Возможности web-мониторинга
  • Веб интерфейс
  • Zabbix API
  • Наличие нативных клиентов под разные ОС
  • Готовое решение Zabbix, основанное на Open SUSE

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

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

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

Функционал базового Zabbix сервера разделен на три отдельных компонента; это: Zabbix сервер, веб интерфейс и хранилище в базе данных.

Zabbix Агент

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

Агент собирает локальную оперативную информацию и отправляет данные Zabbix серверу для дальнейшей обработкиg. В случае проблем (таких как рабочий жесткий диск заполнен или упал процесс сервиса), Zabbix сервер может быстро уведомить администраторов конкретного сервера, который сообщил об ошибке.

Zabbix агенты чрезвычайно эффективны, потому что используют нативные системные вызовы для сбора информации статистики.

Пассивные и активные проверки Zabbix агенты могут выполнять пассивные и активные проверки. В случае пассивной проверки агент отвечает на запрос данных. Zabbix сервер (или прокси) запрашивает данные, например, загрузку ЦПУ, и Zabbix агент возвращает результат. Активные проверки требуют более сложной обработки. Агент сначала получает список элементов данных для независимой обработки от Zabbix сервера. Далее он будет периодически отправлять новые значения серверу.

Zabbix Прокси

Zabbix прокси — это процесс, который может собирать данные мониторинга с одного или нескольких наблюдаемых устройств и отправлять эту информацию Zabbix серверу, впринципе прокси работает от имени сервера. Все собранные данные локально буферизуются и затем отправляются Zabbix серверу, которому принадлежит этот прокси.

Развертывание прокси опционально, но может быть очень полезна для распределения нагрузки на одиночный Zabbix сервер. Если данные собирают только прокси, то обработка этих данных на сервере значительно уменьшает загрузку ЦПУ и I/O диска.

Zabbix прокси — идеальное решение для централизованного мониторинга удаленных мест, филиалов и сетей без местных администраторов. Для Zabbix прокси требуется отдельная база данных.

Java gateway

В Zabbix 2.0 добавлена нативная поддержка для мониторинга JMX приложений введением нового демона Zabbix, называемого Zabbix Java gateway.

Zabbix Java gateway — это демон написанный на языке Java.

Когда Zabbix сервер хочет знать значение конкретного JMX счетчика у узла сети, он опрашивает Zabbix Java gateway, который использует API управления JMX для опроса интересующего удаленного приложения.

Приложению не требуется никаких дополнительных программ, оно просто должно быть запущено с опцией командной строки -Dcom.sun.management.jmxremote.

Установка Zabbix

Установка сервера и клиента отличается незначительно и состоит из ряда простейших действий:

Установка серверной части

1. Загрузить и распаковать архив исходных кодов

tar -zxvf zabbix-2.0.0.tar.gz

2. Создать группу и пользователя zabbix, от имени которого будут работать демоны zabbix

groupadd zabbix useradd -g zabbix zabbix

3. Создать БД для хранения настроек и данных мониторинга

Пример для MySQL: mysql -u -p create database zabbix character set utf8; quit; mysql -u -p zabbix < database/mysql/schema.sql # остановитесь здесь, если вы создаете базу данных для Zabbix прокси mysql -u -p zabbix < database/mysql/images.sql mysql -u -p zabbix < database/mysql/data.sql

4. Сконфигурировать исходные коды

В этой части установка агента и сервера немного отличаются. Для zabbix сервера необходимо задать большее кол-во параметров.

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

Для просмотра всех доступных опция конфигурирования, выполните в папке извлеченных исходных кодов Zabbix:

configure —help Вывод доступных опций конфигурирования: Installation directories: —prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] —exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] Fine tuning of the installation directories: —bindir=DIR user executables [EPREFIX/bin] —sbindir=DIR system admin executables [EPREFIX/sbin] —libexecdir=DIR program executables [EPREFIX/libexec] —sysconfdir=DIR read-only single-machine data [PREFIX/etc] —sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] —localstatedir=DIR modifiable single-machine data [PREFIX/var] —libdir=DIR object code libraries [EPREFIX/lib] —includedir=DIR C header files [PREFIX/include] —oldincludedir=DIR C header files for non-gcc [/usr/include] —datarootdir=DIR read-only arch.-independent data root [PREFIX/share] —datadir=DIR read-only architecture-independent data [DATAROOTDIR] —infodir=DIR info documentation [DATAROOTDIR/info] —localedir=DIR locale-dependent data [DATAROOTDIR/locale] —mandir=DIR man documentation [DATAROOTDIR/man] —docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] —htmldir=DIR html documentation [DOCDIR] —dvidir=DIR dvi documentation [DOCDIR] —pdfdir=DIR pdf documentation [DOCDIR] —psdir=DIR ps documentation [DOCDIR] Program names: —program-prefix=PREFIX prepend PREFIX to installed program names —program-suffix=SUFFIX append SUFFIX to installed program names —program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: —build=BUILD configure for building on BUILD [guessed] —host=HOST cross-compile to build programs to run on HOST [BUILD] Optional Features: —disable-option-checking ignore unrecognized —enable/—with options —disable-FEATURE do not include FEATURE (same as —enable-FEATURE=no) —enable-FEATURE[=ARG] include FEATURE [ARG=yes] —disable-dependency-tracking speeds up one-time build —enable-dependency-tracking do not reject slow dependency extractors —disable-largefile omit support for large files —enable-static Build statically linked binaries —enable-server Turn on build of Zabbix server —enable-proxy Turn on build of Zabbix proxy —enable-agent Turn on build of Zabbix agent and client utilities —enable-java Turn on build of Zabbix Java gateway —enable-ipv6 Turn on support of IPv6 Optional Packages: —with-PACKAGE[=ARG] use PACKAGE [ARG=yes] —without-PACKAGE do not use PACKAGE (same as —with-PACKAGE=no) —with-ibm-db2=[ARG] use IBM DB2 CLI from given sqllib directory (ARG=path); use /home/db2inst1/sqllib (ARG=yes); disable IBM DB2 support (ARG=no) —with-ibm-db2-include=[DIR] use IBM DB2 CLI headers from given path —with-ibm-db2-lib=[DIR] use IBM DB2 CLI libraries from given path —with-mysql[=ARG] use MySQL client library [default=no], optionally specify path to mysql_config —with-oracle=[ARG] use Oracle OCI API from given Oracle home (ARG=path); use existing ORACLE_HOME (ARG=yes); disable Oracle OCI support (ARG=no) —with-oracle-include=[DIR] use Oracle OCI API headers from given path —with-oracle-lib=[DIR] use Oracle OCI API libraries from given path —with-postgresql[=ARG] use PostgreSQL library [default=no], optionally specify path to pg_config —with-sqlite3[=ARG] use SQLite 3 library [default=no], optionally specify the prefix for sqlite3 library If you want to use Jabber protocol for messaging: —with-jabber[=DIR] Include Jabber support [default=no]. DIR is the iksemel library install directory. If you want to use cURL library: —with-libcurl[=DIR] use cURL package [default=no], optionally specify path to curl-config What ODBC driver do you want to use (please select only one): —with-iodbc[=ARG] use odbc driver against iODBC package [default=no], default is to search through a number of common places for the IODBC files. —with-unixodbc[=ARG] use odbc driver against unixODBC package [default=no], optionally specify full path to odbc_config binary. What SNMP package do you want to use (please select only one): —with-net-snmp[=ARG] use NET-SNMP package [default=no], optionally specify path to net-snmp-config —with-ucd-snmp[=ARG] use UCD-SNMP package [default=no], default is to search through a number of common places for the UCD-SNMP files. If you want to use SSH2 based checks: —with-ssh2[=DIR] use SSH2 package [default=no], DIR is the SSH2 library install directory. If you want to check IPMI devices: —with-openipmi[=DIR] Include OPENIPMI support [default=no]. DIR is the OPENIPMI base install directory, default is to search through a number of common places for the OPENIPMI files. If you want to check LDAP servers: —with-ldap[=DIR] Include LDAP support [default=no]. DIR is the LDAP base install directory, default is to search through a number of common places for the LDAP files. Пример конфигурации сервера: ./configure —enable-server –enable-java —enable-ipv6 —with-mysql —with-net-snmp Пример конфигурации агента: ./configure –-enable-agent

5. Собрать и установить все

Этот шаг должен быть выполнен пользователем с достаточными правами (как правило 'root', или с помощью sudo).

Выполнение make install установит исполняемые файлы демона (zabbix_server, zabbix_agentd, zabbix_proxy) в /usr/local/sbin и исполняемые файлы клиента (zabbix_get, zabbix_sender) в /usr/local/bin.

make install

6. Отредактировать конфигурационные файлы

  • файл конфигурации Zabbix агента /usr/local/etc/zabbix_agentd.conf

Вам нужно сконфигурировать это файл для каждого хоста на котором установлен zabbix_agentd.

В файле вы должны указать IP адрес Zabbix сервера. Подключения с остальных хостов будут отклонены.

  • файл конфигурации Zabbix сервера /usr/local/etc/zabbix_server.

    conf

  • Вы должны указать имя базы данных, пользователя и пароль (если он используется).

    7. Запустить сервер и агента

    zabbix_server zabbix_agentd

    8. Добавить скрипты автозапуска(опционально)

    Для этого нужно скопировать скрипты из папки с исходными кодами для вашей ОС в директорию для автозапуска. Скрипты автозапуска необходимо скорректировать, если при конфигурировании были изменены стандартные пути расположения демонов Zabbix

    Пример для ОС Debian:

    cp misc/init.d/debian/zabbix-server /etc/init.d/ cp misc/init.d/debian/zabbix-agent /etc/init.d/ chmod 755 /etc/init.d/zabbix-server chmod 755 /etc/init.d/zabbix-agent update-rc.d zabbix-server defaults update-rc.d zabbix-agent defaults

    Установка web-интерфейса

    Веб-интерфейс Zabbix написан на языке PHP, поэтому чтобы его запустить вам потребуется веб-сервер с поддержкой PHP. Установка производится путем простого копирования PHP файлов в папку HTML вебсервера. mkdir /zabbix cd frontends/php cp -a .

    /zabbix После копирования необходимо открыть адрес http://hostname/zabbix и выполнить установку с помощью мастера, включающую:

    1. Проверку требований
    2. Задание настроек БД
    3. Задание свойств сервера (адрес, порт)
    4. Сохранение настроек на сервере

    Пользователь по умолчанию: Admin/zabbix

    Начало работы c Zabbix

    Основные определения

    Host — сетевое устройство, которые вы хотите мониторить, с IP/DNS.
    Hostgroup — логическая группировка узлов сети; они могут содержать узлы сети и шаблоны. Узлы сети и шаблоны в группе узлов сети никаким образом не связаны с друг другом.

    Группы узлов сети используются при назначении прав доступа к узлам сети различным группам пользователей.
    Item-элемент данных. Конкретная часть данных, которую вы хотите получать от узла сети, метрические данные.
    Trigger – триггер.

    |логическое выражение которое определяет порог проблемы и используется для “вычисления” данных полученных элементами данных. При получении данных превышающих порог, триггеры переходят из состояния 'Ок' в состояние 'Проблема'. При получении данных ниже порога, триггеры остаются в/возвращаются в состояние 'Ок'.

    Event — одиночное возникновение того, что заслуживает внимания, такого как изменение состояния триггера или обнаружение/авто-регистрация агента
    Action — предопределенные средства реагирования на событие.

    Действие состоит из операций (например отправка оповещений) и условий (когда осуществляется операция)
    Escalation — пользовательский сценарий для выполнения операций в действии; последовательность отправки оповещений/выполнений удаленных команд
    Media — способ доставки оповещений; канал доставки
    Remote command — предопределенная команда, которая будет автоматически выполнена на наблюдаемом узле сети при некоторых условиях
    Template — набор сущностей (элементы данных, триггеры, графики, комплексные экраны, правила низкоуровневого обнаружения) готовые к присоединению к одному или нескольким узлам сети Задача шаблонов повысить скорость развертывания задач мониторинга узла сети; кроме того делать более простым применение массовых изменений к задачам наблюдения. Шаблоны соединяются напрямую с отдельными узлами сети.
    Application — сгрупированные элементы данных в некую логическую группу
    Web scenario — один или несколько запросов HTTP для проверки доступности веб сайта

    Быстрый старт

    Самый простой способ проверить корректность установки и запуска мониторинга – настроить простую проверку характеристик удаленного хоста, например проверку доступности агента (agent.ping), а также уведомление пользователя в случае недоступности.

    Для этого необходимо:

    1. Создать пользователя. По умолчанию пользователю не задается предпочтительный способ доставки сообщений, поэтому необходимо его задать, например email для уведомлений по электронной почте. Также пользователю необходимо задать права на чтение для сервера, оповещения о недоступности которого пользователь будет получать. В противном случае Zabbix не сможет отправить оповещение
    2. Добавить удаленный хост, указав его имя, адрес, агентский порт и статус. Также его можно включить в одну или несколько групп серверов.
    3. Создать элемент данных — можно создать вручную или на основе шаблона. При ручной настройке необходимо указать название, тип, название ключа, тип возвращаемых данных.
    4. Добавить триггер – можно вручную задать выражение для проверки элемента данных или использовать триггер из шаблона.
    5. Настроить систему оповещений для сервера. Для оповещений по электронной почте необходимо указать параметры почтового сервера и аккаунта, от имени которого будут выполняться уведомления.
    6. Создать действие, определив для него операцию оповещения пользователя.

    После проделанных шагов достаточно остановить агента на удаленном хосте, после чего мы получим уведомление на адрес электронной почты, также мы увидим запись о произошедшем событии в панели управления Zabbix на вкладке Latest data – Events.

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

    Видеоматериал

    Небольшой видеообзор системы мониторинга Zabbix:

    Zabbix from Amigos Team on Vimeo.

    Источник: http://amigosteam.ru/blog/item/11-zabbix

    Ссылка на основную публикацию