重定向处理器编辑

reroute 处理器允许将文档路由到另一个目标索引或数据流。它有两种主要模式

设置 destination 选项时,将明确指定目标,并且不能设置 datasetnamespace 选项。

如果未设置 destination 选项,则此处理器处于数据流模式。请注意,在此模式下,reroute 处理器只能用于遵循 数据流命名方案 的数据流。尝试在名称不符合要求的数据流上使用此处理器将引发异常。

数据流的名称由三部分组成:<类型>-<数据集>-<命名空间>。有关更多详细信息,请参阅 数据流命名方案 文档。

此处理器可以使用静态值或文档中的引用字段来确定新目标的 datasetnamespace 组件。有关更多详细信息,请参阅 表 38,“重定向选项”

无法使用 reroute 处理器更改数据流的 type

执行 reroute 处理器后,当前管道的所有其他处理器都将被跳过,包括最终管道。如果当前管道是在 管道 的上下文中执行的,则调用管道也将被跳过。这意味着在管道中最多执行一个 reroute 处理器,从而允许定义互斥的路由条件,类似于 if、else-if、else-if、… 条件。

重定向处理器确保根据新目标设置 data_stream.<type|dataset|namespace> 字段。如果文档包含 event.dataset 值,则将更新该值以反映与 data_stream.dataset 相同的值。

请注意,客户端需要具有最终目标的权限。否则,文档将被拒绝,并显示如下所示的安全异常

{"type":"security_exception","reason":"action [indices:admin/auto_create] is unauthorized for API key id [8-dt9H8BqGblnY2uSI--] of user [elastic/fleet-server] on indices [logs-foo-default], this action is granted by the index privileges [auto_configure,create_index,manage,all]"}

表 38. 重定向选项

名称 必需 默认 描述

destination

-

目标的静态值。设置 datasetnamespace 选项时,不能设置此选项。

dataset

{{data_stream.dataset}}

数据流名称的数据集部分的字段引用或静态值。除了 索引名称 的标准外,不能包含 -,并且长度不能超过 100 个字符。示例值为 nginx.accessnginx.error

支持使用类似 mustache 的语法(表示为 {{双}}{{{三}} 个花括号)的字段引用。解析字段引用时,处理器会将无效字符替换为 _。如果所有字段引用都解析为 null、缺失或非字符串值,则使用索引名称的 <dataset> 部分作为回退。

namespace

{{data_stream.namespace}}

数据流名称的命名空间部分的字段引用或静态值。有关允许的字符,请参阅 索引名称 的标准。长度不能超过 100 个字符。

支持使用类似 mustache 的语法(表示为 {{双}}{{{三}} 个花括号)的字段引用。解析字段引用时,处理器会将无效字符替换为 _。如果所有字段引用都解析为 null、缺失或非字符串值,则使用索引名称的 <namespace> 部分作为回退。

description

-

处理器的描述。用于描述处理器的用途或其配置。

if

-

有条件地执行处理器。请参阅 有条件地运行处理器

ignore_failure

false

忽略处理器的故障。请参阅 处理管道故障

on_failure

-

处理处理器的故障。请参阅 处理管道故障

tag

-

处理器的标识符。用于调试和指标。

可以使用 if 选项定义应将文档重定向到新目标的条件。

{
  "reroute": {
    "tag": "nginx",
    "if" : "ctx?.log?.file?.path?.contains('nginx')",
    "dataset": "nginx"
  }
}

dataset 和 namespace 选项可以包含单个值或用作回退的值列表。如果字段引用解析为 null,则表示文档中不存在该字段,将使用列表中的下一个值或字段引用。如果字段引用解析为非 String 值,则处理器将失败。

在以下示例中,处理器将首先尝试解析 service.name 字段的值以确定 dataset 的值。如果该字段解析为 null、缺失或非字符串值,则它将尝试列表中的下一个元素。在这种情况下,这是静态值 "generic"。使用单个静态值配置 namespace 选项。

{
  "reroute": {
    "dataset": [
        "{{service.name}}",
        "generic"
    ],
    "namespace": "default"
  }
}