我们已在日常日志中配置了ELK堆栈,并使用Kibana
UI对日志集执行基本搜索/查询操作。
我们的一些日志在邮件中有某个字段,而其他日志则不在。因此,在配置Logstash
时,我们尚未将其配置为单独的字段。
我有以下日志:
[28/Jun/2016:23:59:56 +0530] 192.168.xxx.xxx [API:Profile]get_data_login: Project password success: 9xxxxxxxxx0
[28/Jun/2016:23:59:56 +0530] 192.168.xxx.xxx [API:Profile]session_end: logout success: 9xxxxxxxxx0 TotalTime:1.1234
在这两个日志中,我希望为所有TotalTime
日志提取session_end
。并将其可视化。
我该怎么做?
我可以搜索session_end
下列出的所有日志,但是我无法在日志集上执行grok。
答案 0 :(得分:2)
在logstash中的过滤器中,您可以使用以下内容:
filter {
...
if ([message] ~= "session_end") {
grok {
#write grok specifically for the second format of log here
}
}
else if ([message] ~= "get_data_login") {
grok {
#write grok specifically for the first format of log here
}
}
...
}
Grok模式不能用于在Kibana中查询。
答案 1 :(得分:0)
您可以在同一个过滤器中使用两种不同的grok模式:
grok {
match => {
"message" => ['\[%{HTTPDATE}\] %{IP} \[API:Profile\]session_end: %{GREEDYDATA:session} TotalTime:%{GREEDYDATA:tt}',
'\[%{HTTPDATE}\] %{IP} \[API:Profile\]%{GREEDYDATA:data}']
}
}
消息将通过第一个模式进行测试,如果他们有session_end:
和TotalTime:
,您将拥有包含两个字段的弹性搜索文档。然后,您就可以在这些字段上进行聚合和可视化。
其他消息(没有session_end:
和TotalTime:
)将由第二个过滤器解析。