【问题标题】:How to parse a log string in Logstash using Grok?如何使用 Grok 解析 Logstash 中的日志字符串?
【发布时间】:2018-07-13 03:36:46
【问题描述】:

我正在尝试使用 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 等列 - 我尝试了多种组合,但到目前为止都失败了。

【问题讨论】:

标签: elasticsearch logstash logstash-grok


【解决方案1】:

以上日志的 Grok 模式:->

%{TIMESTAMP_ISO8601:time}:%{SPACE}\&lt;%{WORD:action}%{SPACE} %{DATA:kvpairs}\&gt;%{SPACE}\(%{DATA:path_2}\)%{SPACE}took%{SPACE}%{NUMBER:time_taken}%{SPACE}%{WORD:time_unit}

在上面的 grok 模式中,我在名为 kvpairs 的事件中捕获了 cmdoptionspath。这是因为可以使用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 过滤器默认将空格作为分隔符,并将提取列cmdoptionspathdate 过滤器将使 @timestamp 变量。

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    相关资源
    最近更新 更多