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

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

Amazon Athena CloudWatch 连接器

Amazon Athena CloudWatch 连接器使 Amazon Athena 可以与 CloudWatch 通信,以便您可以使用 SQL 查询日志数据。

连接器将您的 LogGroup 映射为架构,并将每个 LogStream 映射为表。连接器还映射一个特殊的 all_log_streams 视图,其中包含 LogGroup 中的所有 LogStream。此视图使您能够一次性查询 LogGroup 中的所有日志,而不是单个地搜索每个 LogStream。

先决条件

参数

使用本节中的 Lambda 环境变量来配置 CloudWatch 连接器。

  • spill_bucket - 为超出 Lambda 函数限制的数据指定 Amazon S3 存储桶。

  • spill_prefix -(可选)默认为指定 spill_bucket(称为 athena-federation-spill)中的子文件夹。我们建议您在此位置配置 Amazon S3 存储生命周期,以删除早于预定天数或小时数的溢出内容。

  • spill_put_request_headers —(可选)用于溢出的 Amazon S3 putObject 请求的请求标头和值的 JSON 编码映射(例如 {"x-amz-server-side-encryption" : "AES256"})。有关其他可能的标头,请参阅《Amazon Simple Storage Service API 参考》中的 PutObject

  • kms_key_id -(可选)默认情况下,将使用经过 AES-GCM 身份验证的加密模式和随机生成的密钥对溢出到 Amazon S3 的任何数据进行加密。要让您的 Lambda 函数使用 KMS 生成的更强的加密密钥(如 a7e63k4b-8loc-40db-a2a1-4d0en2cd8331),您可以指定 KMS 密钥 ID。

  • disable_spill_encryption -(可选)当设置为 True 时,将禁用溢出加密。默认值为 False,此时将使用 AES-GCM 对溢出到 S3 的数据使用进行加密 - 使用随机生成的密钥,或者使用 KMS 生成密钥。禁用溢出加密可以提高性能,尤其是当您的溢出位置使用服务器端加密时。

该连接器还支持 AIMD 拥塞控制,以通过 Amazon Athena Query Federation SDK ThrottlingInvoker构造处理来自 CloudWatch 的节流事件。您可以通过设置以下任何可选环境变量来调整默认的节流行为:

  • throttle_initial_delay_ms - 在第一个拥塞事件之后应用的初始调用延迟。默认为 10 毫秒。

  • throttle_max_delay_ms - 调用之间的最大延迟时间。您可以通过将其分成 1000 毫秒来推导 TPS。默认为 1000 毫秒。

  • throttle_decrease_factor – Athena 降低调用速率的因子。默认值为 0.5。

  • throttle_increase_ms – Athena 减少调用延迟的速率。默认为 10 毫秒。

数据库和表

Athena CloudWatch 连接器将您的 LogGroup 映射为架构(即数据库),并将每个 LogStream 映射为表。连接器还映射一个特殊的 all_log_streams 视图,其中包含 LogGroup 中的所有 LogStream。此视图使您能够一次性查询 LogGroup 中的所有日志,而不是单个地搜索每个 LogStream。

Athena CloudWatch 连接器映射的每个表都有以下架构。此架构与 CloudWatch 日志提供的字段相匹配。

  • log_stream - VARCHAR,包含该行来自的 LogStream 的名称。

  • 时间 - INT64,包含生成日志行时的纪元时间。

  • 消息 - VARCHAR,包含日志消息。

示例

以下示例演示了如何对指定的 LogStream 执行 SELECT 查询。

SELECT * FROM "lambda:cloudwatch_connector_lambda_name"."log_group_path"."log_stream_name" LIMIT 100

以下示例演示了如何使用 all_log_streams 视图对指定 LogGroup 中的所有 LogStream 执行查询。

SELECT * FROM "lambda:cloudwatch_connector_lambda_name"."log_group_path"."all_log_streams" LIMIT 100

所需权限

要获取有关此连接器所需 IAM policy 的完整详细信息,请查看 athena-cloudwatch.yaml 文件的 Policies 部分。以下列表汇总了所需的权限。

  • Amazon S3 写入权限 – 连接器需要对 Amazon S3 中的位置具有写入权限,以溢出大型查询的结果。

  • Athena GetQueryExecution – 当上游 Athena 查询终止时,该连接器将使用此权限快速失败。

  • CloudWatch 日志读写 - 连接器使用此权限读取您的日志数据并写入其诊断日志。

性能

Athena CloudWatch 连接器尝试通过并行扫描查询所需的日志流来优化针对 CloudWatch 的查询。在特定时间段筛选条件下,谓词下推既在 Lambda 函数内执行,也在 CloudWatch 日志中执行。

为了获得最佳性能,日志组名称和日志流名称仅限使用小写。使用混合大小写会使连接器执行不区分大小写的搜索,这种搜索的计算密集度更高。

许可证信息

Amazon Athena CloudWatch 连接器项目已获得 Apache-2.0 许可证授权。

另请参阅

有关此连接器的更多信息,请访问 GitHub.com 上的相应站点