logstash - 如何使用 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"
}
解决方案
我也在做半径。我必须先合并所有这些行,您可以multiline
在输入编解码器/logstash 过滤器(终止)上执行此操作。多行编解码器
这对你来说是完美的例子
input {
stdin {
codec => multiline {
pattern => "^\s"
what => "previous"
}
}
}
pattern => "^\s" 这匹配每一行的开始空间
what => "previous" 这是动作,如果行匹配模式你会做什么。在此示例中将附加到上一行。
对于您的日志示例,我认为这种模式是^\s{2,}
因为您只想合并那些开始有 2 个或更多空间的人。
附加到另一条消息的那些有分隔符\n
推荐阅读
- azure-data-explorer - 汇总在串联字符串中选择选项的次数 true/false
- c# - Docusign 无法验证 OAuth 令牌
- gradle - 从 gradle-git-properties/micronaut-management 获取 /info 时找不到页面
- batch-file - Windows 上的 MLT 融化幻灯片:无法控制输出视频长度和使用通配符的问题
- javascript - Mongoose:在一个对象中获取多个子文档的内容
- javascript - OverlayTrigger 工具提示不显示
- c - 将 const 与 typedef 和函数指针一起使用时出现问题
- javascript - 如果您多次看到它,如何禁用 JS 动画?
- django - 姜戈。如何正确保存时间和时区
- curl - 无法使用命令行从 gitlab 下载文件