在Nagios SERVICEOUTPUT和LONGSERVICEOUTPUT中需要有非法字符

我有一个通过check_by_ssh调用的Nagios check_log风格的perl脚本。 日志文件条目可以包含'>'和'$'等字符,这些字符在SERVICEOUTPUT或LONGSERVICEOUTPUT中是危险的,不允许的。 输出是剥离这些字符使警报难以阅读。 是否有一个解决方法来转义SERVICEOUTPUT中的字符,或select这个危险的活动?

illegal_macro_output_charsconfiguration选项中删除字符。

您可以跳过Nagiosmacros,并改用系统variables$${NAGIOS_SERVICEOUTPUT}$${NAGIOS_LONGSERVICEOUTPUT} ,即input:

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

在命令定义中。 这个技巧利用了每个Nagiosmacros$FOO$都存在系统variablesNAGIOS_FOO事实。 更多信息。

(参数illegal_macro_output_chars在我看来只能在Nagios web界面显示值时才起作用,在command_line中定义命令时似乎没有效果 – 在这种情况下敏感字符仍然被删除。

尝试用perl函数转义输出。 没有脚本我不能提供解决scheme给你,但这里是一个例子:

  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 @_; }