Red*_*121 5 logging nginx grok logstash logstash-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"
Run Code Online (Sandbox Code Playgroud)
我想要一个与此匹配的 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})
Run Code Online (Sandbox Code Playgroud)
但它不是从(?:, server:开始解析。
这是我使用的 grok 模式。它并不完美,可以改进,但它可以工作并解析额外的upstream令牌。
(?<timestamp>%{YEAR}[./]%{MONTHNUM}[./]%{MONTHDAY} %{TIME}) \[%{LOGLEVEL:severity}\] %{POSINT:pid}#%{NUMBER:threadid}\: \*%{NUMBER:connectionid} %{GREEDYDATA:errormessage}, client: %{IP:client}, server: %{GREEDYDATA:server}, request: "(?<httprequest>%{WORD:httpcommand} %{UNIXPATH:httpfile} HTTP/(?<httpversion>[0-9.]*))"(, )?(upstream: "(?<upstream>[^,]*)")?(, )?(host: "(?<host>[^,]*)")?
Run Code Online (Sandbox Code Playgroud)
这是我用于 nginx-error pattern\xef\xbc\x8c 的内容,它可以解析错误日志中的所有字段:
\n\n(?<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}\xe2\x80\x9d)?\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4870 次 |
| 最近记录: |