博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Logstash filter grok过滤日志文件
阅读量:5160 次
发布时间:2019-06-13

本文共 3001 字,大约阅读时间需要 10 分钟。

https://www.jianshu.com/p/d46b911fb83e

Logstash Filter Plugin Grok

Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的data analysis。所有logstash支持的event切分插件查看。下面我们主要讲切分。

Grok基本介绍

  1. Grok 使用文本片段切分的方式来切分日志事件,语法如下:
%{
SYNTAX:SEMANTIC}
* `SYNTAX`代表匹配值的类型,例如,`0.11`可以`NUMBER`类型所匹配,`10.222.22.25`可以使用`IP`匹配。 * `SEMANTIC`表示存储该值的一个变量声明,它会存储在`elasticsearch`当中方便`kibana`做字段搜索和统计,你可以将一个`IP`定义为客户端IP地址`client_ip_address`,eg:`%{IP:client_ip_address}`,所匹配到的值就会存储到`client_ip_address`这个字段里边,类似数据库的列名,也可以把event log中的数字当成数字类型存储在一个指定的变量当中,比如响应时间`http_response_time`,假设event log record如下:
55.3.244.1 GET /index.html 15824 0.043

可以使用如下grok pattern来匹配这种记录

%{
IP:client_id_address} %{
WORD:method} %{
URIPATHPARAM:request} %{
NUMBER:bytes} %{ NUMBER:http_response_time}

在logstash conf.d文件夹下面创建filter conf文件,内容如下

# /etc/logstash/conf.d/01-filter.conffilter {  grok {    match => { "message" => "%{IP:client_id_address} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:http_response_time}" }  }}

以下是filter结果

client_id_address: 55.3.244.1method: GETrequest: /index.htmlbytes: 15824http_response_time: 0.043

grok内置的默认类型有很多种,查看所有。

  1. 使用自定义类型
    更多时候logstash grok没办法提供你所需要的匹配类型,这个时候我们可以使用自定义
    • 第一种,直接使用oniguruma语法去匹配文本片段,语法如下
      (?
      the pattern here)
      假设你需要匹配的文本片段为一个长度为10或11的十六进制的值,使用下列语法可以获取该片段,并把值赋予queue_id
      (?
      [0-9A-F]{10,11})
    • 第二种,创建自定义pattern文件
      • 创建文件夹patterns,在此文件夹下面创建一个文件,文件名随意,eg: postfix
      # contents of ./patterns/postfix:POSTFIX_QUEUEID [0-9A-F]{10,11}
      • 然后将patterns file引入,告诉logstash你的自定义类型文件,以下面的event log record为例子:
      55.3.244.1 GET /index.html 15824 0.043 ABC24C98567
      在logstash conf.d文件夹下面创建filter conf文件,内容如下
      filter {grok { patterns_dir => ["./patterns"] match => { "message" => "%{IP:client_id_address} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:http_response_time} %{POSTFIX_QUEUEID:queue_id}" }}}

匹配结果如下:

client_id_address: 55.3.244.1method: GETrequest: /index.htmlbytes: 15824http_response_time: 0.043queue_id: ABC24C98567

推荐使用来写匹配模式,输入event log record,再逐步使用pattern微调切分,下方会根据你所写的模式将输入切分字段。

 
 
 
 

 

  1. 其他常用内置方法
    • add_field: 当pattern匹配切分成功之后,可以动态的对某些字段进行特定的修改或者添加新的字段,使用%{fieldName}来获取字段的值
      Exmaple:
filter {  grok{    add_field => { "foo_%{somefield}" => "Hello world, %{somefield}" }  }}
# You can also add multiple fields at once:filter {  grok {    add_field => {      "foo_%{somefield}" => "Hello world, %{somefield}"      "new_field" => "new_static_value" } } }

如果somefield=dad,logstash会将foo_dad新字段加入elasticsearch,并将值Hello world, dad赋予该字段

  • add_tag: 为经过filter或者匹配成功的event添加标签
    Example:
filter {  grok {    add_tag => [ "foo_%{somefield}" ]  }}
# You can also add multiple tags at once:filter {  grok {    add_tag => [ "foo_%{somefield}", "taggedy_tag"]  }}

更多内置方法在

 

——END——

作者 : Eason,专注各种技术、平台、集成,不满现状,喜欢改改改
文章、技术合作
Email :

作者:eason02
链接:https://www.jianshu.com/p/d46b911fb83e
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/wangmo/p/9591869.html

你可能感兴趣的文章
多线程_java多线程环境下栈信息分析思路
查看>>
机器学习数学【1】
查看>>
Problem E: Automatic Editing
查看>>
Java数组排序
查看>>
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>
(三)建筑物多边形化简系列——去除冗余点
查看>>
Spring Boot Oauth2缓存UserDetails到Ehcache
查看>>
sizeof与strlen的用法
查看>>
2017 ICPCECPC 邀请赛 F,D,E, I 题解
查看>>
Linux 下常见目录及其功能
查看>>
python Termux Android 开发介绍
查看>>
开源框架中常用的php函数
查看>>
Java语法糖初探(三)--变长参数
查看>>
Liunx常用命令(Mile)
查看>>
nginx 的提升多个小文件访问的性能模块
查看>>
set&map
查看>>
集合类总结
查看>>