Logging - Amazon Managed Streaming for Apache Kafka
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Logging

您可以将 Apache Kafka 代理日志传送至以下一种或多种目标类型:、、。Amazon CloudWatch Logs, Amazon S3, Amazon Kinesis Data Firehose。您也可以记录 Amazon MSK API呼叫 AWS CloudTrail.

代理日志

利用代理日志,您可以对 Apache Kafka 应用程序进行问题排查,并分析它们与MSK 集群的通信。您可以配置新的或现有的MSK 集群,以便将 INFO 级代理日志传送至以下一种或多种类型的目标资源:CloudWatch 日志组、S3 存储桶、Kinesis Data Firehose 传输流。然后,您可以通过 Kinesis Data Firehose 将日志数据从传输流传输到 Amazon ES。您必须先创建目标资源,然后再配置集群以向其传送代理日志。Amazon MSK 不会为您创建这些目标资源(如果它们尚不存在)。有关这三种类型的目标资源以及如何创建这些资源的信息,请参阅以下文档:

所需权限

要让 Amazon MSK 将代理日志传送至您配置的目标,您需要确保将 AmazonMSKFullAccess 策略附加到您的 IAM 角色。要将代理日志流式传输到 S3 存储桶,您还需要将 s3:PutBucketPolicy 权限附加到您的 IAM 角色。有关编辑 S3 存储桶策略的信息,请参阅《Amazon S3 控制台用户指南》中的如何添加 S3 存储桶策略? 有关 IAM 策略的一般信息,请参阅《IAM 用户指南》中的访问管理

与 SSE-KMS 存储桶结合使用时必需的 CMK 密钥策略

如果使用具有客户托管的客户主密钥 (CMK) 的 AWS KMS 托管密钥 (SSE-KMS) 为 S3 存储桶启用了服务器端加密,请将以下内容添加到 CMK 的密钥策略中,以便 Amazon MSK 可以将代理文件写入存储桶。

{ "Sid": "Allow Amazon MSK to use the key.", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

使用 AWS 管理控制台配置代理日志

如果您正在创建新群集,请查找 经纪人日志交付 标题 监控 第节。您可以指定希望 Amazon MSK 向其传送代理日志的目标。

对于现有集群,请从集群列表中选择集群,然后选择 Details (详细信息) 选项卡。向下滚动到 监控 然后选择 Edit button 您可以指定希望 Amazon MSK 向其传送代理日志的目标。

使用 AWS CLI配置代理日志

使用 create-clusterupdate-monitoring 命令时,您可以选择指定 logging-info 参数并将类似如下的 JSON 结构传递给该参数。在此 JSON 中,所有三种目标类型都是可选的。

{ "BrokerLogs": { "S3": { "Bucket": "ExampleBucketName", "Prefix": "ExamplePrefix", "Enabled": true }, "Firehose": { "DeliveryStream": "ExampleDeliveryStreamName", "Enabled": true }, "CloudWatchLogs": { "Enabled": true, "LogGroup": "ExampleLogGroupName" } } }

使用 API 配置代理日志

您可以在传递给 CreateClusterUpdateMonitoring 操作的 JSON 中指定可选的 loggingInfo 结构。

注意

默认情况下,启用Broker记录时, Amazon MSK 日志 INFO 级别日志到指定目标。但是,ApacheKafka2.4.x和更高版本的用户可以将代理日志级别动态设置为 Log4J日志级别. 有关动态设置代理日志级别的信息,请参阅 KIP-412: 扩展管理API以支持动态应用程序日志级别. 如果您将日志级别动态设置为 DEBUGTRACE,建议使用 Amazon S3 或 Kinesis Data Firehose 作为日志目标。如果您使用 CloudWatch 日志作为日志目标,您可以动态启用 DEBUGTRACE 级别记录, Amazon MSK 可以持续提供日志样本。这可能会显著影响经纪人的绩效,只有当这种情况下 INFO 日志级别不足以确定问题的根本原因。

使用 AWS CloudTrail 记录 Amazon MSK API 调用

Amazon MSK 与 AWS CloudTrail 集成,后者是一项服务,该服务提供由用户、角色或 Amazon MSK 中的 AWS 服务执行的操作的记录。CloudTrail 会捕获 Amazon MSK 的所有 API 调用作为事件。捕获的调用包含来自 Amazon MSK 控制台和代码的 Amazon MSK API 操作调用。

如果您创建跟踪,则可以使 CloudTrail 事件持续传送到 Amazon S3 存储桶(包括Amazon MSK的事件)。如果您不配置跟踪,则仍可在 CloudTrail 控制台的 Event history (事件历史记录) 中查看最新事件。利用 CloudTrail 收集的信息,您可以确定向 Amazon MSK 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。

要了解有关 CloudTrail 的更多信息,包括如何对其进行配置和启用,请参阅 AWS CloudTrail User Guide

CloudTrail 中的 Amazon MSK 信息

创建账户时,将在 AWS 账户上启用 CloudTrail。当 Amazon MSK 中发生受支持的事件活动时,该活动将记录在 CloudTrail 事件中,并与其他 AWS 服务事件一同保存在 Event history (事件历史记录) 中。您可以在 AWS 账户中查看、搜索和下载最新事件。有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件

要持续记录 AWS 账户中的事件(包括 Amazon MSK 的事件),请创建跟踪。通过跟踪,CloudTrail 可将日志文件传送至 Amazon S3 存储桶。默认情况下,在控制台中创建跟踪时,此跟踪应用于所有 AWS 区域。此跟踪在 AWS 分区中记录来自所有区域的事件,并将日志文件传送至您指定的 Amazon S3 存储桶。此外,您可以配置其他 AWS 服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅以下内容:。

Amazon MSK 将所有操作作为事件记录在 CloudTrail 日志文件中。

每个事件或日志条目都包含有关生成请求的人员的信息。身份信息帮助您确定以下内容:

  • 请求是使用根用户凭证还是 AWS Identity and Access Management (IAM) 用户凭证发出的

  • 请求是使用角色还是联合身份用户的临时安全凭证发出的

  • 请求是否由其他 AWS 服务发出。

有关更多信息,请参阅 CloudTrail userIdentity 元素

示例:Amazon MSK 日志文件条目

跟踪是一种配置,可用于将事件作为日志文件传送到您指定的 Amazon S3 存储桶。CloudTrail 日志文件包含一个或多个日志条目。一个事件表示来自任何源的一个请求,包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪,因此它们不会以任何特定顺序显示。

以下示例显示了说明 DescribeClusterDeleteCluster 操作的 CloudTrail 日志条目。

{ "Records": [ { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "ABCDEF0123456789ABCDE", "arn": "arn:aws:iam::012345678901:user/Joe", "accountId": "012345678901", "accessKeyId": "AIDACKCEVSQ6C2EXAMPLE", "userName": "Joe" }, "eventTime": "2018-12-12T02:29:24Z", "eventSource": "kafka.amazonaws.com", "eventName": "DescribeCluster", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.14.67 Python/3.6.0 Windows/10 botocore/1.9.20", "requestParameters": { "clusterArn": "arn%3Aaws%3Akafka%3Aus-east-1%3A012345678901%3Acluster%2Fexamplecluster%2F01234567-abcd-0123-abcd-abcd0123efa-2" }, "responseElements": null, "requestID": "bd83f636-fdb5-abcd-0123-157e2fbf2bde", "eventID": "60052aba-0123-4511-bcde-3e18dbd42aa4", "readOnly": true, "eventType": "AwsApiCall", "recipientAccountId": "012345678901" }, { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "ABCDEF0123456789ABCDE", "arn": "arn:aws:iam::012345678901:user/Joe", "accountId": "012345678901", "accessKeyId": "AIDACKCEVSQ6C2EXAMPLE", "userName": "Joe" }, "eventTime": "2018-12-12T02:29:40Z", "eventSource": "kafka.amazonaws.com", "eventName": "DeleteCluster", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.14.67 Python/3.6.0 Windows/10 botocore/1.9.20", "requestParameters": { "clusterArn": "arn%3Aaws%3Akafka%3Aus-east-1%3A012345678901%3Acluster%2Fexamplecluster%2F01234567-abcd-0123-abcd-abcd0123efa-2" }, "responseElements": { "clusterArn": "arn:aws:kafka:us-east-1:012345678901:cluster/examplecluster/01234567-abcd-0123-abcd-abcd0123efa-2", "state": "DELETING" }, "requestID": "c6bfb3f7-abcd-0123-afa5-293519897703", "eventID": "8a7f1fcf-0123-abcd-9bdb-1ebf0663a75c", "readOnly": false, "eventType": "AwsApiCall", "recipientAccountId": "012345678901" } ] }