如何使用 Grok 解析 Logstash 中的日志字符串?
How to parse a log string in Logstash using Grok?
我正在尝试使用 Grok 解析以下字符串;
2018-06-08 13:26:02.002851: <action cmd="run" options="IGNORE_ERROR" path="/usr/lib/vmware/likewise/bin/lw-lsa get-metrics"> (/etc/vmware/vm-support/ad.mfx) took 0.000 sec
我想将上面的内容分成几列,最终像 TIMESTAMP, ACTION, OPTIONS, PATH
等 - 我尝试了多种组合,但到目前为止都失败了。
以上日志的 Grok 模式:->
%{TIMESTAMP_ISO8601:time}:%{SPACE}\<%{WORD:action}%{SPACE} %{DATA:kvpairs}\>%{SPACE}\(%{DATA:path_2}\)%{SPACE}took%{SPACE}%{NUMBER:time_taken}%{SPACE}%{WORD:time_unit}
在上面的 grok 模式中,我在名为 kvpairs 的事件中捕获了 cmd
、options
和 path
。这是因为可以使用 kv
过滤器在 logstash 中轻松提取这些键值对。所以你的过滤器配置看起来像:->
filter{
grok(
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}:%{SPACE}\<%{WORD:action}%{SPACE} %{DATA:kvpairs}\>%{SPACE}\(%{DATA:path_2}\)%{SPACE}took%{SPACE}%{NUMBER:time_taken}%{SPACE}%{WORD:time_unit}"}
)
kv{
source => "kvpairs"
}
date{
match => ["timestamp","yyyy-MM-dd HH:mm:ss.SSS"]
}
}
kv
过滤器默认以 space 作为分隔符,将提取列 cmd
、options
和 path
。
date
过滤器将生成 @timestamp
变量。
我正在尝试使用 Grok 解析以下字符串;
2018-06-08 13:26:02.002851: <action cmd="run" options="IGNORE_ERROR" path="/usr/lib/vmware/likewise/bin/lw-lsa get-metrics"> (/etc/vmware/vm-support/ad.mfx) took 0.000 sec
我想将上面的内容分成几列,最终像 TIMESTAMP, ACTION, OPTIONS, PATH
等 - 我尝试了多种组合,但到目前为止都失败了。
以上日志的 Grok 模式:->
%{TIMESTAMP_ISO8601:time}:%{SPACE}\<%{WORD:action}%{SPACE} %{DATA:kvpairs}\>%{SPACE}\(%{DATA:path_2}\)%{SPACE}took%{SPACE}%{NUMBER:time_taken}%{SPACE}%{WORD:time_unit}
在上面的 grok 模式中,我在名为 kvpairs 的事件中捕获了 cmd
、options
和 path
。这是因为可以使用 kv
过滤器在 logstash 中轻松提取这些键值对。所以你的过滤器配置看起来像:->
filter{
grok(
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}:%{SPACE}\<%{WORD:action}%{SPACE} %{DATA:kvpairs}\>%{SPACE}\(%{DATA:path_2}\)%{SPACE}took%{SPACE}%{NUMBER:time_taken}%{SPACE}%{WORD:time_unit}"}
)
kv{
source => "kvpairs"
}
date{
match => ["timestamp","yyyy-MM-dd HH:mm:ss.SSS"]
}
}
kv
过滤器默认以 space 作为分隔符,将提取列 cmd
、options
和 path
。
date
过滤器将生成 @timestamp
变量。