ani*_*aje 6 logstash logstash-grok
我刚刚开始将 grok 用于 logstash,我正在尝试使用 grok 过滤器解析我的日志文件。我的日志如下所示
03-30-2017 13:26:13 [00089] TIMER XXX.TimerLog:entType [组织],queueType [输出],memRecno = 446323718,audRecno = 2595542711,经过时间 = 998ms
我只想捕获初始日期/时间戳entType [organization]、 和elapsed time = 998ms。
但是,看起来我必须为该行中的每个单词和数字匹配模式。有没有办法可以跳过它?我试图四处寻找,但找不到任何东西。请帮忙。
小智 7
根据查尔斯·达菲的评论。
有两种方法可以做到这一点:GREEDYDATA方式(?:.*):
grok {
match => {"message" => "^%{DATE_US:dte}\s*%{TIME:tme}\s*\[%{GREEDYDATA}elapsed time\s*=\s*%{BASE10NUM}"
}
Run Code Online (Sandbox Code Playgroud)
或者,告诉它忽略匹配项并查找列表中的下一个匹配项。
grok {
break_on_match => false
match => { "message" => "^%{DATE_US:dte}\s*%{TIME:tme}\s*\[" }
match => { "message" => "elapsed time\s*=\s*%{BASE10NUM:elapsedTime}"
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将日期和时间重新加入单个字段并将其转换为时间戳。
正如Charles Duffy所建议的,您可以简单地绕过不需要的数据。
你可以用.*它来做到这一点。
以下将产生您想要的输出,
%{DATE_US:dateTime}.*entType\s*\[%{WORD:org}\].*elapsed time\s*=\s*%{BASE10NUM}
Run Code Online (Sandbox Code Playgroud)
解释:
\s*匹配空格字符。\[正在绕过[字符。%{WORD:org}定义单词边界并将其放置在新字段中org输出
{
"dateTime": [
[
"03-30-2017"
]
],
"MONTHNUM": [
[
"03"
]
],
"MONTHDAY": [
[
"30"
]
],
"YEAR": [
[
"2017"
]
],
"org": [
[
"organization"
]
],
"BASE10NUM": [
[
"998"
]
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18919 次 |
| 最近记录: |