Я использую Zabbix 2.0.4 для мониторинга нескольких приложений Java. Большинство значений экспортируются через JMX. Один из этих экспортируемых атрибутов представляет собой строку, имеющую следующую структуру: [IP_1], [порт_1], [ms_time_1]; [IP_2], [port_2], [ms_time_2]; например:
192.168.105.20,5060,15638;192.168.105.30,5060,9753;
Я хочу создать триггер на основе значения ms_time для данного IP-адреса. Моя первая проблема: как мне получить это значение из строки? У меня есть это регулярное выражение, которое фиксирует правильное число, когда я тестирую его в нескольких инструментах проверки регулярных выражений:
192\.168\.105\.20,[\d]+,([\d]+)
Но почему-то это не работает в Zabbix. Я пробовал разные версии регулярного выражения, например. используя [0-9] или [: digit:] вместо [\ d], но безрезультатно.
Мой триггер должен стать активным, когда значение ms_time превысит 15000, поэтому в настоящее время все мое определение триггера выглядит так:
{MY_HOST:jmx["com.example:type=Attributes",StringValue].regexp("192\.168\.105\.20,[\d]+,([\d]+)")}>15000
Я не смог найти ни одного примера, где регулярное выражение использовалось для извлечения значения из строки и использования этого значения для дальнейшей обработки.
С помощью ответа Асавельева мне наконец удалось создать рабочее выражение триггера. В моем случае проверка длины ms_time не работает, но возможна проверка значения каждой цифры. С ведущими нулями это выглядит примерно так:
{MY_HOST:jmx["com.example:type=Attributes",StringValue].regexp("192.168.105.20,
[[:digit:]]+,((0[0-9])|(1[0-4]))[[:digit:]][[:digit:]][[:digit:]];")}=0
Это должно соответствовать любому числу <15000. Конечно, другим решением было бы перевернуть все это и искать любое совпадение> = 15000 ...
Так что еще раз спасибо и будем надеяться, что эти запросы функций скоро будут реализованы! ;-)
Функция regexp
возвращает 1, если значение элемента соответствует регулярному выражению, указанному в качестве аргумента, и возвращает 0 в противном случае. Он не возвращает извлеченное значение.
В общем, то, что вы пытаетесь сделать, в настоящее время невозможно, но есть два запроса на добавление функций, которые могут сделать это возможным в будущем: ZBXNEXT-1638 (сохранить все значение, но извлечь часть информации позже) и ZBXNEXT-1427 (извлеките информацию при получении).
В качестве обходного пути, если пороговое значение для ms_time
будет круглым значением (скажем, 10000), можно было бы запускать на основе ms_time
длина:
192\.168\.105\.20,[\d]+,([\d]{5,})