У меня есть 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 @_;
}