JSON 变异处理器 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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" }