elk系列7之通过grok分析apache日志
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。
[root@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}
}
确认无误后启动,输入一列信息:
[root@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日志分析模块来使用,模块位于这下面:
[root@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里面,如下所示:
[root@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
[root@linux-node1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf
此时我们可以在head上看到apache的日志索引了。。。然后老套路,在kibana里面创建索引就可了。
elk系列7之通过grok分析apache日志相关推荐
- 如何分析apache日志[access_log(访问日志)和error_log(错误日志)]
如何分析apache日志[access_log(访问日志)和error_log(错误日志)] 发布时间: 2013-12-17 浏览次数:205 分类: 服务器 默认Apache运行会access_l ...
- kjb文件 解析_在Linux上使用lnav监控和分析Apache日志文件工具
请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解如何在Linux上使用lnav监控和分析A ...
- awstats mysql_Awstats分析apache日志
Awstats分析apache日志 一.环境和软件 操作系统:CentOS release 5.4 软件:Apache/2.0.63awstats-6.95.tar.gzcronolog-1.6.2. ...
- 使用 Pandas 分析 Apache 日志
本文的作者是 Nikolay Koldunov,本文原文是 Apache log analysis with Pandas 注本文的图有问题,没法引用,还是去原文看下,这里作为一个引子. %pylab ...
- linux查看ip访问日志文件,linux分析apache日志获取最多访问的前10个IP
apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数. 既然是统计,那么awk是必不可少的,好用而高效. 命令如下: awk '{a[$1] += ...
- ELK(Elasticsearch+Filebeat+Kibana) 轻量级采集分析Nginx日志
ELK是什么? 轻量级日志统计分析组件,包含elasticsearch.filebeat.kibana ELK环境准备 Elasticsearch 下载地址 https://www.elastic.c ...
- 如何在 Linux 上用 SQL 语句来查询 Apache 日志
Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么.的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源.我们将在这篇文章中 ...
- linux配置apache文件大小,linux下限制Apache日志access.log以及error.log文件大小
如果网站开启了apache日志文件以及错误日志功能,那么很可能apache日志文件access.log在一段时间内就会很庞大至上百兆甚至几十个G,尤其大访问量的网站更是如此.error_log错误日志 ...
- CentOS 7.2下ELK分析Nginx日志生产实战(高清多图)
注:本文系原创投稿 本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名 ...
最新文章
- LeetCode-二叉树-94. 二叉树的中序遍历
- MongoDB安装和启动
- 使用C/C++解析json文件
- arm汇编指令_ARM汇编伪指令介绍.
- 03_Influxdb数据库的简单操作
- Android BGradualProgress 多种渐变、直角or弧角、进度条、加载条
- 基于python的网络爬虫系统的设计与实现
- 如何将网络监控摄像头中的网络流 RTSP 转换成 M3U8 流并嵌入微信公众号
- 利用微信搜索抓取公众号文章
- 华为路由器 基本ACL配置
- Android刘海屏、水滴屏全面屏适配方案
- Cisco(63)——多出口PBR+NAT解决方案
- The Fool HDU - 6555
- html中搜索栏怎么写,html搜索框怎么做
- 常见专业术语名词解释(持续更新)
- MySQL数据库,数据的约束
- 元旦节前后,Python兼职接单的小高潮来了
- 【弄nèng - Activiti6】Activiti6入门篇(十六)—— 信号中间事件
- WIN10 WIN11 12代 13代 大小核;性能核;电源选项;P-core,E-core;
- 表格中复制粘贴到其他位置的数据会携带引号等不可见字符
热门文章
- mysql5.5与5.5版本关于修改字符集的方法
- 用RSA实现Web单点登录密码的加密传输
- 学习Html之后总结的超全的思维导图!
- 如何查看某一表空间内有那些表
- 为私有Kubernetes集群创建LoadBalancer服务
- UWP 负载包含两个或多个具有相同目标的路径 'xxx'
- Git提交时提示‘The file will have its original line endings in your working directory’
- 用Asp.net还原与恢复sqlserver数据库
- 2014025679 《嵌入式系统程序设计》第五周学习总结
- 017-封装-OC笔记