常用过滤器插件
本页面包含常见过滤器插件的列表。
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"
}
}
您可以转换为的其他数据类型包括 float
、string
和 boolean
值。如果您传入一个数组,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
过滤器对结果进行任何调整。