

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon MSK 記錄
<a name="msk-logging"></a>

您可以將 Apache Kafka 代理程式日誌交付至下列一或多個目的地類型：Amazon CloudWatch Logs、Amazon S3、Amazon Data Firehose。您也可以使用 記錄 Amazon MSK API 呼叫 AWS CloudTrail。

**注意**  
中介裝置日誌可在 MSK Standard 和 Express 中介裝置上取得。

## 代理程式日誌
<a name="broker-logs"></a>

代理程式日誌可讓您針對 Apache Kafka 應用程式進行疑難排解，並分析與 MSK 叢集的通訊。您可以設定新的或現有的 MSK 叢集，將 INFO 層級代理程式日誌交付至下列一或多個類型的目的地資源：CloudWatch 日誌群組、S3 儲存貯體、Firehose 交付串流。然後，您可以透過 Firehose 將日誌資料從交付串流交付至 OpenSearch Service。

您必須先建立目的地資源，才能設定叢集向其傳遞代理程式日誌。如果這些目的地資源尚未存在，Amazon MSK 不會為您建立它們。如需有關這三種目標資源類型以及如何建立這些資源的資訊，請參閱下列文件：
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html)
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)

### 所需的許可
<a name="broker-logs-perms"></a>

若要設定 Amazon MSK 代理程式日誌的目的地，您用於 Amazon MSK 動作的 IAM 身分必須具有 [AWS 受管政策：AmazonMSKFullAccess](security-iam-awsmanpol-AmazonMSKFullAccess.md) 政策中所述的許可。

若要將代理程式日誌串流到 S3 儲存貯體，您也需要 `s3:PutBucketPolicy` 許可。如需有關 S3 儲存貯體政策的資訊，請參閱《Amazon S3 使用者指南》中的[如何新增 S3 儲存貯體政策？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html) 如需有關 IAM 政策的一般資訊，請參閱《IAM 使用者指南》的[存取管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。

### 使用 SSE-KMS 儲存貯體所需的 KMS 金鑰政策
<a name="sse-kms-buckets"></a>

如果您使用受管金鑰 AWS KMS(SSE-KMS) 搭配客戶受管金鑰為 S3 儲存貯體啟用伺服器端加密，請將以下內容新增至 KMS 金鑰的金鑰政策，以便 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 管理主控台
<a name="broker-logs-console"></a>

如果您要建立新叢集，請在**監控**區段中尋找**代理程式日誌交付**標題。您可以指定想要 Amazon MSK 向其傳遞代理程式日誌的目標。

針對現有叢集，請從您的叢集清單中選擇叢集，然後選擇**屬性**索引標籤。向下捲動到**日誌交付**區段，然後選擇其**編輯**按鈕。您可以指定想要 Amazon MSK 向其傳遞代理程式日誌的目標。

### 使用 設定代理程式日誌 AWS CLI
<a name="broker-logs-cli"></a>

當您使用 `create-cluster` 或 `update-monitoring` 命令時，可以選擇指定 `logging-info` 參數，並向其傳遞 JSON 結構，如以下範例所示。在此 JSON 中，所有三種目標類型都是選用的。

**注意**  
您必須在 Firehose 串流`true`上將`LogDeliveryEnabled`標籤設定為 ，才能設定日誌交付。為 CloudWatch 日誌 AWS 建立的服務連結角色使用此標籤授予所有 Firehose 交付串流的許可。如果您移除此標籤，服務連結角色將無法將日誌交付至 Firehose 串流。若要查看顯示服務連結角色包含之許可的 IAM 政策範例，請參閱《*Amazon CloudWatch 使用者指南》中的*[用於資源許可的 IAM 角色](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-Firehose.html)。

```
{
  "BrokerLogs": {
    "S3": {
      "Bucket": "amzn-s3-demo-bucket",
      "Prefix": "ExamplePrefix",
      "Enabled": true
    },
    "Firehose": {
      "DeliveryStream": "ExampleDeliveryStreamName",
      "Enabled": true
    },
    "CloudWatchLogs": {
      "Enabled": true,
      "LogGroup": "ExampleLogGroupName"
    }
  }
}
```

### 使用 API 設定代理程式日誌
<a name="broker-logs-api"></a>

您可以指定要傳遞給 [CreateCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#CreateCluster) 或 [UpdateMonitoring](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-monitoring.html#UpdateMonitoring) 操作之 JSON 的可選 `loggingInfo` 結構。

**注意**  
根據預設，啟用代理程式日誌後，Amazon MSK 會記錄 `INFO` 層級日誌至指定的目的地。不過，對於標準代理程式，Apache Kafka 2.4.X 和更新版本的使用者可以將代理程式日誌層級動態設定為任何 [log4j 日誌層級](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html)。如需有關動態設定代理程式日誌層級的相關資訊，請參閱 [KIP-412: Extend Admin API to support dynamic application log levels](https://cwiki.apache.org/confluence/display/KAFKA/KIP-412%3A+Extend+Admin+API+to+support+dynamic+application+log+levels)。如果您動態將日誌層級設定為 `DEBUG`或 `TRACE`，我們建議您使用 Amazon S3 或 Firehose 作為日誌目的地。如果您使用 CloudWatch Logs 為日誌目的地，並且動態啟用 `DEBUG` 或 `TRACE` 層級日誌，Amazon MSK 可能會持續傳遞日誌樣本。這可能會大幅影響代理程式效能，只有在 `INFO` 日誌層級不夠詳細、無法判斷問題的根本原因時才應該使用方法。

# 使用 記錄 API 呼叫 AWS CloudTrail
<a name="logging-API-using-cloudtrail"></a>



**注意**  
AWS CloudTrail 日誌僅適用於使用 的 Amazon MSK[IAM 存取控制](iam-access-control.md)。

Amazon MSK 已與 服務整合 AWS CloudTrail，此服務提供由 Amazon MSK AWS 中的使用者、角色或服務所採取之動作的記錄。CloudTrail 會擷取 API 呼叫當作事件。擷取的呼叫包括從 Amazon MSK 主控台執行的呼叫，以及對 Amazon MSK API 操作發出的程式碼呼叫。它也會擷取 Apache Kafka 的動作，例如建立、變更主題和群組。

如果您建立追蹤，就可以將 CloudTrail 事件 (包括 Amazon MSK 的事件) 持續交付到 Amazon S3 儲存貯體。即使您未設定追蹤，依然可以透過 CloudTrail 主控台中的**事件歷史記錄**檢視最新事件。您可以利用 CloudTrail 所收集的資訊來判斷向 Amazon MSK 或 Apache Kafka 發出的請求，以及發出請求的 IP 地址、人員、時間和其他詳細資訊。

若要進一步了解 CloudTrail，包括如何設定及啟用，請參閱[《AWS CloudTrail 使用者指南》](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

## CloudTrail 中的 Amazon MSK 資訊
<a name="msk-info-in-cloudtrail"></a>

在您建立帳戶時，系統即會在 Amazon Web Services 帳戶中啟用 CloudTrail。當 MSK 叢集中發生支援的事件活動時，該活動會與**事件歷史記錄**中的其他 AWS 服務事件一起記錄在 CloudTrail 事件中。您可以檢視、搜尋和下載 Amazon Web Services 帳戶中的最近事件。如需詳細資訊，請參閱《使用 CloudTrail 事件歷史記錄檢視事件》[https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

如需 Amazon Web Services 帳戶中正在進行事件的記錄 (包含 Amazon MSK 的事件)，請建立追蹤。*線索*能讓 CloudTrail 將日誌檔案交付至 Amazon S3 儲存貯體。根據預設，當您在主控台建立線索時，線索會套用到所有 區域。該追蹤會記錄來自 AWS 分割區中所有區域的事件，並將日誌檔案交付到您指定的 Amazon S3 儲存貯體。此外，您可以設定其他 Amazon 服務，以進一步分析和處理 CloudTrail 日誌中所收集的事件資料。如需詳細資訊，請參閱下列內容：
+ [建立追蹤的概觀](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支援的服務和整合](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [設定 CloudTrail 的 Amazon SNS 通知](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [從多個區域接收 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)，以及[從多個帳戶接收 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

Amazon MSK 將所有 [Amazon MSK 操作](https://docs.aws.amazon.com/MSK/2.0/APIReference/operations.html)記錄為 CloudTrail 日誌檔案中的事件。此外，它會記錄下列 Apache Kafka 動作。
+ kafka-cluster:DescribeClusterDynamicConfiguration 
+ kafka-cluster:AlterClusterDynamicConfiguration 
+ kafka-cluster:CreateTopic 
+ kafka-cluster:DescribeTopicDynamicConfiguration 
+ kafka-cluster:AlterTopic 
+ kafka-cluster:AlterTopicDynamicConfiguration 
+ kafka-cluster:DeleteTopic

每一筆事件或日誌專案都會包含產生請求者的資訊。身分資訊可協助您判斷下列事項：
+ 請求是使用根使用者還是 AWS Identity and Access Management (IAM) 使用者登入資料提出。
+ 提出該請求時，是否使用了特定角色或聯合身分使用者的暫時安全憑證。
+ 請求是否由其他 AWS 服務提出。

如需詳細資訊，請參閱 [CloudTrail userIdentity Element](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 範例：Amazon MSK 日誌檔案項目
<a name="understanding-msk-entries"></a>

追蹤是一種組態，能讓事件以日誌檔案的形式交付到您指定的 Amazon S3 儲存貯體。CloudTrail 日誌檔案包含一或多個日誌專案。一個事件為任何來源提出的單一請求，並包含請求動作、請求的日期和時間、請求參數等資訊。CloudTrail 日誌檔並非依公有 API 呼叫與 Apache Kafka 動作堆疊追蹤排序，因此不會以任何特定順序出現。

以下範例顯示的是示範 `DescribeCluster` 和 `DeleteCluster` 動作的 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"
    }
  ]
}
```

以下範例顯示的是展示 `kafka-cluster:CreateTopic` 動作的 CloudTrail 日誌項目。

```
{
  "eventVersion": "1.08",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "ABCDEFGH1IJKLMN2P34Q5",
    "arn": "arn:aws:iam::111122223333:user/Admin",
    "accountId": "111122223333",
    "accessKeyId": "CDEFAB1C2UUUUU3AB4TT",
    "userName": "Admin"
  },
  "eventTime": "2021-03-01T12:51:19Z",
  "eventSource": "kafka-cluster.amazonaws.com",
  "eventName": "CreateTopic",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "198.51.100.0/24",
  "userAgent": "aws-msk-iam-auth/unknown-version/aws-internal/3 aws-sdk-java/1.11.970 Linux/4.14.214-160.339.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/25.272-b10 java/1.8.0_272 scala/2.12.8 vendor/Red_Hat,_Inc.",
  "requestParameters": {
    "kafkaAPI": "CreateTopics",
    "resourceARN": "arn:aws:kafka:us-east-1:111122223333:topic/IamAuthCluster/3ebafd8e-dae9-440d-85db-4ef52679674d-1/Topic9"
  },
  "responseElements": null,
  "requestID": "e7c5e49f-6aac-4c9a-a1d1-c2c46599f5e4",
  "eventID": "be1f93fd-4f14-4634-ab02-b5a79cb833d2",
  "readOnly": false,
  "eventType": "AwsApiCall",
  "managementEvent": true,
  "eventCategory": "Management",
  "recipientAccountId": "111122223333"
}
```