我有一个文本文件/日志文件,其中的值由管道符号分隔。 “ |”带有多个空格。
我也只想在没有gsub的情况下尝试。
下面是一个例子,
有人知道如何编写GROK模式以提取logstash吗?因为我对此很陌生。预先感谢
5000| | |applicationLog |ClientLog |SystemLog |Green | |2014-01-07 11:58:48.76948 |12345 (0x1224)|1) Error 2)Sample Log | Configuration Manager
答案 0 :(得分:0)
由于不同单词之间|
的数量不一致,因此您可以将其与.*?
匹配,并将其余数据提取为predefined grok pattern
%{NUMBER:num}.*?%{WORD:2nd}.*?%{WORD:3rd}.*?%{WORD:4th}.*?%{WORD:5th}.*?%{TIMESTAMP_ISO8601}
这会给你
{
"num": [
[
"5000"
]
],
"BASE10NUM": [
[
"5000"
]
],
"2nd": [
[
"applicationLog"
]
],
"3rd": [
[
"ClientLog"
]
],
"4th": [
[
"SystemLog"
]
],
"5th": [
[
"Green"
]
],
"TIMESTAMP_ISO8601": [
[
"2014-01-07 11:58:48.76948"
]
],
"YEAR": [
[
"2014"
]
],
"MONTHNUM": [
[
"01"
]
],
"MONTHDAY": [
[
"07"
]
],
"HOUR": [
[
"11",
null
]
],
"MINUTE": [
[
"58",
null
]
],
"SECOND": [
[
"48.76948"
]
],
"ISO8601_TIMEZONE": [
[
null
]
]
}
您可以在online grok debugger上对其进行测试。
由于您是grok
的新手,您可能想阅读grok filter plugin basics
如果可以的话,建议您在dissect filter中进行浏览,它比grok
更快,更有效,
Dissect过滤器是一种拆分操作。不像普通的 拆分操作,其中一个定界符应用于整个字符串, 此操作将一组定界符应用于字符串值。解剖 不使用正则表达式,并且非常快。但是,如果 文本的结构因行而异,因此Grok更 适当。在混合情况下,可以使用Dissect 解构可靠重复的线段, 然后可以用更多的正则表达式在剩余的字段值上使用Grok 可预测性和较少的整体工作要做。