logstash的grok插件的用途是提取字段,将非格式的内容进行格式化,

input {
file {
path => "/var/log/http.log"
}
}
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

  更加震撼的是logstash内置很多的正则表达式,参见参考部分的链接。

  例如:对于字符串:

Jan 1 06:25:43 mailserver14 postfix/cleanup[21403]: BEF25A72965: message-id=<20130101142543.5828399CCAF@mailserver14.example.com>

  可以用如下的解析

 filter {
grok {
patterns_dir => ["./patterns"]
match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }
}
}

  其中SYSLOGBASE以及GREEDYDATA都是logstash里面内置好的解析规则,可以再上面提供的github中找到,是不是很省劲?

  对于POSTFIX_QUEUEID而言,是一个我们自己定制的一个解析,放在根目录的patterns路径下,那么需要前面的patterns_dir参数中指定一下路径即可。文件的内容如下:

  # contents of ./patterns/postfix:

  POSTFIX_QUEUEID [0-9A-F]{10,11}

  我们来看一下grok里面令人兴奋的几个例子:

  1. override:

  消息:

May 29 16:37:11 sadness logger: hello world

  grok规则:

 filter {
grok {
match => { "message" => "%{SYSLOGBASE} %{DATA:message}" }
overwrite => [ "message" ]
}
}

  解析结果:

  hello world

  2. addtag,addfield

  处于测试目的,你能希望添加一些字段来辅助跟踪,或者增强表达内容可以通过addtag以及addfield来进行统一设置。tag表达式有一个点,就是可以一次性添加多个,因为这些options的类型都是array,如果是多个,需要用"[... ...]"来包裹。

filter {
  grok {
    add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
  }
}
# You can also add multiple fields at once:
filter {
  grok {
    add_field => {
"foo_%{somefield}" => "Hello world, from %{host}"
"new_field" => "new_static_value"
    }
  }
}
filter {
grok {
  add_tag => [ "foo_%{somefield}" ]
}
}
# You can also add multiple tags at once:
filter {
grok {
add_tag => [ "foo_%{somefield}", "taggedy_tag"]
}
}

  3. 多个规则匹配

 filter {
grok {
match => { "message" => [ "%{NUMBER:duration}", "%{NUMBER:speed}" ] } }
}

  关于Grok解析

  想要测试我们的grok而是解析正确可以通过下面的网站进行测试:

http://grokdebug.herokuapp.com/

  例如,

  1. 匹配名字
 Demo:Lorry -- ::

 模式:^%{USERNAME:name}$

 匹配结果:

 { "name": [ [ "Lorry" ] ] }

  2.匹配时间

 Demo:--8T11::57.333
模式:%{TIMESTAMP_ISO8601 :lorry}
匹配结果
{ "TIMESTAMP_ISO8601": [ [ "2018-9-8T11:19:57.333" ] ], "YEAR": [ [ "" ] ], "MONTHNUM": [ [ "" ] ], "MONTHDAY": [ [ "" ] ], "HOUR": [ [ "", null ] ], "MINUTE": [ [ "", null ] ], "SECOND": [ [ "57.333" ] ], "ISO8601_TIMEZONE": [ [ null ] ] }

  3.下面是一个比较复杂的demo,就是匹配多部分:

 DemoLorry --8T11::57.333
%{USERNAME:Lorry}%{SPACE}%{TIMESTAMP_ISO8601:time}

Ruby

最后是关于ruby,下面链接中就是一个比较好的Ruby教程,就ruby的语法以及日期等处理方式都有说明。

参考:

  1. 关于grok内置好的正则表达式

https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

  2. 下面是一篇很好的介绍logstash的文章(唉,只有google可以搜得到)

https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

  3. Ruby教程

https://code.ziqiangxuetang.com/ruby/ruby-tutorial.html

Logstash的grok以及Ruby的更多相关文章

  1. Logstash使用grok解析IIS日志

    Logstash使用grok解析IIS日志 1. 安装配置 安装Logstash前请确认Elasticsearch已经安装正确,参见RedHat6.4安装Elasticsearch5.2.0. 下载链 ...

  2. 使用logstash的grok插件解析springboot日志

    使用logstash的grok插件解析springboot日志 一.背景 二.解决思路 三.前置知识 四.实现步骤 1.准备测试数据 2.编写`grok`表达式 3.编写 logstash pipel ...

  3. logstash filter grok 用法

    在elk+filebeat都安装好,且明白了基本流程后,主要的就是写logstash的filter了,以此来解析特定格式的日志 logstash的filter是用插件实现的,grok是其中一个,用来解 ...

  4. logstash 使用grok正则解析日志

    http://xiaorui.cc/2015/01/27/logstash%E4%BD%BF%E7%94%A8grok%E6%AD%A3%E5%88%99%E8%A7%A3%E6%9E%90%E6%9 ...

  5. Logstash使用grok过滤nginx日志(二)

    在生产环境中,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析. 本文采用grok ...

  6. 使用Logstash filter grok过滤日志文件

    Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...

  7. Logstash使用grok插件解析Nginx日志

    grok表达式的打印复制格式的完整语法是下面这样的: %{PATTERN_NAME:capture_name:data_type}data_type 目前只支持两个值:int 和 float. 在线g ...

  8. 关于Logstash中grok插件的正则表达式例子

    一.前言 近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非ELK(Elasticsearch, Logstash, Kibana)莫属. Logstash负责采集日志,Ela ...

  9. logstash的grok正则匹配规则文件

    文件路径:logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns/grok-patterns 在线调试g ...

随机推荐

  1. python+requests+excel 接口自动化框架

    一.项目框架如图: 1.common :这个包都是一些公共的方法,如:手机号加解密,get/post接口请求的方法封装,接口鉴权,发邮件,读写excel文件方法等等 2.result:存放每次运行的l ...

  2. leetcode57:插入区间

    给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例 1: 输入: intervals = [ ...

  3. [SpringMVC-值传递] 初始SpringMVC--SpringMVC中的值传递

    把页面中输入的值传递到后台以及后台向前台传递,有以下几种方式 这里以登录为例子,实现打印前端页面的值 1,新建一个控制器,根据不同的请求地址实现不同的请求方式 LoginController.java ...

  4. Beta阶段冲刺---Day1

    一.Daily Scrum Meeting照片 二.讨论项目每个成员的昨天进展 由于今天是Beta阶段冲刺的第一天,因此每个成员没有昨日进展. 我们在昨天把未来五天的其他科目的作业都一起做完了(手动斜 ...

  5. 5-log4j2.xml配置文件各个节点详解

    具体配置参考官网:http://logging.apache.org/log4j/2.x/manual/configuration.html 一.log.xml文件的大致结构 <?xml ver ...

  6. spark:ML和MLlib的区别

    ML和MLlib的区别如下: ML是升级版的MLlib,最新的Spark版本优先支持ML. ML支持DataFrame数据结构和Pipelines,而MLlib仅支持RDD数据结构. ML明确区分了分 ...

  7. 大数据-04-Hbase入门

    本文主要来自于 http://dblab.xmu.edu.cn/blog/install-hbase/ 谢谢原作者 本指南介绍了HBase,并详细指引读者安装HBase. 前面第二章学习指南已经指导大 ...

  8. elasticsearch index tuning

    一.扩容 tag_server当前使用ElasticSearch版本为5.6,此版本单个index的分片是固定的,一旦创建后不能更改. 1.扩容方法1,不适 ES6.1支持split index功能, ...

  9. jQuery .each()方法与.data()方法

    .each(callback): 每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素).而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的 ...

  10. 我的第一个Python程序,定义主函数,eval、format函数详解,

    程序实例: #第一个py小程序 def main(): f = eval(input("输入一个数值:")) p=f*(5/9) print("现在的值为:{0:3.3f ...