Link Search Menu Expand Document Documentation Menu

常用过滤器插件

本页面包含常见过滤器插件的列表。

mutate

您可以使用 mutate 过滤器更改字段的数据类型。例如,如果您要将事件发送到 OpenSearch 并且需要更改字段的数据类型以匹配任何现有映射,则可以使用 mutate 过滤器。

quantity 字段从 string 类型转换为 integer 类型

input {
  http {
    host => "127.0.0.1"
    port => 8080
  }
}

filter {
  mutate {
   convert => {"quantity" => "integer"}
  }
}

output {
  file {
    path => "output.txt"
  }
}

示例输出

您可以看到 quantity 字段的类型从 string 更改为 integer

{
  "quantity" => 3,
  "host" => "127.0.0.1",
  "@timestamp" => 2021-05-23T19:02:08.026Z,
  "amount" => 10,
  "@version" => "1",
  "headers" => {
    "request_path" => "/",
    "connection" => "keep-alive",
    "content_length" => "41",
    "http_user_agent" => "PostmanRuntime/7.26.8",
    "request_method" => "PUT",
    "cache_control" => "no-cache",
    "http_accept" => "*/*",
    "content_type" => "application/json",
    "http_version" => "HTTP/1.1",
    "http_host" => "127.0.0.1:8080",
    "accept_encoding" => "gzip, deflate, br",
    "postman_token" => "ffd1cdcb-7a1d-4d63-90f8-0f2773069205"
   }
}

您可以转换为的其他数据类型包括 floatstringboolean 值。如果您传入一个数组,mutate 过滤器会转换数组中的所有元素。如果您传入一个像“world”这样的 string 来转换为 integer 类型,结果将是 0,并且 Logstash 会继续处理事件。

Logstash 支持所有过滤器插件的一些常见选项

选项 描述
add_field 向事件添加一个或多个字段。
remove_field 从事件中删除一个或多个字段。
add_tag 向事件添加一个或多个标签。您可以使用标签根据事件包含的标签执行条件处理。
remove_tag 从事件中删除一个或多个标签。

例如,您可以从事件中删除 host 字段

input {
  http {
    host => "127.0.0.1"
    port => 8080
  }
}

filter {
  mutate {
    remove_field => {"host"}
  }
}

output {
  file {
    path => "output.txt"
  }
}

grok

使用 grok 过滤器,您可以解析非结构化数据并将其结构化为字段。grok 过滤器使用文本模式来匹配日志中的文本。您可以将文本模式视为包含正则表达式的变量。

文本模式的格式如下

%{SYNTAX:SEMANTIC}

SYNTAX 是文本应遵循的格式,以便模式匹配。您可以输入 grok 的任何预定义模式。例如,您可以使用电子邮件标识符从给定文本中匹配电子邮件地址。

SEMANTIC 是匹配文本的任意名称。例如,如果您使用电子邮件标识符语法,可以将其命名为“email”。

以下请求包含访问者的 IP 地址、访问者姓名、请求时间戳、HTTP 动词和 URL、HTTP 状态码以及字节数

184.252.108.229 - joe [20/Sep/2017:13:22:22 +0200] GET /products/view/123 200 12798

将此请求拆分为不同的字段

filter {
  grok {
   match => { "message" => " %{IP: ip_address} %{USER:identity}
                             %{USER:auth} \[%{HTTPDATE:reg_ts}\]
                             \"%{WORD:http_verb}
                             %{URIPATHPARAM: req_path}
                             \" %{INT:http_status:int}
                             %{INT:num_bytes:int}"}
  }
}

其中

  • IP:匹配 IP 地址字段。
  • USER:匹配用户名。
  • WORD:匹配 HTTP 动词。
  • URIPATHPARAM:匹配 URI 路径。
  • INT:匹配 HTTP 状态字段。
  • INT:匹配字节数。

这是 grok 过滤器将事件拆分为单独字段后的样子

ip_address: 184.252.108.229
identity: joe
reg_ts: 20/Sep/2017:13:22:22 +0200
http_verb:GET
req_path: /products/view/123
http_status: 200
num_bytes: 12798

对于常见的日志格式,您可以使用此处定义的预定义模式——Logstash 模式。您可以使用 mutate 过滤器对结果进行任何调整。

剩余 350 字符

有问题?

想贡献?