如何解决如何使用 grok 模式解析 logstash 中的半径 CDR
有什么方法可以使用 grok 模式从以下消息事件中获取字段 我必须在下面解析并存储在弹性中的字段,如下所示
时间戳 => NET-Log-Time
device_ip => NAS-IP-地址
消息 => 消息
Message =>
" Tue Nov 22 15:20:33 2011
NET-Log-Time = "Tue Nov 22 15:20:31 2011\n"
Acct-Status-Type = Start
NET-Session-Ingress-CallId = 0
NET-Session-Egress-CallId = 65535
NET-Session-Generic-Id = 14
Acct-Multi-Session-Id = "132200403114"
NET-Ingress-Signaling-Group = 19992
NET-Egress-Signaling-Group = 0
NET-Ingress-Channel-Number = 23
NET-Egress-Channel-Number = 0
NET-Call-Origin = 1
NET-Calling-Number = "1029"
NET-Called-Number = "2006"
NET-Calling-Name = "System Test"
NET-Ingress-Channel-Id = "1:1:23"
NET-Setup-Time = "1322004031"
Acct-Session-Id = "0"
NET-Firmware-Version = "2.0.0v107"
NET-Local-Time-Zone = "PST8PDT"
NET-Gw-Id = "f5a4fdc8f970ae35addf36"
NET-Time-And-Day = "1322004031"
NAS-Port = 1813
Acct-Delay-Time = 0
NAS-IP-Address = 134.56.227.230
Acct-Unique-Session-Id = "df05da217dbe16e4"
Timestamp = 1322004033
Request-Authenticator = Verified"
使用 %{GREEDYDATA:messageBody} 我可以提取
{
"messageBody": "Mon Jun 14 18:08:54 2021"
}
解决方法
我也在做半径。我必须先合并所有这些行,
您可以在输入编解码器/logstash 过滤器(终止)上使用 multiline
来完成。 multiline-codec
这对你来说是个完美的例子
input {
stdin {
codec => multiline {
pattern => "^\s"
what => "previous"
}
}
}
模式 => "^\s" 这匹配每一行的开始空间
什么 =>“上一个” 这就是动作,如果线条与模式匹配,你会怎么做。在这个例子中将被附加到前一行。
对于您的日志样本,我认为模式将是 ^\s{2,}
,因为您只想合并那些有 2 个或更多空间的人。
附加到其他消息的那些有分隔符 \n
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。