Подскажите по 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 формате, т.е. по сути я реализовываю просто автообнаружение еще одного параметра, без получения его значения