Использование Zabbix API. Когда не хватает стандартной статистики
Возникла задача получить некоторую статистику из Zabbix, делюсь опытом получения данных из базы Zabbix через API средствами Python.
Куски кода будут для Python 2.7
Для работы с zabbix-api есть готовая библиотека py-zabbix, документация по ней доступна тут, но примеров там не много. Официальное руководство по Zabbix API.
Итак, после стандартной установки:
Пробуем подключиться к серверу Zabbix:
Формат ответа от сервера — JSON:
Скрипт печатает содержимое поля result:
Теперь можно приниматься за решение интересующей задачи. Задача — получить среднее значение Disk Idle Time со всех виртуальных машин за неделю (Пн-Пт) в рабочее время (с 10:00 до 19:00) за определенную неделю. Я не хочу заострять внимание на актуальности этих параметров, а просто поделиться опытом работы с Zabbix API на примере этой конкретной задачи.
Итак, виртуальные машины в Zabbix лежат в отдельной группе, для начала получим список доступных групп с помощью метода hostgroup.get:
Параметром output можно определить, какие поля вернет API:
Затем можно получить список хостов в конкретной группе с помощью метода host.get:
Параметр groupids определяет идентификатор группы:
Для получения списка items по определенному хосту используется метод item.get:
Как видно из ответа, выбранный хост имеет 2 диска, нужно вывести минимальное значение из нескольких. Для доступа к данным по items используется метод history.get. Следующий код не претендует на оптимальность, я только начал осваивать Python, но в целом с поставленной задачей скрипт справился.
Для метода history.get нужно определить следующие параметры:
- history — тип возвращаемого значения
- itemids — id интересующего item
- time_from — начало временного интервала
- time_till — конец временного интервала
В результате получаем разделенные запятой имя хоста, кол-во винтов и min idle time:
Zabbix API Introduction and Examples
This lesson was from a previous version of my course, which I’ve now made this video available to view for free.
The Zabbix Server also has an application programming interface (API). This allows you to programmatically configure and retrieve data from the Zabbix Server.
The reason for using the API is that you either want to create your own custom interface for your Zabbix Server, e.g., a new web interface, IOS or Android app, or integrate into another monitoring system. The Grafana tutorials from earlier are an example of using the Zabbix API to read the data and create custom dashboards.
In this lesson, we will connect to our API first using the Linux cURL commands, the simple API testing tool, and then we try and example using Python.
From the examples, you will have enough background information to know how to retrieve, add, delete and modify data in the Zabbix server.
When making calls to the API you need to supply a user authentication token. The first step is to get one.
Get Authentication Token
method : user.login
The authentication token is in the result value above, and you will need it for all other calls to the API.
With the token, we can now make another call to retrieve a list of all the hosts and see some info about them.
item.get
Этот метод позволяет получать элементы данных в соответствии с заданными параметрами.
Параметры
(объект) Параметры задают желаемый вывод.
Этот метод поддерживает следующие параметры.
| Параметр | Тип | Описание |
|---|---|---|
| itemids | строка/массив | Возврат элементов данных только с заданными ID. |
| groupids | строка/массив | Возврат только тех элементов данных, которые принадлежат узлам сети с заданных групп узлов сети. |
| templateids | строка/массив | Возврат только тех элементов данных, которые принадлежат заданным шаблонам. |
| hostids | строка/массив | Возврат только тех элементов данных, которые принадлежат заданным узлам сети. |
| proxyids | строка/массив | Возврат только тех элементов данных, которые наблюдаются заданными прокси. |
| interfaceids | строка/массив | Возврат только тех элементов данных, которые используют заданные интерфейсы узлов сети. |
| graphids | строка/массив | Возврат только тех элементов данных, которые используются в заданных графиках. |
| triggerids | строка/массив | Возврат только тех элементов данных, которые используются в заданных триггерах. |
| applicationids | строка/массив | Возврат только тех элементов данных, которые входят в заданные группы элементов данных. |
| webitems | флаг | Включение в результат веб элементов данных. |
| inherited | логический | Если задано значение true , возвращать только те элементы данных, которые унаследованы из шаблона. |
| templated | логический | Если задано значение true , возвращать только те элементы данных, которые принадлежат шаблонам. |
| monitored | логический | Если задано значение true , возвращать только активированные элементы данных, которые принадлежат узлам сети под наблюдением. |
| group | строка | Возврат только тех элементов данных, которые принадлежат группе с заданным именем. |
| host | строка | Возврат только тех элементов данных, которые принадлежат узлу сети с заданным именем. |
| application | строка | Возврат только тех элементов данных, которые входят в группу элементов данных с заданным именем. |
| with_triggers | логический | Если задано значение true , возвращать только те элементы данных, которые используются в триггерах. |
| selectHosts | запрос | Возврат узла сети, которому принадлежит элемент данных, в виде массива в свойстве hosts . |
| selectInterfaces | запрос | Возврат интерфейса узла сети, который используется элементом данных, в виде массива в свойстве interfaces . |
| selectTriggers | запрос | Возврат триггеров, которые используют элемент данных, в свойстве triggers . |
Этот параметр имеет следующие свойства:
type — (строка) Типы опций предобработки:
1 — Пользовательский множитель;
2 — Обрезка справа;
3 — Обрезка слева;
4 — Обрезка;
5 — Соответствие регулярному выражению;
6 — Двоичное в десятичное;
7 — Восьмеричное в десятичное;
8 — Шестнадцатеричное в десятичное;
9 — Простое изменение;
10 — Изменение в секунду.
Принимает массив, где ключи являются именами свойств и значения, которые являются либо одним значением, либо массивом сопоставляемых значений.
Возвращаемые значения
(целое число/массив) Возвращает либо:
- массив объектов;
- количество найденных объектов, если используется параметр countOutput .
Примеры
Поиск элементов данных по ключу
Получение всех элементов данных с узлов сети с ID «10084», которые имеют в ключе слово «system» и сортировка результата по имени.
Поиск зависимых элементов данных по ключу
Получение всех Зависимых элементов данных с узла сети с ID «10116», у которых в ключе имеется слово «apache».
Поиск элемента данных HTTP агента
Поиск элемента данных HTTP агента с типом post тела XML у конкретного id узла сети.
item.get
The method allows to retrieve items according to the given parameters.
This method is available to users of any type. Permissions to call the method can be revoked in user role settings. See User roles for more information.
Parameters
(object) Parameters defining the desired output.
The method supports the following parameters.
| Parameter | Type | Description |
|---|---|---|
| itemids | string/array | Return only items with the given IDs. |
| groupids | string/array | Return only items that belong to the hosts from the given groups. |
| templateids | string/array | Return only items that belong to the given templates. |
| hostids | string/array | Return only items that belong to the given hosts. |
| proxyids | string/array | Return only items that are monitored by the given proxies. |
| interfaceids | string/array | Return only items that use the given host interfaces. |
| graphids | string/array | Return only items that are used in the given graphs. |
| triggerids | string/array | Return only items that are used in the given triggers. |
| webitems | flag | Include web items in the result. |
| inherited | boolean | If set to true return only items inherited from a template. |
| templated | boolean | If set to true return only items that belong to templates. |
| monitored | boolean | If set to true return only enabled items that belong to monitored hosts. |
| group | string | Return only items that belong to a group with the given name. |
| host | string | Return only items that belong to a host with the given name. |
| evaltype | integer | Rules for tag searching. |
It has the following properties:
type — (string) The preprocessing option type:
1 — Custom multiplier;
2 — Right trim;
3 — Left trim;
4 — Trim;
5 — Regular expression matching;
6 — Boolean to decimal;
7 — Octal to decimal;
8 — Hexadecimal to decimal;
9 — Simple change;
10 — Change per second;
11 — XML XPath;
12 — JSONPath;
13 — In range;
14 — Matches regular expression;
15 — Does not match regular expression;
16 — Check for error in JSON;
17 — Check for error in XML;
18 — Check for error using regular expression;
19 — Discard unchanged;
20 — Discard unchanged with heartbeat;
21 — JavaScript;
22 — Prometheus pattern;
23 — Prometheus to JSON;
24 — CSV to JSON;
25 — Replace;
26 — Check for not supported value;
27 — XML to JSON.
params — (string) Additional parameters used by preprocessing option. Multiple parameters are separated by LF (\n)character.
error_handler — (string) Action type used in case of preprocessing step failure:
0 — Error message is set by Zabbix server;
1 — Discard value;
2 — Set custom value;
3 — Set custom error message.
Accepts an array, where the keys are property names, and the values are either a single value or an array of values to match against.
Return values
(integer/array) Returns either:
- an array of objects;
- the count of retrieved objects, if the countOutput parameter has been used.
Examples
Finding items by key
Retrieve all items used in triggers for specific host ID that have word «system.cpu» in the item key and sort results by name.
Finding dependent items by key
Retrieve all dependent items from host with ID «10116» that have the word «apache» in the key.