ELK日志处理之使用Grok解析日志

一、简介

Grok是迄今为止使蹩脚的、无结构的日志结构化和可查询的最好方式。Grok在解析 syslog logs、apache and other webserver logs、mysql logs等任意格式的文件上表现完美。

Grok内置了120多种的正则表达式库,地址:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

二、入门例子

下面是一条tomcat日志:

83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png
HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

从filebeat中输出到logstash,配置如下:

input {
    beats {
        port => "5043"
    }
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
}
output {
    stdout { codec => rubydebug }
}

fileter中的message代表一条一条的日志,%{COMBINEDAPACHELOG}代表解析日志的正则表达式,COMBINEDAPACHELOG的具体内容见:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/httpd。解析后:

{
        "request" => "/presentations/logstash-monitorama-2013/images/kibana-search.png",
          "agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
         "offset" => 325,
           "auth" => "-",
          "ident" => "-",
     "input_type" => "log",
           "verb" => "GET",
         "source" => "/path/to/file/logstash-tutorial.log",
        "message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1\" 200 203023 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
           "type" => "log",
           "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
       "referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
     "@timestamp" => 2016-10-11T21:04:36.167Z,
       "response" => "200",
          "bytes" => "203023",
       "clientip" => "83.149.9.216",
       "@version" => "1",
           "beat" => {
        "hostname" => "My-MacBook-Pro.local",
            "name" => "My-MacBook-Pro.local"
    },
           "host" => "My-MacBook-Pro.local",
    "httpversion" => "1.1",
      "timestamp" => "04/Jan/2015:05:13:42 +0000"
}

再比如,下面这条日志:

55.3.244.1 GET /index.html 15824 0.043

这条日志可切分为5个部分,IP(55.3.244.1)方法(GET)请求文件路径(/index.html)字节数(15824)访问时长(0.043),对这条日志的解析模式(正则表达式匹配)如下:

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

写到filter中:

filter {
    grok {
        match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}
    }
}

解析后:

client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043

三、解析任意格式日志

解析任意格式日志的步骤:

  1. 先确定日志的切分原则,也就是一条日志切分成几个部分。
  2. 对每一块进行分析,如果Grok中正则满足需求,直接拿来用。如果Grok中没用现成的,采用自定义模式。
  3. 学会在Grok Debugger中调试。

下面给出例子,来两条日志:

2017-03-07 00:03:44,373 4191949560 [          CASFilter.java:330:DEBUG]  entering doFilter()

2017-03-16 00:00:01,641 133383049 [    UploadFileModel.java:234:INFO ]  上报内容准备写入文件

切分原则:

2017-03-16 00:00:01,641:时间
133383049:编号
UploadFileModel.java:java类名
234:代码行号
INFO:日志级别
entering doFilter():日志内容

前五个字段用Grok中已有的,分别是TIMESTAMP_ISO8601NUMBERJAVAFILENUMBERLOGLEVEL,最后一个采用自定义正则的形式,日志级别的]之后的内容不论是中英文,都作为日志信息处理,使用自定义正则表达式子的规则如下:

(?<field_name>the pattern here)

最后一个字段的内容用info表示,正则如下:

(?<info>([\s\S]*)

上面两条日志对应的完整的正则如下,其中\s*用于剔除空格。

\s*%{TIMESTAMP_ISO8601:time}\s*%{NUMBER:num} \[\s*%{JAVAFILE:class}\s*\:\s*%{NUMBER:lineNumber}\s*\:%{LOGLEVEL:level}\s*\]\s*(?<info>([\s\S]*))

正则解析容易出错,强烈建议使用Grok Debugger调试,姿势如下。

四、参考资料

  1. plugins-filters-grok
  2. Parsing Logs with Logstash
时间: 2024-10-13 04:44:01

ELK日志处理之使用Grok解析日志的相关文章

Logstash使用grok解析IIS日志

Logstash使用grok解析IIS日志 1. 安装配置 安装Logstash前请确认Elasticsearch已经安装正确,参见RedHat6.4安装Elasticsearch5.2.0. 下载链接为:logstash-5.2.0.rpm. 下载完成后,rpm -i logstash-5.2.0.rpm即可安装. Logstash默认的配置文件位置为./config和/etc/logstash/,后者已经存在,但直接运行依然会报错: WARNING: Could not find logst

python高效解析日志入库

python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如全部文件内容,可能内存不够.采取一个折中的办法,每次读若干byte(具体大小视实际情况而定). 经过测试,得到结论,在我们写代码的时候应该这样写 f = open(path,'r') for line in f : ............. 这是系统提供的一种读文件的方法,一般比我们自己每次读若干

Log4Qt快速入门——Log4Qt日志输出重定向源码解析

Log4Qt快速入门--Log4Qt日志输出重定向源码解析 一.Appender简介 1.Appender简介 Appender是所有Appender的抽象类,是对记录日志形式的抽象.Log4Qt(Qt4版本)中Appender继承体系如下: 2.Appender接口 virtual Filter *filter() const = 0; virtual QString name() const = 0; virtual Layout *layout() const = 0; virtual b

ELK收集Apache的json格式访问日志并按状态码绘制图表

前言 需求说明: 部署一个Apache,收集Apache的json格式访问日志,并且将访问日志的状态码在kibana上绘制饼状图,添加到kibana的dashboard. 环境说明: 10.0.0.101(test101)--部署apache.filebeat10.0.0.102(test102)--部署elasticsearch.kibana备注:本次实验的重点在于怎样收集Apache的json格式日志,因此没有装logstash.日志数据从filebeat--elasticsearch--k

我的游戏学习日志17——游戏元素的解析(1)

我的游戏学习日志17——游戏元素的解析(1) 1.沉浸元素 定义:在一般的定义上指通过物理方式和想象进入一个与通常环境不同的场景.(也被也称“置入”和“临场”),其本身具有一定的游戏性,所以也被当成游戏的元素体验.作为游戏元素是游戏必须要的必要元素. 游戏性:在于其提供了一个日常生活中不同的体验. 虚拟现实的基本框架:交互,想象与沉浸.(沉浸依赖于交互过程与想象力牵引的基础).逼真的画面图像第一时间触发玩家的沉浸的幻觉,而交互性的流畅和想象的共鸣进一步的巩固和加深了玩家沉浸的程度. 2.情节元素

renren-fast开源项目解析日志—1、项目的部署

renren_fast项目解析日志 一.环境搭建 1.后端部署 (1)下载源码 按照步骤,从码云上down了fast,zip的(引maven项目)项目包. (2)安装lombok插件 安装lombok的jar.相当简单,在eclipse文件夹的跟目录下,使用java -jar lombok.jar 会出现一个红辣椒的界面,按照说明安装就行了!(重点看红框) 目前我的理解lombok(印尼——龙目岛)就是一个用注解替代ide帮我们在javabean中所创建的一些get.set.toString等方

详解dataguard 日志传输服务(参数解析)

dataguard 日志传输服务(参数解析) 1> dg的三种模式1. 最大保护模式1)这种模式提供了最高级别的数据保护能力:2)要求至少一个物理备库收到重做日志后,主库的事务才能够提交:3)主库找不到合适的备库写入时,主库会自动关闭,防止未受保护的数据出现:4)优点:该模式可以保证备库没有数据丢失:5)缺点:主库的自动关闭会影响到主库的可用性,同时需要备库恢复后才能提交,对网络等客观条件要求非常的高,主库的性能会因此受到非常大的冲击. 2. 最大可用性模式1)该模式提供了仅次于“最大保护模式”

日志分析_使用shell完整日志分析案例

一.需求分析 1. 日志文件每天生成一份(需要将日志文件定时上传至hdfs) 2. 分析日志文件中包含的字段:访问IP,访问时间,访问URL,访问状态,访问流量 3. 现在有"昨日"的日志文件即logclean.jar 3. 需求指标 a. 统计PV值 b. 统计注册人数 c. 统计IP数 d. 统计跳出率 f. 统计二跳率 二.数据分析 1. 数据采集 使用shell脚本定时上传 2. 数据清洗 过滤字段 格式化时间等字段 3. 数据分析 使用一级分区(date) 4. 数据导出 s

日志易数据接入之 Syslog 日志上传

在企业运维环境中,运维人员管理的主要对象分别是服务器.存储.网络设备.安全设备等.而在对整个企业网站进行监控时,这些设备的日志数据都需纳入到监控的范围之内.日志分析与监控,这事说大不大,说小也不小.传统的ES开源解决方案虽然节约了应用成本,但对应的人力维护成本较高.这个中的辛酸故事毋需多言.在此介绍一种商业日志分析解决方案--日志易.好不好用暂不评论,是否拿来对比试用也取决于各位心情.第一步自然是日志数据接入.数据源如何接入到日志易服务之中呢? 日志易的日志接入方式主要包括以下三种: 日志易Ag