nginx错误日志的logstash模式

时间:2017-03-29 18:48:08

标签: nginx logging logstash logstash-grok grok

这是我的示例错误日志:

2017/03/29 17:32:56 [error] 21924#21924: *212595 access forbidden by rule, client: 172.31.0.14, server: , request: "POST /app/etc/local.xml HTTP/1.1", host: "www.overcart.com"

我想要一个匹配这个的grok模式。我不知道如何继续。不知道如何创建一个。我尝试了各种各样但没有一个工作过。

我目前正在使用以下grok模式解析它:

%{DATESTAMP:mydate} [%{DATA:severity}] (%{NUMBER:pid:int}#%{NUMBER}: *%{NUMBER}|*%{NUMBER}) %{GREEDYDATA:mymessage}(?:, client: (?<client_ip>%{IP}|%{HOSTNAME})) (?:, server: %{IPORHOST:server})(?:, request: %{QS:request})?(?:, host: %{QS:host})?(?:, referrer: \"%{URI:referrer}) 

但它不会从(?:, server:开始解析。

3 个答案:

答案 0 :(得分:3)

这是我使用的grok模式。它不完美且可以改进,但它可以工作并解析额外的$(document).ready(function(){ $("p").on("click", function(){ var scroll = $(document).scrollTop(); alert(scroll); }); }); 令牌。

upstream

答案 1 :(得分:2)

这是我用于nginx-error模式的,它可以解析我的错误日志中的所有字段。:

(?<timestamp>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[%{DATA:err_severity}\] (%{NUMBER:pid:int}#%{NUMBER}: \*%{NUMBER}|\*%{NUMBER}) %{DATA:err_message}(?:, client: (?<clientip>%{IP}|%{HOSTNAME}))(?:, server: %{IPORHOST:server})(?:, request: "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}")?(?:, upstream: "%{DATA:upstream}")?(?:, host: "%{IPORHOST:host}")?(?:, referrer: "%{URI:referrer}”)?

答案 2 :(得分:0)

我正在使用@mavlarn的grok模式,它在我的用例中效果很好。我确定@ dr01也能正常工作。记住要测试一下,看看有什么适合您的!

专业提示:因为这些grok模式中有双引号,为了使它们正常工作,我需要在模式中用单引号而不是双引号引起来。

为了突出显示,这是一个示例。

grok {
  match => { "message" => "This "double quote" pattern won't work. Backslashes to cancel/close the regex won't work either. Logstash will fail to start.."}
}
grok {
  match => { "message" => 'But this "double quote" pattern will work when surrounding with single quotes instead.'}
}

示例解决方案。

grok {
  match => { "message" => '(?<timestamp>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[%{DATA:err_severity}\] (%{NUMBER:pid:int}#%{NUMBER}: \*%{NUMBER}|\*%{NUMBER}) %{DATA:err_message}(?:, client: (?<clientip>%{IP}|%{HOSTNAME}))(?:, server: %{IPORHOST:server})(?:, request: "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}")?(?:, upstream: "%{DATA:upstream}")?(?:, host: "%{IPORHOST:host}")?(?:, referrer: "%{URI:referrer}”)?' }
}

(已通过Logstash v6.x和v7.x测试)