elasticsearch ELK堆栈中Django的正确Grok解析器?
我正在尝试使用ELK堆栈记录我的应用程序。除了logstash中的日志过滤器外,一切都运行良好。我似乎无法让grok成功解析 我的当前设置:elasticsearch ELK堆栈中Django的正确Grok解析器?,elasticsearch,logstash,kibana,elastic-stack,elasticsearch,Logstash,Kibana,Elastic Stack,我正在尝试使用ELK堆栈记录我的应用程序。除了logstash中的日志过滤器外,一切都运行良好。我似乎无法让grok成功解析 我的当前设置: if [type] == "djangolog" { multiline { pattern => "^[^\[]" what => "previous" } grok { match => { "message" => "\[%{LOGLEVEL:level
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模式等待一个单词,这将给您一个
grokparsefailure
错误
使用Kibana中的grok调试器测试示例消息,以下模式将与之匹配
我已经将%{WORD:module}
更改为%{INT:module}
,但是您也可以使用%{DATA:module}
,它将基本上匹配任何字符串,就像我对模式中的进程
字段所做的那样
\[%{LOGLEVEL:level}\] \[%{TIMESTAMP_ISO8601:timestamp}\] \[%{INT:module}\] \[%{DATA:process}\] - %{GREEDYDATA:logmessage}
这是Kibana中的grok调试器,如果您使用X-pack,甚至是您拥有的免费基本许可证,但如果您没有Kibana和X-pack,您可以使用此网站:,它是相同的实现。