使用 S3 表格集成访问日志 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 S3 表格集成访问日志

S3 表格与集成 CloudWatch 允许您访问 CloudWatch 使用分析引擎(例如亚马逊 Athena、Amazon Redshift)和支持连接到 Apache Iceberg 兼容商店的第三方工具获取的日志数据。这种集成使您能够使用自己喜欢的工具执行全面的日志分析,并将 CloudWatch 日志中的数据与非CloudWatch数据相关联。

了解 S3 表集成

Amazon S3 表格集成是一种完全托管的解决方案,它使您在日志中的 CloudWatch 日志可以作为托管 Amazon S3 表使用。通过这种集成,除了日志功能外,您还可以更灵活地分析 CloudWatch 日志。

该集成的工作原理是创建托管 Amazon S3 表存储桶 (aws-cloudwatch),并根据数据源名称和类型将特定的日志源与 Amazon S3 表关联起来(可通过日志控制台的 “日志管理” > “数据源” 选项卡进行管理)。 CloudWatch 关联后,即可通过 Apache Iceberg 格式的 Amazon S3 表访问 CloudWatch 日志数据。这种格式为各种分析引擎提供了一种高效查询数据的标准化方法。

核心组件

数据源关联

根据数据源和类型标准将特定 CloudWatch 日志源链接到 S3 Tables 集成的过程。

Apache Iceberg 表

S3 Tables 使用的基础表格式,可提供结构化数据存储并支持与多个分析引擎兼容。

数据流向 S3 表

了解 CloudWatch 日志和 S3 表之间的数据流动方式有助于您规划集成并有效地管理日志数据。

创建关联时,Lo CloudWatch gs 会自动将与关联数据源名称和类型匹配的新日志事件发送到 CloudWatch托管的 S3 表存储桶。您可以在该数据源的相应表下的 logs 命名空间中找到这些事件。集成过程仅记录创建关联后添加的事件,不会回填创建关联之前的日志。

S3 表存储桶中的数据保留与为日志组设置的保留策略相匹配。例如,如果您将日志组设置为 1 天的保留期,则 CloudWatch 日志将在一天后从 CloudWatch 日志和 S3 表中删除数据。当您删除日志组或日志流时,Lo CloudWatch gs 还会从 S3 表存储桶中删除数据。

何时使用 S3 表格集成

考虑使用 S3 表集成将日志数据与其他外部或非数据关联起来,或者当您更喜欢使用 Amazon Athena 等其他分析工具对日志CloudWatch 数据进行 CloudWatch 分析时。当您需要超出 CloudWatch 日志中可用范围的功能时,请使用此集成。在以下情况下,这种集成特别有价值:

  • 您需要对大量日志数据运行类似 SQL 的复杂查询

  • 您想将日志分析与现有分析工作流程和工具集成

  • 您需要跨多个数据源的全面日志分析功能

除了现有的 CloudWatch 摄取和存储定价外,通过此集成创建的 S3 表无需支付额外的存储费用或表维护费用。

先决条件

在实施集成之前,请确保您具备以下条件:

  • 现有 CloudWatch 日志数据

  • 在 CloudWatch 日志和 S3 表之间进行跨服务访问的相应的 IAM 权限,如以下部分所述

IAM 权限

要将 CloudWatch 日志与 S3 表集成,您需要为两个不同的实体配置 IAM 权限:设置集成的用户或角色,以及 CloudWatch 日志承担的向 S3 表写入数据的服务角色。

适用于创建集成的角色或用户

设置集成的用户或角色需要以下权限:

  • observabilityadmin:CreateS3TableIntegration创建集成并logs:AssociateSourceToS3TableIntegration添加源代码

  • s3tables:CreateTableBuckets3tables:PutTableBucketEncryption,以及s3tables:PutTableBucketPolicy配置 S3 表存储桶

对于服务角色

将以下 IAM 策略附加到 CloudWatch Logs 用来向表存储桶写入数据的 IAM 服务角色。此策略授予写入表的权限。将aws-region123456789012、和log-group-name,替换为您的Amazon区域、账户 ID 和日志组名称。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:integrateWithS3Table" ], "Resource": ["arn:aws:logs:aws-region:123456789012:log-group:log-group-name"], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] }

将以下信任策略附加到 Lo CloudWatch gs 将代入向 S3 表写入日志数据的 IAM 服务角色。您可以在集成设置期间创建或选择此角色。这些条件限制了该角色,因此 CloudWatch Logs 只能为指定的账户和日志组代入该角色。将aws-region123456789012、和log-group-name,替换为您的Amazon区域、账户 ID 和日志组名称。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:aws-region:123456789012:log-group:log-group-name"] } } } ] }

KMS 密钥策略(适用于加密数据)

如果您使用客户托管密钥加密日志数据,则必须向 CloudWatch 服务主体和 S3 Tables 维护服务主体授予对该密钥的访问权限。将以下语句添加到您的 KMS 密钥策略中。将占位符值替换为您的 Amazon Web Services 账户 ID、区域、KMS 密钥 ID 以及 S3 表或表存储桶 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnableSystemTablesKeyUsage", "Effect": "Allow", "Principal": { "Service": "systemtables.cloudwatch.amazonaws.com" }, "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:aws-region:123456789012:key/key-id", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } }, { "Sid": "EnableKeyUsage", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:aws-region:123456789012:key/key-id", "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn": "<table-or-table-bucket-arn>/*" } } } ] }

开始使用

要开始使用 S3 表集成,您需要在 CloudWatch 日志和 S3 表之间设置集成。此过程包括配置数据源关联和设置适当的 IAM 权限。

创建 S3 表格集成
  1. 打开 CloudWatch 日志控制台,网址https://console.aws.amazon.com/cloudwatch/为”。

  2. 选择设置全局创建 S3 表集成

  3. 自定义 S3 表中日志的加密方式,以及 CloudWatch 日志将用于将日志写入 S3 表的角色。

  4. 选择创建 S3 表集成

将源关联到 S3 表集成
  1. 打开 CloudWatch 日志控制台,网址https://console.aws.amazon.com/cloudwatch/为”。

  2. 选择设置全局管理 S3 表集成

  3. 选择 “关联数据源”。

  4. 选择要为其启用集成的数据源名称和数据源类型。

  5. 选择 “关联数据源”。

从日志管理页面将源关联到 S3 表集成
  1. 打开 CloudWatch 日志控制台,网址https://console.aws.amazon.com/cloudwatch/为”。

  2. 在导航窗格中选择 “日志管理”。

  3. 选择 “数据源” 选项卡。

  4. 选择要集成的数据源名称和数据源类型。

  5. 选择 “数据源操作”

  6. 选择与 S3 表集成 “关联”。

  7. 查看数据源,然后选择 “关联数据源”。

在使用数据之前,您必须执行以下 3 个步骤:

  1. 将亚马逊 S3 表格与Amazon分析服务集成-使用亚马逊 S3 控制台

  2. 配置 Lake Formation 权限

  3. Connect 使用分析工具

将亚马逊 S3 表格与Amazon分析服务集成-使用亚马逊 S3 控制台(链接

使用 S3 控制台启用 S3 表集成
  1. 打开 Amazon S3 控制台,网址为 https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择表存储桶

  3. 点击顶部的 “启用集成”。

  4. 首次在任何区域集成表存储桶时,Amazon S3 会代表您创建一个新的 IAM 服务角色。此角色允许 Lake Formation 访问您账户中的所有表存储桶,并在 G Amazon lue 数据目录中联合访问您的表。

配置 Lake Formation 权限

虽然 CloudWatch 日志有权写入表(在前面的步骤中配置),但用户和分析角色不会自动拥有读取数据的权限。您必须使用 Amazon Lake Formation 明确授予访问权限。您必须为每位想要提供表访问权限的 IAM 委托人执行此操作。

向用户或角色授予查询权限

您必须向将在 Athena 或 Redshift 中运行查询的 IAM 委托人(用户或角色)授予选择和描述权限。

  1. 打开 Amazon Lake Formation 控制台。

  2. 在导航窗格的权限下,选择数据湖权限

  3. 选择授权

  4. 委托人:选择需要访问权限的 IAM 用户或角色(例如,您的数据分析师或您当前正在使用的管理员角色)。

  5. LF-Tags 或目录资源:选择命名数据目录资源。

  6. 数据库和表

    • 选择 CloudWatch 集成创建的 S3 表存储桶(aws-cloudwatch)。

    • 选择与您的数据源关联的特定表(可选)。

  7. 表权限:选择 “选择描述”。

  8. 选择授权

注意

如果您在 Athena 中查询日志时遇到 “访问被拒绝” 错误,请确保运行查询的用户同时拥有适用于 Athena 的相应的 IAM 权限和上面定义的 Lake Formation 权限。

要详细了解 Lake Formation 权限,请https://docs.aws.amazon.com/lake-formation/latest/dg/granting访问-catalog-permissions.html

Connect 使用分析工具

授予权限后,您可以将首选分析服务配置为查询 S3 表。S3 表格使用 Apache Iceberg 格式,亚马逊 Athena、Amazon Redshift 和 Amazon EMR 原生支持该格式。

在 Amazon Athena 中查询日志数据

Amazon Athena 通过 Amazon S3 表格目录与 S3 表进行交互。

设置 Athena 以查询您的日志数据
  1. 打开亚马逊 Athena 主机,网址为。https://console.aws.amazon.com/athena/

  2. 在查询编辑器中,从数据源下拉列表中选择 Amazon S3 表目录。

  3. 如果您看不到目录,请确保您已完成上述针对特定用户角色的 Lake Formation 权限步骤。

  4. 选择目录后,您的日志表将出现在数据库列表中。现在,您可以对日志数据运行标准 SQL 查询。

查询示例:SELECT * FROM "amazon_vpc__flow" LIMIT 100;

要详细了解如何将分析服务与 S3 表格连接起来,请访问 https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws .html。