Logstash filter 的使用

概述

logstash 之所以强大和流行,与其丰富的过滤器插件是分不开的

过滤器提供的并不单单是过滤的功能,还可以对进入过滤器的原始数据进行复杂的逻辑处理,甚至添加独特的新事件到后续流程中

强大的文本解析工具 -- Grok

grok 是一个十分强大的 logstash filter 插件,他可以解析任何格式的文本,他是目前 logstash 中解析非结构化日志数据最好的方式

基本用法

Grok 的语法规则是:

%{语法 : 语义}

“语法”指的就是匹配的模式,例如使用 NUMBER 模式可以匹配出数字,IP 则会匹配出 127.0.0.1 这样的 IP 地址:

%{NUMBER:lasttime}%{IP:client}

默认情况下,所有“语义”都被保存成字符串,你也可以添加转换到的数据类型

%{NUMBER:lasttime:int}%{IP:client}

目前转换类型只支持 int 和 float

覆盖 -- overwrite

使用 Grok 的 overwrite 参数也可以覆盖日志中的信息

复制代码

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

复制代码

日志中的 message 字段将会被覆盖

示例

对于下面的log,事实上是一个 HTTP 请求行:

55.3.244.1 GET /index.html 15824 0.043

我们可以使用下面的 logstash 配置:

复制代码

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

将无结构的数据通过这样的方式实现了结构化输出

Grok 使用正则表达式

grok 是在正则表达式的基础上实现的(使用 Oniguruma 库),因此他可以解析任何正则表达式

创建模式

提取日志字段和正则表达式提取字段的规则一样:

(?<field_name>the pattern here)

首先,创建一个模式文件,写入你需要的正则表达式:

# contents of ./patterns/postfix:
POSTFIX_QUEUEID [0-9A-F]{10,11}

然后配置你的 Logstash:

复制代码

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

复制代码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值