Помогите пожалуйста разобраться, как настроить LLD для случая externalscripts.
Узлы для мониторинга поддерживают интерфейс RedFish, но в Zabbix этот интерфейс не реализован, приходится делать внешнюю проверку.
Я реализовал скрипт с использованием curl и jq утилит, который принимает в качестве аргумента ip-адрес хоста и делает https запрос с фиксированным логином и паролем на заданный узел, получает JSON объект и упрощает его до требуемого списка словарей в Zabbix.
Поместил скрипт sensors.sh в каталог /usr/lib/zabbix/externalscripts
Пока удалось добиться, получать JSON как текст в элемент данных.
Для этого я создал шаблон, в нем создал элемент данных типа externalscripts
Key = sensors.sh[{HOST.IP}]
Тип данных = текст
Протестировал - получил строку JSON следующего вида
[
{
"{#SENSOR}": "Core_1_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "Core_2_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "Core_3_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "Core_4_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "Core_5_CPU1",
"{#VALUE}": 40
},
{
"{#SENSOR}": "Core_6_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "DIMM_A1_CPU1",
"{#VALUE}": 32
},
{
"{#SENSOR}": "DTS_CPU1",
"{#VALUE}": 41.079
},
{
"{#SENSOR}": "Die_CPU1",
"{#VALUE}": 41.094
}
]
Создал узел сети с IP адресом и связал его с шаблоном. В результате получаю в базу данных поток JSON-текстов. Но мне надо не это.
Мне нужно, чтобы для каждого узла, для которого применен шаблон, при получении очередного JSON автоматически создавались или обновлялись элементы данных с именами из {#SENSOR} и значениями из {#VALUES} и накапливалась их история, а текстовый исходник JSON не сохранялся. Элементов данных много, в данном примере только часть из них, поэтому важно чтобы элементы данных создавались и обновлялись автоматически.
Я попробовал реализовать это через LLD, прочитав естественно документацию по LLD, externalscripts и прочее, но ничего не получилось. В документации описываются только стандартные случаи и встроенные скрипты и макросы, а как быть в данном случае совершенно не понятно.
Во всех попытках получал ошибки синтаксиса ключа. И вообще логика LLD осталась непонятной. В данном случае озадачивает форма ключа, ведь во всех местах - в элементе данных, в правиле обнаружения, в прототипе элемента данных, в основном и зависимом элементе, в общем везде, приходится дублировать вызов внешнего скрипта с параметром, т.к. другого вида ключа не просматривается. Это очень озадачивает. И ничего не получается.
Узлы для мониторинга поддерживают интерфейс RedFish, но в Zabbix этот интерфейс не реализован, приходится делать внешнюю проверку.
Я реализовал скрипт с использованием curl и jq утилит, который принимает в качестве аргумента ip-адрес хоста и делает https запрос с фиксированным логином и паролем на заданный узел, получает JSON объект и упрощает его до требуемого списка словарей в Zabbix.
Поместил скрипт sensors.sh в каталог /usr/lib/zabbix/externalscripts
Пока удалось добиться, получать JSON как текст в элемент данных.
Для этого я создал шаблон, в нем создал элемент данных типа externalscripts
Key = sensors.sh[{HOST.IP}]
Тип данных = текст
Протестировал - получил строку JSON следующего вида
[
{
"{#SENSOR}": "Core_1_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "Core_2_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "Core_3_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "Core_4_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "Core_5_CPU1",
"{#VALUE}": 40
},
{
"{#SENSOR}": "Core_6_CPU1",
"{#VALUE}": 39
},
{
"{#SENSOR}": "DIMM_A1_CPU1",
"{#VALUE}": 32
},
{
"{#SENSOR}": "DTS_CPU1",
"{#VALUE}": 41.079
},
{
"{#SENSOR}": "Die_CPU1",
"{#VALUE}": 41.094
}
]
Создал узел сети с IP адресом и связал его с шаблоном. В результате получаю в базу данных поток JSON-текстов. Но мне надо не это.
Мне нужно, чтобы для каждого узла, для которого применен шаблон, при получении очередного JSON автоматически создавались или обновлялись элементы данных с именами из {#SENSOR} и значениями из {#VALUES} и накапливалась их история, а текстовый исходник JSON не сохранялся. Элементов данных много, в данном примере только часть из них, поэтому важно чтобы элементы данных создавались и обновлялись автоматически.
Я попробовал реализовать это через LLD, прочитав естественно документацию по LLD, externalscripts и прочее, но ничего не получилось. В документации описываются только стандартные случаи и встроенные скрипты и макросы, а как быть в данном случае совершенно не понятно.
Во всех попытках получал ошибки синтаксиса ключа. И вообще логика LLD осталась непонятной. В данном случае озадачивает форма ключа, ведь во всех местах - в элементе данных, в правиле обнаружения, в прототипе элемента данных, в основном и зависимом элементе, в общем везде, приходится дублировать вызов внешнего скрипта с параметром, т.к. другого вида ключа не просматривается. Это очень озадачивает. И ничего не получается.
Comment