使用 grok 模式查询 Kibana
Querying Kibana using grok pattern
我们在日常日志上配置了 ELK 堆栈,并使用 Kibana
UI 对日志集执行基本 search/query 操作。
我们的一些日志在消息中有特定字段,而另一些则没有。因此我们在配置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
在这两个日志中,我希望为所有 session_end
日志提取 TotalTime
。并将其形象化。
我应该怎么做?
我可以搜索 session_end
下列出的所有日志,但是我无法对日志集执行 grok。
在 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 中的查询。
您可以在同一过滤器中使用两种不同的 grok 模式:
grok {
match => {
"message" => ['\[%{HTTPDATE}\] %{IP} \[API:Profile\]session_end: %{GREEDYDATA:session} TotalTime:%{GREEDYDATA:tt}',
'\[%{HTTPDATE}\] %{IP} \[API:Profile\]%{GREEDYDATA:data}']
}
}
消息将通过第一个模式进行测试,如果它们有 session_end:
和 TotalTime:
,您将拥有一个包含这两个字段的 elasticsearch 文档。然后你就可以对这些字段进行聚合和可视化了。
其他消息(没有 session_end:
和 TotalTime:
)将由第二个过滤器解析。
我们在日常日志上配置了 ELK 堆栈,并使用 Kibana
UI 对日志集执行基本 search/query 操作。
我们的一些日志在消息中有特定字段,而另一些则没有。因此我们在配置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
在这两个日志中,我希望为所有 session_end
日志提取 TotalTime
。并将其形象化。
我应该怎么做?
我可以搜索 session_end
下列出的所有日志,但是我无法对日志集执行 grok。
在 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 中的查询。
您可以在同一过滤器中使用两种不同的 grok 模式:
grok {
match => {
"message" => ['\[%{HTTPDATE}\] %{IP} \[API:Profile\]session_end: %{GREEDYDATA:session} TotalTime:%{GREEDYDATA:tt}',
'\[%{HTTPDATE}\] %{IP} \[API:Profile\]%{GREEDYDATA:data}']
}
}
消息将通过第一个模式进行测试,如果它们有 session_end:
和 TotalTime:
,您将拥有一个包含这两个字段的 elasticsearch 文档。然后你就可以对这些字段进行聚合和可视化了。
其他消息(没有 session_end:
和 TotalTime:
)将由第二个过滤器解析。