logstash处理nginx日志时,字段总是进不到ES里面,那就是你grok语句写错了!

nginx的access日志,logstash在配ngrok的时候,最初用的是COMBINEDAPACHELOG,听说是写好的匹配nginx日志,就打算拿来直接用。

把logstash跑起来就发现,字段都没进es里去,message却是有的,仔细看tag标签有个提示:_grokparsefailure。哦,原来ngrok报错了。

 

想想也是。elastic家也没有责任必须匹配nginx那么准确,nginx升个级什么的,COMBINEDAPACHELOG也不能保证更新。

其实nginx默认的log_format还不含请求时间、请求域名。想弄完整的还是得自己写

 

nginx那边好配,关键是logstash的grok的match参数,要跟nginx的log_format匹配上。

网上的match参数一大堆,但是不管用哪个,除非运气极好一次跑成功,否则必须用grok debugger测试。

 

注意点:

1.空格(最难发现的)2.双引号(别忘了转义)3.类型要匹配


示范(可直接用):

nginx.conf

   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
            '$status $body_bytes_sent "$http_referer" '
            '"$http_user_agent" $http_x_forwarded_for '
     '"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time" "$http_host" $request_length';

nginx-logstash.conf

grok {

        match => {"message" => "%{IP:remote_addr} - %{USER:remote_user} \[%{HTTPDATE:time_local}\] \"%{WORD:method} %{URIPATHPARAM:request} %{DATA:http_version}\" %{NUMBER:status:int} %{NUMBER:body_bytes_sent:int} %{DATA:http_referer} %{QUOTEDSTRING:http_user_agent} %{DATA:http_x_forwarded_for} %{DATA:upstream_addr} %{DATA:upstream_status} \"%{NUMBER:upstream_response_time:float}\" \"%{NUMBER:request_time:float}\" %{DATA:http_host} %{NUMBER:request_length}"}
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值