Цель создания шаблона — автоматизация мониторинга серверов системы видеонаблюдения на основе регистраторов Trassir под управлением одноименного программного обеспечения на основе linux через web-сервер SDK.
Trassir SDK включается в настройках веб-сервера, там же необходимо указать пароль. Согласно документации производителя для снятия показаний о работе сервера не нужно создавать отдельную учетную запись.
Trassir SDK предлагает доступ к состоянию сервера через запрос
https://{ip адрес сервера }:{порт подключения}/health?password={пароль SDK}
При открытии этой ссылки через браузер появляется сообщение о том, что используемый сертификат небезопасен и для продолжения необходимо следовать указаниям браузера.
На конкретном примере в теле ответа получим следующее:
{
"disks": "1",
"database": "1",
"channels_total": "13",
"channels_online": "13",
"uptime": "882232",
"cpu_load": "33.96",
"network": "1",
"automation": "1",
"disks_stat_main_days": "16.41",
"disks_stat_priv_days": "0.00",
"disks_stat_subs_days": "16.41"
}
/*
Meanings of values:
-1 - undefined value
0 - bad health (error)
1 - good health (ok)
Values for channels are channel counters.
Value of cpu_load is given in percents.
Первая часть вывода от символа { до символа } соответствует документации и является стандартизированным выводом формата JSON, что соответствует документации, а далее идет описание вывода, которое под стандарт не подходит.
Ранее для того чтобы использовать такой вывод в системе мониторинга Zabbix необходимо было писать свой скрипт, который бы использовался на агенте и получал нужные данные. При этом подходе либо нужно хранить файл ответа и следить за его актуальностью, либо запрашивать каждый элемент отдельно, т.е. использовать 11 запросов вместо 1.
В версии Zabbix 4.0 появился тип элемента данных HTTP агент, который позволяет получать данные по протоколам http и https и обрабатывать их, а также зависимые элементы, которые вычисляются из основных.
Идея состоит в том, чтобы получить в текстовый элемент данных ответ сервера и далее уже из него выделить нужные элементы данных.
Первоначально определим макросы номера порта и пароля для универсальности и безопасности нашего шаблона.
Создаем шаблон и добавляем элемент данных с типом “HTTP агент”, ключом по желанию, URL https://{HOST.IP}:{$TRASSIR_SDK_PORT}/health и полем запроса password {$TRASSIR_SDK_PASS}. Здесь {HOST.IP} является макросом который при добавлении шаблона на узел будет преобразован в IP адрес хоста.
Как мы уже выяснили экспериментальным путём ранее этот запрос не соответствует в полной мере JSON формату и выделить из него данные просто так не получится.
Воспользуемся новым функционалом Zabbix и во вкладке “предобработка” шаблона элемента данных добавим регулярное выражение {(n|.)*} с выводом которое вернет только данные формата JSON.
Далее создается зависимый элемент данных для которого основной элемент данных указывается полученный ранее ответ в формате JSON и указывается предобработка с шагом “Путь JSON” который позволяет обратиться к любому элементу данных через указание пути JSON. В нашем примере все данные лежат на верхнем уровне, поэтому указываем $.disks и так далее для всех элементов.
Остается только создать триггеры которые будут проверять наличие новых данных, их вхождение в нормальные диапазоны, а также по желанию графики.
Получается, что мы очень легко и быстро штатными методами Zabbix получили данные с внешней системы, вывод которой не в полной мере соответствует стандарту. Отсутствие внешних скриптов упрощает понимание системы мониторинга и повышает простоту её обслуживания.
Указанный шаблон доступен на портале обмена share.zabbix.com.
Автор: vanomel