Logstash Grok过滤器Apache访问日志

O C*_*nor 6 filter logstash logstash-grok

我一直在那里四处寻找,但找不到工作决议.我尝试在Logstash配置文件中使用Grok Filter来过滤Apache-Access日志文件.日志消息如下所示:{"message":"00.00.0.000 - - [dd/mm/YYYY:hh:mm:ii +0000] \"GET /index.html HTTP/1.1\" 200 00"}.

在这一刻,我只能通过使用过滤客户端IP grok { match => [ "message", "%{IP:client_ip}" ] }.

我想过滤:

- The GET method, 
- requested page (index.html), 
- HTTP/1.1\, 
- server response 200
- the last number 00 after 200 inside the message body
Run Code Online (Sandbox Code Playgroud)

请注意,这些都不适合我:

grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } 
Run Code Online (Sandbox Code Playgroud)

要么

grok { match => [ "message", "%{COMBINEDAPACHELOG}" ] }
Run Code Online (Sandbox Code Playgroud)

Gar*_*aid 18

使用Grok Debugger可以完全匹配日志格式.这是唯一的方法.

http://grokdebug.herokuapp.com/


O C*_*nor 18

grok {
  match => [ "message", "%{IP:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:apache_timestamp}\] \"%{WORD:method} /%{NOTSPACE:request_page} HTTP/%{NUMBER:http_version}\" %{NUMBER:server_response} " ]
}
Run Code Online (Sandbox Code Playgroud)

  • `#日志格式SYSLOGBASE%{SYSLOGTIMESTAMP:timestamp}(?:%{SYSLOGFACILITY})?%{SYSLOGHOST:logsource}%{SYSLOGPROG}:COMMONAPACHELOG%{IPORHOST:clientip}%{USER:ident}%{USER:auth} \ [%{HTTPDATE:timestamp} \]“((?:%{WORD:verb}%{NOTSPACE:request}(?: HTTP /%{NUMBER:httpversion})?|%{DATA:rawrequest})”%{ NUMBER:response}(?:%{NUMBER:bytes} |-)COMBINEDAPACHELOG%{COMMONAPACHELOG}%{QS:referrer}%{QS:agent}`来源-[https://github.com/elastic/logstash/blob /v1.4.2/patterns/grok-patterns](https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns) (2认同)