Добрый день!
Вопрос к специалистам по системе мониторинга zabbix.
У меня есть некий скрипт на одном сервере, который собирает статистику. Статистика довольно простая - количество подключений к серверам. Этот скрипт возвращает забиксу данные следующего вида:
"сервер1 72
сервер2 0
сервер3 25"
и т.д.
Заббикс, всё это дело принимает в общий айтем и потом через зависимые айтемы передают на дашборд после предобработки.
Предобработка, в зависимых айтемах выглядит следующим образом:
Тип:«регулярное выражение»
Параметры: «сервер1\s([0-9]+)»
Вывод: «\1».
т.е. на дашборд приходят только цифровые значения получаемых данных.
Тут вопросов нет, всё работает как нужно.
Но вот бывают ситуации, когда, например, какой-либо сервер недоступен, ну перегружается или просто выключен, тогда скрипт передаёт следующее:
«сервер1 ОШИБКА: 23»
И по коду ошибки мы понимаем, что с ним происходит.
И вот тут начинаются проблемы с zabbix, он не может отобразить данную ошибку на дашборде, потому как зависимые айтемы имеют тип информации «Numeric (unsigned)», можно было бы в скрипте убрать «ОШИБКА:» и тогда будет всё работать, но мы не будем понимать - это сейчас 23 пользователя на сервере или ошибка №23.
Есть мысль обойти эту проблему путём преобразования значений, но тогда нужно использовать второе регулярное выражение. Я создал вот такое выражение:
Тип:«регулярное выражение»
Параметры: «сервер1\s([A-Z:]+)\s([0-9]+)»
Вывод: «666666»
В преобразовании, я задал, что коду «666666» (такого количества подключений быть не может) соответствует «ОШИБКА: 23».
Выражение работает отлично, дашборд всё показывает, но только если это выражение в единственном экземпляре.
Если вставить оба выражения, то при тестировании в пошаговом режиме, выполняется только первый шаг, будь там число или ошибка, просто при ошибке выражение фейлится и на второе не переходит.
Как заставить проверять оба выражения?
Ну или может вообще какое-то другое решение подскажете…
zabbix