Назад | Перейти на главную страницу

Необходимо иметь недопустимые символы в Nagios SERVICEOUTPUT и LONGSERVICEOUTPUT

У меня есть Perl-скрипт в стиле Nagios check_log, который вызывается через check_by_ssh. Записи файла журнала могут содержать такие символы, как '>' и '$', которые являются опасными и не разрешены в SERVICEOUTPUT или LONGSERVICEOUTPUT. На выходе эти символы удаляются, что затрудняет чтение предупреждений. Есть ли обходной путь для экранирования символов в SERVICEOUTPUT или возможность настроить это опасное действие?

Удалите символы из illegal_macro_output_chars вариант конфигурации.

Вы можете обойти макросы Nagios и использовать системные переменные $${NAGIOS_SERVICEOUTPUT} и $${NAGIOS_LONGSERVICEOUTPUT} вместо этого введите:

command_line    /usr/bin/printf "%b" "$${NAGIOS_SERVICEOUTPUT}" | /usr/bin/mail ...

в определении команды. Этот трюк использует тот факт, что существует системная переменная NAGIOS_FOO для каждого макроса Nagios $FOO$. Больше информации.

(Параметр illegal_macro_output_chars мне кажется, работает только при отображении значений в веб-интерфейсе Nagios. Кажется, не действует при использовании в определении команды в command_line - в этом случае чувствительные символы все же были удалены.)

Попробуйте экранировать вывод с помощью функции perl. Без скриптов я не могу предложить вам решение, но вот пример:

  sub esc_chars {
  # will change, for example, a!!a to a\!\!a
     @_ =~ s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'"])/\\$1/g;
     return @_;
  }

или просто удалить их:

  sub esc_chars {
  # will change, for example, a!!a to a\!\!a
     @_ =~ s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'"])//g;
     return @_;
  }