使用日志写入亚马逊 Data Firehose CloudWatch - Amazon Data Firehose
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

亚马逊 Data Firehose 以前被称为亚马逊 Kinesis Data Firehose

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

使用日志写入亚马逊 Data Firehose CloudWatch

CloudWatch 可以使用 CloudWatch 订阅过滤器将日志事件发送到 Firehose。有关更多信息,请参阅使用 Amazon Data Firehose 的订阅筛选条件

CloudWatch 日志事件以压缩的 gzip 格式发送到 Firehose。如果要将解压缩后的日志事件传送到 Firehose 目标,可以使用 Firehose 中的解压缩功能自动解压缩日志。 CloudWatch

重要

Amazon Firehose 目前不支持将 CloudWatch 日志传送到亚马逊 OpenSearch 服务目的地,因为亚马逊 CloudWatch 将多个日志事件合并为一个 Firehose 记录,而亚马逊 OpenSearch 服务无法在一条记录中接受多个日志事件。作为替代方案,您可以考虑在 CloudWatch 日志中使用亚马逊 OpenSearch 服务的订阅筛选条件

解压日志 CloudWatch

如果您使用 Firehose 传送 CloudWatch 日志,并希望将解压缩后的数据传送到传输流目标,请使用 Firehose 数据格式转换(Parquet、ORC)或动态分区。您必须为 Firehose 传送流启用解压功能。

您可以使用 Amazon Web Services Management Console、 Amazon Command Line Interface 或 Amazon SDK 启用解压缩。

注意

如果您在直播上启用解压缩功能,请将该流专门用于 CloudWatch 日志订阅过滤器,而不是用于Vended Logs。如果您在用于同时采集日志和已售 CloudWatch 日志的流上启用解压缩功能,则向Firehose提取Vended Logs将失败。此解压缩功能仅适用于 CloudWatch 日志。

解压日志后的消息提取 CloudWatch

启用解压缩功能时,还可以选择启用消息提取。使用消息提取时,Firehose 会从解压缩的 CloudWatch 日志记录中筛选出所有元数据,例如所有者、日志组、日志流和其他元数据,并仅提供消息字段内的内容。如果您要将数据传送到 Splunk 目标,则必须开启消息提取功能,Splunk 才能解析数据。以下是解压缩后的输出示例,无论是否使用消息提取。

图 1:未提取消息的解压缩后的输出示例:

{ "owner": "111111111111", "logGroup": "CloudTrail/logs", "logStream": "111111111111_CloudTrail/logs_us-east-1", "subscriptionFilters": [ "Destination" ], "messageType": "DATA_MESSAGE", "logEvents": [ { "id": "31953106606966983378809025079804211143289615424298221568", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root1\"}" }, { "id": "31953106606966983378809025079804211143289615424298221569", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root2\"}" }, { "id": "31953106606966983378809025079804211143289615424298221570", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root3\"}" } ] }

图 2:使用消息提取进行解压缩后的输出示例:

{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root1\"} {\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root2\"} {\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root3\"}

启用和禁用解压缩

您可以使用 Amazon Command Line Interface 或 Amazon 软件开发工具包启用和禁用解压缩。 Amazon Web Services Management Console

使用对新的数据流启用解压缩 Amazon Web Services Management Console

要在新数据流上启用解压缩,请使用 Amazon Web Services Management Console
  1. 登录 Amazon Web Services Management Console 并打开 Kinesis 控制台,网址为 https://console.aws.amazon.com/kinesis。

  2. 在导航窗格中选择数据 Firehose

  3. 选择创建传输流

  4. “选择来源和目的地” 下

    传送流源

    你的 Firehose 直播的来源。选择以下来源之一:

    • 直接 PUT — 选择此选项可创建制作者应用程序直接写入的 Firehose 流。目前,以下是与 Fire Amazon hose 中的 Direct PUT 集成的服务、代理和开源服务:

    • Kinesis 流:选择此选项可配置使用 Kinesis 数据流作为数据源的 Firehose 流。然后,您可以使用 Firehose 轻松地从现有 Kinesis 数据流中读取数据并将其加载到目的地。有关更多信息,请参阅使用 Kinesis Data Streams 写入 Firehose

    目标位置

    你的 Firehose 直播的目的地。选择以下操作之一:

    • Amazon S3

    • Splunk

  5. 直播名称下,输入直播的名称。

  6. 在 “转换记录” 下方-可选

    • 在 “从 Amazon CloudWatch Logs 解压源记录” 部分中,选择开启解压缩

    • 如果要在解压缩后使用消息提取,请选择 “启用消息提取”。

使用对现有数据流启用解压缩 Amazon Web Services Management Console

如果您有一个带有 Lambda 函数的 Firehose 流来执行解压缩,则可以将其替换为 Firehose 解压缩功能。在继续操作之前,请查看您的 Lambda 函数代码以确认它仅执行解压缩或消息提取。您的 Lambda 函数的输出应与上一节图 1 或图 2 中显示的示例类似。如果输出看起来相似,则可以使用以下步骤替换 Lambda 函数。

  1. 用此蓝图替换您当前的 Lambda 函数。新的蓝图 Lambda 函数会自动检测传入的数据是压缩还是解压缩。它只有在输入数据被压缩后才会执行解压缩。

  2. 使用内置的 Firehose 选项开启解压功能,进行解压缩。

  3. 如果您的 Firehose 直播尚未启用,请启用该 CloudWatch 指标。监控指标 CloudWatchProcessorLambda _ IncomingCompressedData 并等到该指标变为零。这确认发送到您的 Lambda 函数的所有输入数据均已解压缩,并且不再需要 Lambda 函数。

  4. 移除 Lambda 数据转换,因为您不再需要它来解压缩您的流。

使用禁用解压缩 Amazon Web Services Management Console

要禁用对数据流的解压缩,请使用 Amazon Web Services Management Console

  1. 登录 Amazon Web Services Management Console 并打开 Kinesis 控制台,网址为 https://console.aws.amazon.com/kinesis。

  2. 在导航窗格中选择数据 Firehose

  3. 选择您要编辑的直播流。

  4. 选择配置

  5. 在 “转换记录” 部分中,选择编辑

  6. 在 “从 Amazon CloudWatch Logs 解压源记录” 下,取消选中 “打开解压缩”,然后选择 “保存更改”。

常见问题解答

如果在解压缩过程中出错,源数据会怎样?

如果 Amazon Firehose 无法解压缩记录,则记录将按原样(压缩格式)传送到您在创建传输流时指定的错误 S3 存储桶。除了记录外,交付的对象还包括错误代码和错误消息,这些对象将传送到名为的 S3 存储桶前缀decompression-failed。解压缩记录失败后,Firehose 将继续处理其他记录。

成功解压缩后,如果处理管道出错,源数据会怎样?

如果 Amazon Firehose 在解压缩后的处理步骤(例如动态分区和数据格式转换)中出错,则记录将以压缩格式传送到您在创建传输流时指定的错误 S3 存储桶。除了记录外,交付的对象还包括错误代码和错误消息。

如果出现错误或异常,如何通知您?

如果在解压缩过程中出现错误或异常,如果您配置 CloudWatch 日志,Firehose 会将错误消息 CloudWatch 记录到日志中。此外,Amazon Firehose 会向您可以 CloudWatch 监控的指标发送指标。您也可以选择根据Firehose发出的指标创建警报。

put操作不是来自 CloudWatch 日志时会发生什么?

如果客户不是puts来自 CloudWatch Logs,则会返回以下错误消息:

Put to Firehose failed for AccountId: <accountID>, FirehoseName: <firehosename> because the request is not originating from allowed source types.

Firehose 为解压缩功能发布了哪些指标?

Firehose 会发出每条记录的解压缩指标。您应该选择周期(1 分钟)、统计数据(总和)、日期范围,以获取DecompressedRecords失败或成功或失DecompressedBytes败或成功的次数。有关更多信息,请参阅 CloudWatch 日志解压缩指标