api jsonrpc php zabbix

Api jsonrpc php zabbix

The 3.x versions of this package are compatible and tested with Zabbix™ from version 3.0.0 up to 3.4.15. If you are migrating this package from 2.x to 3.0, please follow the upgrade notes.

api jsonrpc php zabbix api jsonrpc php zabbix api jsonrpc php zabbix

PhpZabbixApi is an open-source PHP SDK to communicate with the Zabbix JSON-RPC API.

Because this package is generated directly from the origin Zabbix PHP front-end source code, each real Zabbix JSON-RPC API method is implemented directly as a PHP method. This means PhpZabbixApi is IDE-friendly, because you’ve a declared PHP method for each API method, and there are no PHP magic functions or alike.

PhpZabbixApi is licensed under the MIT license.

Make sure the version of the package you are trying to install is compatible with your Zabbix API version. If you aren’t sure about your Zabbix API version, send a request to the apiinfo.version method:

Replace with your Zabbix API endpoint (for example, «https://your-zabbix-domain/api_jsonrpc.php»). Then, you will be able to install the PhpZabbixApi version that is better for you:

All tagged versions can be installed, for example:

If you’re looking for more bleeding-edge versions (e.g. for testing), then you could also use development branches by setting a specific stability flag in the version constraint:

To translate a Zabbix API call into an SDK method call, you can simply do the following:

Zabbix APIPHP SDK
graph.getgraphGet()
host.massUpdatehostMassUpdate()
dcheck.isWritabledcheckIsWritable()

The API can also work with HTTP Basic Authroization, you just have to call the constructor with additional parameters:

If you already have an authentication token, you can pass that value as argument 6 in order to avoid the library to perform the request for the user.login method for requests that require an authenticated user. If the token is valid, you can omit the argument 2 and 3, since they will be not required:

Internally, this package uses the Guzzle HTTP client to perform the requests against the Zabbix API. In order to give you more control and flexibility about the client configuration, you can pass your own implementation of \GuzzleHttp\ClientInterface as argument 7 for ZabbixApi :

Additionally, if you prefer to provide options for the built-in client instead of provide your own client, you can pass an options array as argument 8:

Please, note that argument 7 and 8 cannot be used together. You must choose between one of both.

Authentication token caching

In order to improve the response times avoiding the call for the user.login method in each request, you can configure a PSR-6 caching backend for the authentication token. This way the SDK will get the cached token after the first login and until its expiration. The following example uses a fictional Psr6FilesystemAdapter class, but you can choose any available implementation:

Here’s a simple request to fetch all defined graphs via graph.get API method:

By default, the values will be returned using an associative array, but you can always choose to get instances of \stdClass instead, using false as argument 3 in the method call:

Request with parameters

Most of the time you want to define some specific parameters. Here’s an example to fetch all CPU graphs via graph.get API method:

Define default parameters

Sometimes you want to define default parameters, which will be included in each API request. You can do that by defining the parameters in an array via setDefaultParams() :

Get associative / un-indexed array

By default all API responses will be returned in an indexed array.

So if you then looking for a specific named graph, you’ve to loop through the indexed array and compare the name attribute of each element. This can be a bit of a pain, and because of that, there’s a simple way to get an associative array instead of an indexed one. You just have to pass the argument 2 for the method, which is the name of attribute you’d like to use as a key in the resulting array.

Here’s an example to fetch all graphs in an associative array, with the graph’s name as array key:

Источник

Парсинг и передача json данных в Zabbix

api jsonrpc php zabbix

Продолжаю серию рассказов на тему настройки различных метрик в системе мониторинга заббикс. Сегодня расскажу, как быстро, легко и удобно передавать данные в json формате в zabbix и там их обрабатывать. Развитие функционала в последних версиях позволяют работать с json без лишних костылей и самописных скриптов.

Передача json данных в zabbix

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

То же самое на Debian 10, если предпочитаете его:

Для примера возьму мониторинг работы ноды Bitcoin. В данном случае это совершенно не принципиально, так как подход к парсингу json в zabbix одинаковый везде. Формат json сейчас очень популярен. Большое число сервисов его поддерживают для вывода информации или логов. У биткоин ноды есть команды для вывода информации о состоянии ноды. Вывод идет в формате json. Вот пример:

В своем примере я покажу, как из этого вывода парсить значения blocks и headers, хранить их в отдельных итемах в zabbix, чтобы дальше использовать в триггерах. По аналогии можно будет работать с другими значениями.

Настройка парсинга json в zabbix будет состоять из следующих шагов:

Проверьте, что скрипт выдает корректную строку json. Далее создаем UserParameter. Я предпочитаю их хранить в разных конфигах, разделяя по функционалу. Создаю файл /etc/zabbix/zabbix_agentd.d/btc.conf следующего содержания:

Сохраняем и перезапускаем zabbix-agent. Проверяем, что json корректно передается в нужном виде, без ошибок и прочих проблем:

На выходе должны увидеть тот же самый json.

api jsonrpc php zabbix

Zabbix агент подготовили. Для продолжения настройки, переходим на сервер.

Настройка zabbix server для мониторинга по json

На сервере создаем шаблон и добавляем в него элемент данных.

api jsonrpc php zabbix

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

api jsonrpc php zabbix

В моем случае значение, которое я буду парсить из json, числовое, поэтому я выбираю соответствующий тип. У вас он может быть другой.

Дальше переходим на вкладку Preprocessing (предобработка):

api jsonrpc php zabbix

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

api jsonrpc php zabbix

Я убедился, что все верно. Сохраняем этот итем и ждем, когда он будет обработан. В latest data увидите значения из json строки.

api jsonrpc php zabbix

По аналогии добавляете остальные элементы. Таким образом вы можете распарсить полностью json в отдельные итемы и использовать их дальше в триггерах и на графиках.

Заключение

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

Источник

Обнаружение + Zabbix API под Java

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

api jsonrpc php zabbix

Так выглядит обнаруженный и созданный узел. Мы видим, что имена новым узлам проставляются в соответствии с IP узла, как и способ подключения – по умолчанию по IP. Обнаружение позволяет избавиться от рутиной и долгой работы по добавлению новых узлов, однако наименования узлов не несут никакой смысловой нагрузки. Также способ по подключению через IP неудобен тем, что при смене IP серверов вам придётся снова на всех узлах менять IP. Способ подключения по DNS решит проблему с изменяющимися IP. Что же с этим можно сделать? Можно написать скрипт обновления данных напрямую в базе Zabbix, что не очень правильно.

А что если переименовать название узлов и изменить параметры подключения через API? Для работы с Zabbix API написаны библиотеки под разные языки, которые можно посмотреть здесь. Я выбрал библиотеку под Java, создал проект в IDEA, подключил библиотеку и начал изучать документацию с официального сайта для Zabbix v.2.0.8.
Из каких объектов состоит узел?

api jsonrpc php zabbix

Как показано на рисунке, интересующие нас поля принадлежат двум объектам: Host и Host interface. Для решения задачи нужно:

Первое, что необходимо сделать – это организовать подключение к серверу Zabbix.

Затем авторизоваться на сервере Zabbix под пользователем.

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

Результатом этого примера станет получение объектов Host с техническими названиями «Zabbix server» и «Linux server» и полными наборами свойств этих узлов.

Используя этот пример, формируем запрос. В скаченной библиотеке есть конструктор запросов, которому нужно передать название метода и параметры запроса. В примере выше видим, что методу нужно передать параметр «host» c текущем названием узла в качестве значения параметра «filter».

Чтобы вызвать сформированный метод и получить ответ вызываем метод call().

Полученный ответ будет выглядеть так:

Чтобы вывести полученный ответ на экран, достаточно передать полученный ответ в метод println();

Получаем идентификатор узла из полученного ответа:

Идентификатор узла найден. Используя его, можем переименовать узел. Для этого нужно вызвать метод «host.update» с параметрами » hostid «,» host»,» name».

api jsonrpc php zabbix

Половина задачи выполнено. Осталось найти объект Host interface и изменить его свойства. Для поиска объекта Host interface используем найденный идентификатор узла.

Найденному объекту изменяем свойства «dns», «useip».

api jsonrpc php zabbix

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

Получает IP и меняет свойства узла по описанному выше алгоритму. Ниже приведен листинг.

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

Кто-то может сказать, что было бы проще, используя API, сразу создавать узлы со всеми нужными параметрами. И я соглашусь. Немного модифицировав приведенный листинг, можно переписать код не на изменение свойств, а на создание узлов с нужными параметрами без использования «обнаружения» Zabbix. Так я и сделаю в будущем.

Источник

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

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

api jsonrpc php zabbix

Куски кода будут для 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 нужно определить следующие параметры:

В результате получаем разделенные запятой имя хоста, кол-во винтов и min idle time:

Источник

Zabbix Documentation 1.8

Sidebar

Table of Contents

Начало работы с Zabbix API

Что такое Zabbix API

Пример сессии

Для быстрого обзора, взгляните на пример сессии Zabbix API или читайте ниже для более подробного объяснения.

Использование JSON RPC

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

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

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

Базовый формат запроса

Аутентификация

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

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

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

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

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

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

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

api jsonrpc php zabbix

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

Примеры использования и общие параметры

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

Получение списка групп узлов сети

Вот простой запрос на получение всех доступных групп узлов сети с сортировкой по имени Обратите внимание, что “method” содержит “hostgroup.get”, фактическую процедуру которую мы выполняем, и “params” содержащий дополнительные опции.

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

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

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

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

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

Создание узла сети

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

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

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

Обновление элемента данных

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

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

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *