Logstash 正则表达式匹配所有没有一定数量分隔符的消息
Logstash regex to match all messages that dont have a certain number of delimiters
这似乎是一个非常简单的问题,但在这一点上我想我只需要第二双眼睛。我有 filebeat 日志消息进入 logstash 管道。当您包含异常的堆栈跟踪时,这些消息将有多行。下面是几个例子。
code
BL: | LL: ERROR | TS: random value | MSG: Payment Type 2 | :EL
BL: | LL: ERROR | TS: 2020-05-03 09:06:29,932 | AR: 38.0.0.51 | LOC: 00742 | USER:
DASHBOARD_REFRESH | HOST: 0.0.0.0 | DC: null | MSGID: 1231456478912314869156: |SC:
some.java.class | MSG: SOME useful ERROR Message |
Exception in thread "main" java.lang.NullPointerException: Fictitious NullPointerException
at StackTraceExample.method111(StackTraceExample.java:15)
at StackTraceExample.method11(StackTraceExample.java:11)
at StackTraceExample.method1(StackTraceExample.java:7)
at StackTraceExample.main(StackTraceExample.java:3)
:EL
code
我想匹配第一条消息,确定它没有恰好有 11 个管道来添加标签 "Delimiter Error" 并允许第二条消息继续通过我的管道。该表达式实际上会使 logstash 进程崩溃。
code
filter {
if [message] =~ /^(\|{0,10}|\|{12,})$/{
mutate {
add_tag => [ "Delimiter Error" ]
}
}
}
code
当前模式^(\|{0,10}|\|{12,})$
匹配连续的0-10个或超过12个管道,并且不会匹配任何其他字符。
如果要匹配包含一个管道但不包含 11 个管道的字符串:
^(?!(?:[^|\r\n]*\|){11}[^|\r\n]*$)[^\r\n|]*\|.*$
^
字符串开头
(?!
否定前瞻
(?:[^|\r\n]*\|){11}[^|\r\n]*$
匹配 11 个管道并断言字符串结束
)
关闭前瞻
[^\r\n|]*
匹配除换行符或竖线以外的任何字符
\|.*
匹配一个管道,匹配0+次换行
$
字符串结束
这似乎是一个非常简单的问题,但在这一点上我想我只需要第二双眼睛。我有 filebeat 日志消息进入 logstash 管道。当您包含异常的堆栈跟踪时,这些消息将有多行。下面是几个例子。
code
BL: | LL: ERROR | TS: random value | MSG: Payment Type 2 | :EL
BL: | LL: ERROR | TS: 2020-05-03 09:06:29,932 | AR: 38.0.0.51 | LOC: 00742 | USER:
DASHBOARD_REFRESH | HOST: 0.0.0.0 | DC: null | MSGID: 1231456478912314869156: |SC:
some.java.class | MSG: SOME useful ERROR Message |
Exception in thread "main" java.lang.NullPointerException: Fictitious NullPointerException
at StackTraceExample.method111(StackTraceExample.java:15)
at StackTraceExample.method11(StackTraceExample.java:11)
at StackTraceExample.method1(StackTraceExample.java:7)
at StackTraceExample.main(StackTraceExample.java:3)
:EL
code
我想匹配第一条消息,确定它没有恰好有 11 个管道来添加标签 "Delimiter Error" 并允许第二条消息继续通过我的管道。该表达式实际上会使 logstash 进程崩溃。
code
filter {
if [message] =~ /^(\|{0,10}|\|{12,})$/{
mutate {
add_tag => [ "Delimiter Error" ]
}
}
}
code
当前模式^(\|{0,10}|\|{12,})$
匹配连续的0-10个或超过12个管道,并且不会匹配任何其他字符。
如果要匹配包含一个管道但不包含 11 个管道的字符串:
^(?!(?:[^|\r\n]*\|){11}[^|\r\n]*$)[^\r\n|]*\|.*$
^
字符串开头(?!
否定前瞻(?:[^|\r\n]*\|){11}[^|\r\n]*$
匹配 11 个管道并断言字符串结束
)
关闭前瞻[^\r\n|]*
匹配除换行符或竖线以外的任何字符\|.*
匹配一个管道,匹配0+次换行$
字符串结束