regex - Logstash 正则表达式匹配所有没有一定数量分隔符的消息
问题描述
这似乎是一个非常简单的问题,但在这一点上,我认为我只需要第二双眼睛。我有进入 logstash 管道的 filebeat 日志消息。当您包含异常的堆栈跟踪时,这些消息将有多行。下面是几个例子。
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 个管道来匹配第一条消息来添加标签“分隔符错误”并允许第二条消息继续通过我的管道。该表达式实际上使 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+ 次换行符$
字符串结束
推荐阅读
- python - Matplotlib 散点图传奇创造之谜
- android - 获取钩子方法的参数值
- python - 为什么软件包没有安装到我的 Mac 上的两个 Python 版本(在 /User/name/Library 和 /usr/local/bin 中)?
- c# - 如何在 RichTextBox 中使用 TextPointer.GetLineStartPosition() 获取下一行
- c# - 读取大文件 - 2GB+ 用于 Google Drive API 上传
- javascript - 将某些 CSV 数据加载到 HTML 文本区域中
- excel - 无法将保存在 VBA 中的公式作为字符串变量插入到单元格中
- c - 如何使用 realloc 向数组添加更多空格?
- javascript - Highcharts:将图表对象作为 Javascript 变量发送?
- ios - 如果它们是通过加载 .json 数据进行初始化的,如何在 init() 中初始化变量?