我有一个 Nagios check_log 样式的 perl 脚本,通过 check_by_ssh 调用。日志文件条目可以包含诸如“>”和“$”之类的字符,这些字符很危险,不允许出现在 SERVICEOUTPUT 或 LONGSERVICEOUTPUT 中。输出会删除这些字符,导致警报难以阅读。是否有解决方法来转义 SERVICEOUTPUT 中的字符,或者是否有选项来禁用这种危险活动?
答案1
从配置选项中删除字符illegal_macro_output_chars
。
答案2
您可以绕过 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
- 在这种情况下敏感字符仍然会被删除。)
答案3
尝试使用 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 @_;
}