JSON 变异处理器 - Amazon CloudWatch 日志

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

JSON 变异处理器

本节包含有关可用于日志事件转换器的 JSON 变异处理器的信息。

addKeys

使用 addKeys 处理器向日志事件添加新的键值对。

字段 描述 必填? 默认 限制

entries

条目数组。数组中的每个项目都可以包含 keyvalueoverwriteIfExists 字段。

最多条目数:5

要添加的新条目的键

最大长度:128

最大嵌套键深度:3

要添加的新条目的值

最大长度:256

overwriteIfExists

如果您将其设置为 true,而事件中已存在 key,则现有值会被覆盖。默认值为 false

false

无限制

示例

以以下日志事件为例:

{ "outer_key": { "inner_key": "inner_value" } }

转换器配置如下,将 addKeysparseJSON 结合使用:

[ { "parseJSON": {} }, { "addKeys": { "entries": [ { "source": "outer_key.new_key", "value": "new_value" } ] } } ]

转换后的日志事件将如下所示。

{ "outer_key": { "inner_key": "inner_value", "new_key": "new_value" } }

deleteKeys

使用 deleteKeys 处理器从日志事件中删除字段。这些字段可以包含键值对。

字段 描述 必填? 默认 限制

withKeys

要删除的键列表。

无限制

最多条目数:5

示例

以以下日志事件为例:

{ "outer_key": { "inner_key": "inner_value" } }

转换器配置如下,将 deleteKeysparseJSON 结合使用:

[ { "parseJSON": {} }, { "deleteKeys": { "withKeys":["outer_key.inner_key"] } } ]

转换后的日志事件将如下所示。

{ "outer_key": {} }

moveKeys

使用 moveKeys 处理器将键从一个字段移动到另一个字段。

字段 描述 必填? 默认 限制

entries

条目数组。数组中的每个项目都可以包含 sourcetargetoverwriteIfExists 字段。

最多条目数:5

要移动的键

最大长度:128

最大嵌套键深度:3

target

要移动至的键

最大长度:128

最大嵌套键深度:3

overwriteIfExists

如果您将其设置为 true,而事件中已存在 key,则现有值会被覆盖。默认值为 false

false

无限制

示例

以以下日志事件为例:

{ "outer_key1": { "inner_key1": "inner_value1" }, "outer_key2": { "inner_key2": "inner_value2" } }

转换器配置如下,将 moveKeysparseJSON 结合使用:

[ { "parseJSON": {} }, { "moveKeys": { "entries": [ { "source": "outer_key1.inner_key1", "target": "outer_key2" } ] } } ]

转换后的日志事件将如下所示。

{ "outer_key1": {}, "outer_key2": { "inner_key2": "inner_value2", "inner_key1": "inner_value1" } }

renameKeys

使用 renameKeys 处理器重命名日志事件中的键。

字段 描述 必填? 默认 限制

entries

条目数组。数组中的每个项目都可以包含 keytargetoverwriteIfExists 字段。

无限制

最多条目数:5

要重命名的键

无限制

最大长度:128

target

新的键名称

无限制

最大长度:128

最大嵌套键深度:3

overwriteIfExists

如果您将其设置为 true,而事件中已存在 key,则现有值会被覆盖。默认值为 false

false

无限制

示例

以以下日志事件为例:

{ "outer_key": { "inner_key": "inner_value" } }

转换器配置如下,将 renameKeysparseJSON 结合使用:

[ { "parseJSON": {} }, { "renameKeys": { "entries": [ { "key": "outer_key", "target": "new_key" } ] } } ]

转换后的日志事件将如下所示。

{ "new_key": { "inner_key": "inner_value" } }

copyValue

使用 copyValue 处理器复制日志事件中的值。您还可以通过将以下元数据键的值复制到日志事件中,来使用此处理器向日志事件添加元数据:@logGroupName@logGroupStream@accountId@regionName。以下示例对此进行了说明。

字段 描述 必填? 默认 限制

entries

条目数组。数组中的每个项目都可以包含 sourcetargetoverwriteIfExists 字段。

最多条目数:5

要复制的键

最大长度:128

最大嵌套键深度:3

target

将值复制到的键

无限制

最大长度:128

最大嵌套键深度:3

overwriteIfExists

如果您将其设置为 true,而事件中已存在 key,则现有值会被覆盖。默认值为 false

false

无限制

示例

以以下日志事件为例:

{ "outer_key": { "inner_key": "inner_value" } }

转换器配置如下,将 copyValueparseJSON 结合使用:

[ { "parseJSON": {} }, { "copyValue": { "entries": [ { "source": "outer_key.new_key", "target": "new_key" }, { "source": "@logGroupName", "target": "log_group_name" }, { "source": "@logGroupStream", "target": "log_group_stream" }, { "source": "@accountId", "target": "account_id" }, { "source": "@regionName", "target": "region_name" } ] } } ]

转换后的日志事件将如下所示。

{ "outer_key": { "inner_key": "inner_value" }, "new_key": "inner_value", "log_group_name": "myLogGroupName", "log_group_stream": "myLogStreamName", "account_id": "012345678912", "region_name": "us-east-1" }

listToMap

listToMap 处理器获取包含键字段的对象列表,并将其转换为目标键的映射。

字段 描述 必填? 默认 限制

中的密钥 ProcessingEvent 包含将要转换为地图的对象列表

最大长度:128

最大嵌套键深度:3

要在生成的映射中提取为键的字段的键

最大长度:128

valueKey

如果指定此项,则将从 source 对象中提取您在此参数中指定的值,并将其放入生成的映射的值中。否则,源列表中的原始对象将放入生成的映射的值中。

最大长度:128

target

将保存生成的映射的字段的键

根节点

最大长度:128

最大嵌套键深度:3

flatten

一个布尔值,指示列表是扁平化为单个项目,还是生成的映射中的值将是列表。

默认情况下,匹配键的值将以数组表示。请将 flatten 设置为 true,以根据 flattenedElement 的值将数组转换为单个值。

false

flattenedElement

如果将 flatten 设置为 true,则使用 flattenedElement 指定要保留哪个元素(firstlast)。

flatten 设置为 true 时是必需的

值只能是 firstlast

示例

以以下日志事件为例:

{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ] }

使用案例 1 的转换器:flattenfalse

[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": false } } ]

转换后的日志事件将如下所示。

{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": [ "val-a" ], "b": [ "val-b1", "val-b2" ], "c": [ "val-c" ] }

使用案例 2 的转换器:flattentrueflattenedElementfirst

[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": true, "flattenedElement": "first" } } ]

转换后的日志事件将如下所示。

{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": "val-a", "b": "val-b1", "c": "val-c" }

使用案例 3 的转换器:flattentrueflattenedElementlast

[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": true, "flattenedElement": "last" } } ]

转换后的日志事件将如下所示。

{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": "val-a", "b": "val-b2", "c": "val-c" }