Logstash的filter插件-Dissect

一、介绍

Dissect filter 是一种分割操作。与常规拆分操作不同,其中一个分隔符应用于整个字符串,此操作将一组分隔符应用于字符串值。

Dissect不使用正则表达式,而且速度非常快。

但是,如果文本的结构因行而异,那么Grok更适合。

有一种混合的情况,可以使用Dissect来消除可靠重复的行的部分结构,然后Grok可以用于剩余的字段值,具有更高的regex可预测性,并且不需要做太多的总体工作。

二、示例

[root@es03 logstash]# cat dissect.conf
input { stdin {}}

filter {
    dissect {
        mapping => {
            "message" => "%{ts} %{+ts} %{+ts} %{src} %{} %{prog}[%{pid}]: %{msg}"
        }
        convert_datatype => {
            pid => "int"
        }
    }
}

output { stdout {}}
%{ts} %{+ts} %{+ts} %{src} %{} %{prog}[%{pid}]: %{msg}
hello world hello shark 123 logs [456]: hellohello
hello world hello shark 123 logs [456]: hellohello
{
          "host" => "es03",
    "@timestamp" => 2021-06-07T14:40:40.010Z,
       "message" => "hello world hello shark 123 logs [456]: hellohello",
           "src" => "shark",
           "pid" => 456,
      "@version" => "1",
          "prog" => "logs ",
            "ts" => "hello world hello",
           "msg" => "hellohello"
}

前缀修饰符

  • 追加

%{+some_field} 表示把匹配到的内容追加到前一个字段中

%{+some_field/2} 表示带序号的追加,2 表示追加到第二个位置

示例:

1 对于文本 1 2 3 go, 这个 %{+a/2} %{+a/1} %{+a/4} %{+a/3} 将构建一个 a => 2 1 go 3 的键值。

2 对于文本 1 2 3 go, 这个 %{a} %{b} %{+a} 将构建两个键值对: a => 1 3 go, b => 2

  • 跳过

%{} 是一个空的跳过字段。

%{?foo} 是一个命名的跳过字段,就是把匹配到的内容先存到字段 foo 中,但是不会出现在事件中,这种情况是让后面的某些模式使用其匹配到的值的(下面 间接字段 中有示例)。

  • 间接字段

%{&some_field} 表示这个字段的看 key 来自于 some_field 字段的值。

示例:

对于字符串: error: some_error, some_description

这个表达式 error: %{?err}, %{&err}将会构建一个这样的键值对: some_error => some_description

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_西瓜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值