Logstash的filter插件-Dissect

Posted shark_西瓜甜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Logstash的filter插件-Dissect的主要内容,如果未能解决你的问题,请参考以下文章

Logstash drop filter插件 --- 2022-04-03

Logstash Filter(五)Split

logstash 离线安装logstash-filter-json_encode 插件

Logstash之Logstash inputs(file和redis插件)Logstash outputs和Filter plugins

logstash实战filter插件之grok(收集apache日志)

logstash的mutate插件