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

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

我有一个 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 @_;
  }

相关内容