ELK 堆栈中 Django 的正确 Grok 解析器?

The correct Grok Parser for Django in ELK stack?

我正在尝试将 ELK 堆栈用于我的应用程序日志记录。一切运行良好,除了 logstash 中的日志过滤器。我似乎无法让 grok 成功解析。

我的当前设置:

if [type] == "djangolog" {
    multiline {
        pattern => "^[^\[]"
        what => "previous"
    }

    grok {
        match => { "message" => "\[%{LOGLEVEL:level}\] \[%{TIMESTAMP_ISO8601:timestamp}\] \[%{WORD:module}\] \[%{POSINT:process}\] - %{GREEDYDATA:logmessage}" }
    }

    date {
        match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
    }
}

我正在尝试编制索引的示例 Django 日志:

[DEBUG] [2018-07-11 10:16:07,035] [9763] [func.get_func:366] - get func time 0.14696598053

任何指向我做错了什么的指针和参考资料都会很棒

您的示例消息中的第三个字段是一个 INT,但是您的 grok 模式等待一个 WORD,这会给您一个 grokparsefailure 错误。

正在使用 Kibana 中的 grok 调试器测试您的示例消息,以下模式将匹配它。

我已将 %{WORD:module} 更改为 %{INT:module},但您也可以使用 %{DATA:module},它基本上可以匹配任何字符串,就像我对 process 所做的那样模式中的字段。

\[%{LOGLEVEL:level}\] \[%{TIMESTAMP_ISO8601:timestamp}\] \[%{INT:module}\] \[%{DATA:process}\] - %{GREEDYDATA:logmessage}