LINUX.ORG.RU

zabbix, вопросы по автообнаружению (LLD)

 , , ,


0

1

Подскажите по zabbix. Есть задача: динамически мониторить табличные пространства в БД Oracle и их динамику (размер). Т.е.
А) нужно автоматически определять текущий набор табличных пространств в базах (используя JSON формат обнаружения)
Б) отдавать по ним текущий размер (с этим пока и проблема)

Задачу (А) планируется решить так:
1. на агенте добавляем параметр:
UserParameter=oracle.tbs.discovery[*],script_name1
(пока скрипт фейковый, просто генерирует JSON формат данных. Заменю на реальные когда разберусь с zabbix)

вывод скрипта:

{
«data»:[

{ «{#TABLESPACE}»:«SYSTEM»},
{ «{#TABLESPACE}»:«TEMP»},
{ «{#TABLESPACE}»:«UNDOTBS»}

]
}

2. создаем правило обнаружения для хоста:

имя = tablespace_auto_discovery
тип = Zabbix agent
ключ = oracle.tbs.discovery
макрос = {#TABLESPACE}

3. создаем прототип данных для обнаружения:

имя = tablespace {#TABLESPACE}
тип = Zabbix agent
ключ = oracle.tbs.discovery[{#TABLESPACE},name]
тип = текст

Результат: в zabbix для хоста успешно добавляются параметры:
название = tablespace SYSTEM, ключ = oracle.tbs.discovery[SYSTEM,name]
название = tablespace TEMP, ключ oracle.tbs.discovery[TEMP,name]
название = tablespace UNDOTBS, ключ oracle.tbs.discovery[UNDOTBS,name]

Вопрос: как теперь решить задачу (Б) и на сервер передавать доп. данные по размеру этого динамического параметра (в моем случае размер табличного пространства)? Т.е. чтобы появился параметр с ключем oracle.tbs.discovery[SYSTEM,size] (а лучше oracle.tbs[SYSTEM,size]) и принимал целочисленные значения? Желательно чтобы агент сам отправлял этот параметр, а не сервер запрашивал с агента (zabbix_sender, zabbix trap?)

Думал сначала, что это делается по аналогии, но это очевидно не так. Когда я дополнительно другим параметром агента отправляю на сервер данные в JSON формате вида:

{
«data»:[

{ «{#TS_NAME}»:«SYSTEM», «{#TS_SIZE}»:«8» },
{ «{#TS_NAME}»:«TEMP», «{#TS_SIZE}»:«12» }

]
}

+ создаю правило обнаружения по фильтру #TS_SIZE + прототип данных , то значением является не число, а текст в JSON формате, т.е. по сути я реализовываю просто автообнаружение еще одного параметра, без получения его значения



Последнее исправление: alsarins (всего исправлений: 2)

У тебя проблемы в составлении sql запроса, который выберет данные из оракла? Посмотри в готовых шаблонах вроде zabora.

router ★★★★★
()
Ответ на: комментарий от router

Проблем с получением данных из БД никаких нет. У меня сейчас проблема с непониманием конфигурации zabbix, т.е. как передать данные «автообнаруженного» параметра отдельной цифровой метрикой на сервер, по которой можно будет строить графики и триггеры.

alsarins
() автор топика
Ответ на: комментарий от alsarins

update

.. либо, как настроить на сервере прототип данных, чтобы он автоматически запрашивал по автообнаруженному параметру доп. данные. Сейчас нужен oracle.tbs.[{макроимя},size], завтра будут total, free, percent_used, sum_blocks и т.п.

alsarins
() автор топика
Ответ на: комментарий от alsarins

Есть 2 варианта отправки данных в zabbix

1) сервер запрашивает данные у клиента. Обычно тип item'а - zabbix agent.

Твой скрипт

UserParameter=oracle.tbs.discovery

  • ,script_name1

Должен быть не фейковым, проверять входные параметры и выдавать в соответствии с ними информацию.

Сервер отправляет запрос на клиент, скрипт на клиенте в соответствии с параметрами делает запрос к БД и возвращает ответ на STDOUT ( Только один параметр, никакой дополнительной информации или ошибок )

3.1 создаем прототип данных для обнаружения:

имя = tablespace {#TABLESPACE}
тип = Zabbix agent
ключ = oracle.tbs.discovery[getTbsSize,{#TABLESPACE}]
тип = unsigned

Для графика создаёшь прототип в том же discovery, добавляешь на прототип графика прототип item'ов

2) Клиент сам по собственной инициативе отправляет данные на сервер.

На стороне сервера item'ы ( прототипы item'ов ) имеют тип «trapper». Сервер ничего не делает для получения такой информации, просто ждёт пока клиент её пришлёт.

На стороне клиента из-под cron'а выполняется скрипт, который запрашивает данные у БД и шлёт на сервер zabbix через zabbix_send

Первый вариант предпочтительнее, если нужно менять интервалы запуска централизованно, на стороне сервера. Но он тяжелее, и предъявляет более высокие требования к твоему скрипту ( он должен выполниться в течение TIMEOUT, по умолчанию - 3 секунды ). Плюс, большое количество запросов к клиенту создаёт высокую нагрузку на клиента. Если, например, тебе раз в минуту нужно собирать сотню item'ов, лучше это делать через zabbix_send + trapper.

router ★★★★★
()
Ответ на: update от alsarins

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

Просто создаёшь дополнительные item prototype

router ★★★★★
()
Ответ на: комментарий от router

Спасибо за информацию, ушел гуглить в сторону zabbix_sender. В оф.документации по нему мало информации.

Еще один вопрос по обнаружению, в этот раз не параметров, а хостов. Т.к. на хосте может быть несколько БД, то хотелось их изначально также автоматически «обнаруживать», и добавлять все базы из /etc/oratab в виде _отдельных_ записей Zabbix вида <DB_name>_<hostname>. Затем включать их в общую группу Oracle Databases, к примеру, и добавлять им определенные шаблоны.

У меня сейчас версия 2.0.9, и сейчас в обнаружении хостов я могу оперировать только 1 записью, но не JSON-форматом? Пробовал указывать уникальность обнаружения по zabbix agent- параметрам, возвращающим набор данных, но кажется это не работает с хостами.

alsarins
() автор топика
Ответ на: комментарий от alsarins

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

Прототипы узлов сети

Низкоуровневое обнаружение позволяет создавать узлы сети. Эта функциональность может быть использована для автоматического обнаружения виртуальных машин основываясь на информации полученной от гипервизора. Открывает возможности для создания правил для мониторинга и автообнаружения виртуальных машин Xen, KVM, VirtualBox, Linux containers и других, а также элементов облачной инфраструктуры.
alsarins
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.