Создание шаблона для Zabbix на примере DVR Trassir SDK

в 12:44, , рубрики: json, trassir, zabbix, Регулярные выражения, системное администрирование

Цель создания шаблона — автоматизация мониторинга серверов системы видеонаблюдения на основе регистраторов 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 могут быть любые (на самом деле нет, но опустим этот момент) символы, а также перевод строки. Эти варианты символов, которые обозначают точкой или управляющего символа перевода строки n указываются в круглых скобках через вертикальную черту. За скобками стоит звёздочка, которая говорит о том, что найденный символ или перевод строки могут повторяться бесконечное число раз. Далее идет закрывающаяся фигурная скобка. Вывод означает что будут выведены все найденные последовательности.

Далее создается зависимый элемент данных для которого основной элемент данных указывается полученный ранее ответ в формате JSON и указывается предобработка с шагом “Путь JSON” который позволяет обратиться к любому элементу данных через указание пути JSON. В нашем примере все данные лежат на верхнем уровне, поэтому указываем $.disks и так далее для всех элементов.

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

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

Указанный шаблон доступен на портале обмена share.zabbix.com.

Автор: vanomel

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js