我正在尝试做的是使用正则表达式在 SCOM unix 日志监控中执行特定事件(例如事件代码)的抑制。
表达式为:
((?i:warning)(?!(.*1222)|(.*1001)))
即在日志中搜索“警告”,但如果在线上存在事件 1222 或 1001,则不匹配。
我在创建规则时使用了 SCOM 中的内置测试功能,并且带有示例日志的测试按预期返回,但是当我将测试行注入 unix 日志时,不会生成任何警报。
我怀疑这可能是系统不接受的语法(它正在运行 RedHat 6 )我已经使用正则表达式工具对其进行了测试,并且看起来可以按预期工作。
当我尝试在服务器上对其进行测试时,我得到:
[root@bld02 ~]# grep ((?i:warning)(?!(.*1222)|(.*1001))) /var/log/messages
-bash: !: event not found
[root@bld02 ~]# tail /var/log/messages
Nov 13 15:07:26 bld02 root: SCOM Test Warning Event ID 1001 Round 18
Nov 13 15:07:29 bld02 root: SCOM Test Warning Event ID 1000 Round 18
Nov 13 15:07:35 bld02 root: SCOM Test Warning Event ID 1002 Round 18
所以我期待2场比赛。
正则表达式应该是什么?我已经测试了许多变体,例如:
.*((?i:warning)(?!(.*1222)|(.*1001))).*
,使用了-Rn
选项,使用了引号等,但是当我手动运行它时没有任何匹配项......我错过了什么?