Amazon Athena CloudWatch 连接器
Amazon Athena CloudWatch 连接器使 Amazon Athena 可以与 CloudWatch 通信,以便您可以使用 SQL 查询日志数据。
此连接器不使用 Glue 连接将配置属性集中保存到 Glue 中。连接配置通过 Lambda 完成。
连接器将您的 LogGroup 映射为架构,并将每个 LogStream 映射为表。连接器还映射一个特殊的 all_log_streams 视图,其中包含 LogGroup 中的所有 LogStream。此视图使您能够一次性查询 LogGroup 中的所有日志,而不是单个地搜索每个 LogStream。
先决条件
可以使用 Athena 控制台或 AWS Serverless Application Repository 将该连接器部署到您的 AWS 账户。有关更多信息,请参阅 创建数据来源连接 或 使用 AWS Serverless Application Repository 部署数据来源连接器。
参数
使用本节中的参数来配置 CloudWatch 连接器。
我们建议您使用 Glue 连接对象来配置 CloudWatch 连接器。要执行此操作,请将 CloudWatch 连接器 Lambda 的 glue_connection 环境变量设置为要使用的 Glue 连接的名称。
Glue 连接属性
使用以下命令来获取 Glue 连接对象的架构。此架构包含可用于控制连接的所有参数。
aws glue describe-connection-type --connection-type CLOUDWATCH
Lambda 环境属性
-
glue_connection – 指定与联合连接器关联的 Glue 连接的名称。
注意
-
所有使用 Glue 连接的连接器都必须使用 AWS Secrets Manager 来存储凭证。
-
使用 Glue 连接创建的 CloudWatch 连接器不支持使用多路复用处理程序。
-
使用 Glue 连接创建的 CloudWatch 连接器仅支持
ConnectionSchemaVersion2。
-
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 拥塞控制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.yamlPolicies 部分。以下列表汇总了所需的权限。
-
Amazon S3 写入权限 – 连接器需要对 Amazon S3 中的位置具有写入权限,以溢出大型查询的结果。
-
Athena GetQueryExecution – 当上游 Athena 查询终止时,该连接器将使用此权限快速失败。
-
CloudWatch 日志读写 - 连接器使用此权限读取您的日志数据并写入其诊断日志。
性能
Athena CloudWatch 连接器尝试通过并行扫描查询所需的日志流来优化针对 CloudWatch 的查询。在特定时间段筛选条件下,谓词下推既在 Lambda 函数内执行,也在 CloudWatch 日志中执行。
为了获得最佳性能,日志组名称和日志流名称仅限使用小写。使用混合大小写会使连接器执行不区分大小写的搜索,这种搜索的计算密集度更高。
注意
CloudWatch 连接器不支持大写数据库名称。
传递查询
CloudWatch 连接器支持使用 CloudWatch Logs Insights 查询语法的传递查询。有关 CloudWatch Logs Insights 的更多信息,请参阅《Amazon CloudWatch Logs 用户指南》中的使用 CloudWatch Logs Insights 分析日志数据。
要使用 Cloudera 创建传递查询,请使用以下语法:
SELECT * FROM TABLE( system.query( STARTTIME => 'start_time', ENDTIME => 'end_time', QUERYSTRING => 'query_string', LOGGROUPNAMES => 'log_group-names', LIMIT => 'max_number_of_results' ))
以下示例 CloudWatch 传递查询会筛选不等于 1000 时的 duration 字段。
SELECT * FROM TABLE( system.query( STARTTIME => '1710918615308', ENDTIME => '1710918615972', QUERYSTRING => 'fields @duration | filter @duration != 1000', LOGGROUPNAMES => '/aws/lambda/cloudwatch-test-1', LIMIT => '2' ))
许可证信息
Amazon Athena CloudWatch 连接器项目已获得 Apache-2.0 许可证
其他资源
有关此连接器的更多信息,请访问 GitHub.com 上的相应站点