惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
腾讯CDC
Jina AI
Jina AI
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
小众软件
小众软件
M
MIT News - Artificial intelligence
MyScale Blog
MyScale Blog
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
月光博客
月光博客
L
LangChain Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
C
Check Point Blog
U
Unit 42
人人都是产品经理
人人都是产品经理

祈雨的笔记

安全多方计算MPC spark原理解析 kueue执行源码分析 spark on k8s执行源码分析 spark-operator源码解析 系统压测遇到的缓存击穿问题 我的世界PC与安卓联机 蚂蚁金服流量投放平台的AIG改造 G1大对象致Old区占用率高 日志打印导致接口响应率下跌分析 Groovy加载类导致OOM分析 ERROR日志打印导致CPU满载 记OceanBase死锁超时 应用发版期间服务响应超时 Ark Serverless初探 系统优化复盘一二三 The user specified as a definer does not exist Kong网关初探 API网关选型调研 CPU火焰图常用工具 配置中心选型调研 root操作Nginx导致用户组错误 基于Proxifier使用代理 FastJSON字段智能匹配踩坑 Nacos初探 记一次Nginx服务器CPU满荷载故障 基于券系统分库分表的思考 limit不参与SQL成本计算致索引失效 Linux常用性能监控命令 golang低版本http2偶现400
logstash过滤器(3)dissect
祈雨的笔记 · 2019-01-17 · via 祈雨的笔记

描述

Dissect过滤器是一种拆分操作。与常规拆分操作(其中一个分隔符应用于整个字符串)不同,此操作将一组分隔符应用于字符串值。Dissect不使用正则表达式,速度非常快。

1
2
3
4
5
6
7
filter {
dissect {
mapping => {
"message" => "%{ts} %{+ts} %{+ts} %{src} %{} %{prog}[%{pid}]: %{msg}"
}
}
}

语法解释

我们看到上面使用了和Grok很类似的%{}语法来表示字段,这显然是基于习惯延续的考虑。不过示例中%{+ts}的加号就不一般了。dissect 除了字段外面的字符串定位功能以外,还通过几个特殊符号来处理字段提取的规则:

  • %{+key}这个+表示,前面已经捕获到一个key字段了,而这次捕获的内容,自动添补到之前 key 字段内容的后面。
  • %{+key/2}这个/2表示,在有多次捕获内容都填到 key字段里的时候,拼接字符串的顺序谁前谁后。/2表示排第2位。
  • %{}是一个空的跳过字段。
  • %{?string}这个?表示,这块只是一个占位,并不会实际生成捕获字段存到事件里面。
  • %{?string} %{&string}当同样捕获名称都是string,但是一个?一个&的时候,表示这是一个键值对。

填充符

字段的->后缀例如%{function->},表示忽略它右边的填充,否则右边的多余填充将拆分到下一个字段中。

例如有填充->

1
%{id} %{function->} %{server}

输入:

1
f3000a3b Calc            machine-123

输出:

1
2
3
4
5
6
7
8
9
{
"server" => "machine-123",
"@timestamp" => 2019-01-17T15:04:01.694Z,
"function" => "Calc",
"@version" => "1",
"host" => "VM_0_10_centos",
"id" => "f3000a3b",
"message" => "f3000a3b Calc machine-123"
}

例如无填充->

1
%{id} %{function} %{server}

输入:

1
f3000a3b Calc            machine-123

输出:

1
2
3
4
5
6
7
8
9
{
"server" => " machine-123",
"@timestamp" => 2019-01-17T15:04:53.972Z,
"function" => "Calc",
"@version" => "1",
"host" => "VM_0_10_centos",
"id" => "f3000a3b",
"message" => "f3000a3b Calc machine-123"
}

参数

参数 类型 是否必须 默认值
convert_datatype hash {}
mapping hash {}

convert_datatype

使用此设置intfloat数据类型进行转换。

1
2
3
4
5
6
7
8
filter {
dissect {
convert_datatype => {
"cpu" => "float"
"code" => "int"
}
}
}

mapping

解析事件。如果需要匹配换行符,使用单引号定义值,并在单引号内使用实际的换行符来匹配换行,如下:

1
2
3
4
5
6
7
8
9
10
filter {
dissect {
mapping => {
# 单引号中使用实际换行匹配换行
"message" => '"%{field1}" "%{field2}"
"%{description}"'
"description" => "%{field3} %{field4} %{field5}"
}
}
}