解析字符串编辑

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.pidservice.nameservice.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 文档。