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日志 - 温柔易淡 - 博客园
http://www.cnblogs.com/liaojiafa/p/6159591.html
elk系列7之通过grok分析apache日志【转】的更多相关文章
- elk系列7之通过grok分析apache日志
preface 说道分析日志,我们知道的采集方式有2种: 通过grok在logstash的filter里面过滤匹配. logstash --> redis --> python(py脚本过 ...
- 如何分析apache日志[access_log(访问日志)和error_log(错误日志)]
如何分析apache日志[access_log(访问日志)和error_log(错误日志)] 发布时间: 2013-12-17 浏览次数:205 分类: 服务器 默认Apache运行会access_l ...
- linux分析apache日志获取最多访问的前10个IP
apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数. 既然是统计,那么awk是必不可少的,好用而高效. 命令如下: awk '{a[$1] += ...
- shell脚本分析apache日志状态码
一.首先将apache日志按天切割 vi /etc/httpd/conf/httpd.conf ErrorLog "|rotatelogs /var/log/httpd/%Y% ...
- ubutun 下webalizer 分析Apache日志
http://www.webalizer.org/ 配置Webalizer 我们可以通过命令行配置Webalizer,也可以通过配置文件进行配置.下面将重点介绍使用配置文件进行配置,该方法使用形式比 ...
- linux下grep分析apache日志的命令集合
https://my.oschina.net/hmc0316/blog/112004 实例:月份英文简写英文全称一月Jan.January二月Feb.February三月Mar.March四月Apr. ...
- 分析apache日志,统计访问量
cat nondomain_access_log.20090722 |awk '{print $1}'| sort | uniq -c |sort -nr
- 分析apache日志,统计ip访问频次命令
统计访问频次最高的10个ip: cat /var/log/httpd/access_log |awk '{print $1}'|sort|uniq -c|sort -nr|head -10 统计恶意i ...
- 记录 Linux分析apache日志获取最多访问的前10个IP
摘自: http://blog.csdn.net/tanga842428/article/details/52856413
随机推荐
- 【Django】Django—Form两种解决表单数据无法动态刷新的方法
一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为“多对多” from django.db import models class Classes(models. ...
- 【HLSDK系列】服务端 AddToFullPack 函数
服务端会给客户端发送一些数据,其中两大种类数据是 clientdata_t 和 entity_state_t 这里我们说说 entity_state_t 这个结构体. 你在丢在地上的枪.C4等等是服务 ...
- TCP的拥塞控制 (一)
拥塞控制不同于流量控制,拥塞控制是在拥塞发生时,发送方根据一定的反馈,主动调节自己的发送速率,以防止拥塞恶化的行为. 1. 网络拥塞 路由器是网络中的关键组件,其内部有一定量的缓冲区,用于缓存来不 ...
- Linux系统启动详解(一)
本篇主要以Centos为例,讲述整个Linux系统启动过程,包括了grub引导,initramfs流程,/sbin/init执行rc.sysinit及rc的大体流程. 另外,本篇有一个实例来说明,将整 ...
- JAVA本地TXT文件解决中文乱码问题
import java.io.*; public class ReadFile { public static void main(String[] args) { try { File file = ...
- 【bzoj4543】Hotel加强版(thr)
Portal --> bzoj4543 Solution 一年前的题== 然而一年前我大概是在划水qwq 其实感觉好像关键是..设一个好的状态?然后..你要用一种十分优秀的方式快乐转移 ...
- 浅谈cocosd之autorelease\retain\release的理解
三种情况,引出问题: 1) new出来的对象需要释放,而释放时,如果有其他人引用了这个对象,再次使用这个对象时,则会出现野指针情况. ==> 于是出现了引用计数的释放管理机制. 2) 对于一 ...
- bzoj 4332: JSOI2012 分零食 快速傅立叶变换
题目: Description 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\(f(x)=O*x^2+S*x+U\) 现 ...
- ural 1297 后缀数组 最长回文子串
https://vjudge.net/problem/URAL-1297 题意: 给出一个字符串求最长回文子串 代码: //论文题,把字符串反过来复制一遍到后边,中间用一个没出现的字符隔开,然后就是枚 ...
- python使用pwd和grp操作unix用户及用户组
1.pwd模块 pwd模块提供了一个unix密码数据库即/etc/passwd的操作接口,这个数据库包含本地机器用户帐户信息 常用操作如下: pwd.getpwuid(uid):返回对应uid的示例信 ...