1

继Nginx的神交模式是我Nginx的日志格式为logstash

log_format timed_combined '$ HTTP_X_FORWARDED_FOR - $ REMOTE_USER [$ time_local]' ' “$要求” $状态$ body_bytes_sent' “” $ http_referer“”$ http_user_agent“' '$ request_time $ upstream_response_time $ pipe';

以下为Nginx的日志记录(供参考)

- - test.user [26/May/2017:21:54:26 +0000] "POST /elasticsearch/_msearch HTTP/1.1" 200 263 "https://myserver.com/app/kibana" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" 0.020 0.008 . 

以下为logstash神交图案

NGUSERNAME [a-zA-Z\.\@\-\+_%]+ 
NGUSER %{NGUSERNAME} 
NGINXACCESS %{IPORHOST:clientip} - - \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} %{NUMBER:request_time} %{NUMBER:upstream_time} 

错误logstash日志中找到

“status”=> 400,“error”=> {“type”=>“mapper_parsing_exception”, “reason”=>“无法解析[timestamp]”, “caused_by”=> {“type “=>”illegal_argument_exception“,”reason“=>”无效 格式:\“26/May/2017:19:28:14 -0400 \”格式不正确 \// May/2017:19:28:14 -0400 \”

Issue: - Nginx logs are not getting grokked. 
Requirement: - Timestamp should be filtered into a particular field. 

什么是错误的,我的配置?如何解决这个错误?

回答

1

您所提供的,因为两个区别默认NGINXACCESS神交模式不匹配的记录行:

  1. 作为日志行的IP地址或主机名的第一个元素的预期,但在你的日志线破折号(-)是第一个元素。
  2. 在日志行中的第三个要素是用户名,但神交模式需要一个破折号(-

因此,有解决这个双向的:

  1. 确认,您的日志线匹配默认模式
  2. 更改神交模式是这样的:

NGINXACCESS - - %{USERNAME:username} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} %{NUMBER:request_time} %{NUMBER:upstream_time} 

我建议使用Grok debugger来开发和调试grok模式。它允许您逐步创建和测试它们。

+0

我使用Grok调试器修改了Grok模式。现在,grok过滤器与日志匹配。但是,仍然有同样的错误。 ** />“=> {”type“=>”illegal_argument_exception“,”reason“=>”格式无效:“29/May/2017:22:53:37 -0400 \”格式错误“/ May/2017:22:53:37 -0400“** @breml –

+0

我不认为这个错误是由Grok模式引起的,但是Logstash配置中的其他部分。所以没有进一步的细节,就不可能回答你关于上述错误的问题。 – breml

+0

我在全新的测试服务器中尝试了相同的配置。它工作正常。所以,我认为弹性搜索reindexing将在这种情况下工作。这些冲突在我修改了Nginx日志模式(添加了原始客户端IP的参数并增加了响应时间)后开始发生。你认为这可能是导致这个错误的原因吗? –