解析字符串
编辑解析字符串编辑
dissect
处理器使用定义的模式对传入的字符串进行标记化。
processors: - dissect: tokenizer: "%{key1} %{key2} %{key3|convert_datatype}" field: "message" target_prefix: "dissect"
dissect
处理器具有以下配置设置
-
tokenizer
- 用于定义 解析 模式的字段。可选的转换数据类型可以在键之后使用
|
作为分隔符提供,以将值从字符串转换为整数、长整数、浮点数、双精度数、布尔值或 IP 地址。 -
field
- (可选) 要标记化的事件字段。默认值为
message
。 -
target_prefix
- (可选) 将提取值写入的字段名称。当定义为空字符串时,处理器将在事件的根目录创建键。默认值为
dissect
。当目标键已存在于事件中时,处理器不会替换它并记录错误;您需要在使用 dissect 之前删除或重命名键,或者启用overwrite_keys
标志。 -
ignore_failure
- (可选) 用于控制如果标记器无法匹配消息字段是否返回错误的标志。如果设置为 true,处理器将静默恢复原始事件,允许执行后续处理器(如果有)。如果设置为 false(默认值),处理器将记录错误,阻止其他处理器的执行。
-
overwrite_keys
- (可选) 当设置为 true 时,处理器将覆盖事件中现有的键。默认值为 false,如果键已存在,这会导致处理器失败。
-
trim_values
-
(可选) 启用对提取值的修剪。可用于删除前导和/或尾随空格。可能的值为
-
none
: (默认值) 不执行修剪。 -
left
: 值在左侧(前导)被修剪。 -
right
: 值在右侧(尾随)被修剪。 -
all
: 值在开头和结尾被修剪。
-
-
trim_chars
- (可选) 用于从值中修剪的字符集,当启用修剪时。默认值为修剪空格字符 (
" "
)。要修剪多个字符,只需将其设置为包含所有要修剪的字符的字符串。例如,trim_chars: " \t"
将修剪空格和/或制表符。
为了标记化成功,所有键都必须被找到并提取,如果其中一个键找不到,将记录错误,并且不会对原始事件进行任何修改。
键可以包含除保留后缀或前缀修饰符之外的任何字符:/
,&
, +
, #
和 ?
.
有关支持条件的列表,请参见 条件。
解析示例编辑
在此示例中,假设应用程序生成以下消息
"321 - App01 - WebServer is starting" "321 - App01 - WebServer is up and running" "321 - App01 - WebServer is scaling 2 pods" "789 - App02 - Database is will be restarted in 5 minutes" "789 - App02 - Database is up and running" "789 - App02 - Database is refreshing tables"
使用 dissect
处理器将每条消息拆分为三个字段,例如 service.pid
、service.name
和 service.status
processors: - dissect: tokenizer: '"%{service.pid|integer} - %{service.name} - %{service.status}"' field: "message" target_prefix: ""
此配置生成类似于以下的字段
"service": { "pid": 321, "name": "App01", "status": "WebServer is up and running" },
service.name
是一个 ECS 关键字字段,这意味着您可以在 Elasticsearch 中使用它进行过滤、排序和聚合。
尽可能使用与 ECS 兼容的字段名称。有关更多信息,请参见 Elastic Common Schema 文档。