设为首页 收藏本站
查看: 1092|回复: 0

[经验分享] elk系列7之通过grok分析apache日志

[复制链接]

尚未签到

发表于 2017-12-24 21:25:12 | 显示全部楼层 |阅读模式
preface
  说道分析日志,我们知道的采集方式有2种:


  • 通过grok在logstash的filter里面过滤匹配。
  • logstash --> redis --> python(py脚本过滤匹配) --> ES
  第一种方式是不怎么推荐使用的,除非是在日志量比较小的场景才推荐使用。因为grok非常影响性能的,且不够灵活,除非你很懂ruby。
  
第二种方式是 我们一直推荐使用的架构,讲究松耦合关系。
  下面我们还是说说第一种方式,然后再说第二种方式。
  grok模块是作用在filter里面的,它是个可以分析任意文本内容和重构内容的模块。它是当前最好的模块在logstash上处理糟糕,乱序的日志数据,可以把这些数据分析成有序,可查询的。并且,它可以很好的处理syslog,apache 和其他的webserver,mysql logs等日志。通常来说,对于我们使用者(不是计算机,是人类)来说,任何日志格式都可以被写入的。
  
所以这里我们让grok结合apache的日志做分析。

apache默认日志格式:
  我们打开apache的日志配置选项,可以看到
  

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined  

  参数解释:


  • %h: 这是发送请求到服务器的客户的IP地址
  • %l: 这是由客户端identd进程判断的RFC1413身份(identity),输出中的符号"-"表示此处的信息无效
  • %u: 这是HTTP认证系统得到的访问该网页的客户标识(userid),环境变量REMOTE_USER会被设为该值并提供给CGI脚本。如果状态码是401,表示客户未通过认证,则此值没有意义。如果网页没有设置密码保护,则此项将是"-"。
  • %t:这是服务器完成请求处理时的时间,其格式是:  
    [日/月/年:时:分:秒 时区]
      
    日 = 2数字
      
    月 = 3字母
      
    年 = 4数字
      
    时 = 2数字
      
    分 = 2数字
      
    秒 = 2数字
      
    时区 = (+|-)4数字
      


  • "%r": 引号中是客户端发出的包含许多有用信息的请求行
  • %>s: 这是服务器返回给客户端的状态码。
  • %b: 最后这项是返回给客户端的不包括响应头的字节数。如果没有信息返回,则此项应该是"-",如果希望记录为"0"的形式,就应该用%B 。
  更多资料,可以参考:http://www.jinbuguo.com/apache/menu22/logs.html

grok模块使用--拿个例子热热身
  下面看看grok的使用,可以参考官网地址:https://www.elastic.co/guide/en/logstash/2.3/plugins-filters-grok.html#plugins-filters-grok
  
logstash的一些核心模块在这里面:/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns
  
我们参考官网的例子来做下:
  
首先配置logstash。
  

[iyunv@linux-node1 conf.d]# cat apache.conf  
input {
  stdin {
  }
  
}
  
filter {
  grok {
  match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }   # 这些IP,WORD等等都是logstash内部设定好的匹配。
  }
  
}
  

  
output{
  stdout {
  codec => rubydebug
  }
  
}
  

  

  确认无误后启动,输入一列信息:
  

[iyunv@linux-node1 conf.d]# /opt/logstash/bin/logstash -f apache.conf  
Settings: Default pipeline workers: 2
  
Pipeline main started
  
55.3.244.1 GET /index.html 15824 0.043
  
{
  "message" => "55.3.244.1 GET /index.html 15824 0.043",
  "@version" => "1",
  "@timestamp" => "2016-12-11T04:36:26.387Z",
  "host" => "linux-node1",
  "client" => "55.3.244.1",
  "method" => "GET",
  "request" => "/index.html",
  "bytes" => "15824",
  "duration" => "0.043"
  
}
  

  

  上面可得,logstash是正常工作的,filter里面能够识别对应的信息。下面就开始真正分析apache的日志。

分析apapche的日志
  我们使用logstash自带的apache日志分析模块来使用,模块位于这下面:
  

[iyunv@linux-node1 conf.d]# vim /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns  
''''''
  93 COMMONAPACHELOG %{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth}   \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpvers    ion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)     # 第93行
  94 COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}   # 第94行
  
''''''
  

  这个文件里有很多模块可以使用,可以根据自己的需求来调用。
  
根据上面提供的模块,我们可以直接配置在logstash里面,如下所示:
  

[iyunv@linux-node1 conf.d]# cat /etc/logstash/conf.d/apache.conf  
input {
  file {
  path => "/var/log/httpd/access_log"
  start_position => "beginning"
  }
  
}
  
filter {
  grok {
  match => { "message" => "%{COMBINEDAPACHELOG}"}   # 调用刚才找到的模块
  }
  
}
  

  
output{
  stdout {
  codec => rubydebug
  }
  
}
  

  

  确认配置没有问题,那么就启动logstash
  

[iyunv@linux-node1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf  

  此时我们可以在head上看到apache的日志索引了。。。然后老套路,在kibana里面创建索引就可了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427642-1-1.html 上篇帖子: Apache Flume入门指南[翻译自官方文档] 下篇帖子: 安装Apache遇到的一点问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表