如何使用 CloudWatch 主控台建立、設定 Kinesis 的訂閱篩選條件並進行疑難排解?

上次更新日期:2022 年 4 月 12 日

我想要建立訂閱篩選條件,以便使用 CloudWatch 主控台將我的 Amazon CloudWatch Logs 串流到 Amazon Kinesis。該如何進行?

簡短描述

能以近乎即時的方式將 CloudWatch 日誌發送至同一帳戶,或者發送至跨帳戶的 Kinesis 或 Amazon Kinesis Data Firehose 目的地。您可以使用訂閱篩選條件進行此操作。CloudWatch Logs 主控台支援目的地和設置組態。

有關如何使用篩選條件模式語法設定訂閲篩選條件的資訊,請參閲篩選條件和模式語法

解決方案

同一帳戶或當前帳戶中用於 Kinesis 資料串流的訂閲組態

注意: CloudWatch 日誌群組區域和 Kinesis 目的地區域必須相同。

在建立訂閲之前,請執行以下操作:

若要建立自訂 IAM 角色和政策,請執行以下操作:

1.    使用具有管理員許可的使用者開啟 IAM 主控台

2.    在導覽窗格中,選擇 Policies (政策)。

3.    在內容窗格中,選擇 Create policy (建立政策)。

4.    複製以下 JSON 政策文件並貼到 JSON 索引標籤中。

角色許可

{
  "Statement": [{
    "Effect": "Allow",
    "Action": "kinesis:PutRecord",
    "Resource": "arn:aws:kinesis:<REGION>:<ACCOUNT_ID>:stream/<STREAM_NAME>"
  }]
}

5.    開啟 IAM 主控台

6.    在主控台的導覽窗格中,選擇 Roles (角色),然後選擇Create role (建立角色)。

7.    選擇 Custom trust policy (自訂信任政策) 角色類型。

8.    在 Custom trust policy (自訂信任政策) 區段中,輸入或貼上角色的自訂信任政策。如需詳細資訊,請參閱建立 IAM 政策

9.    選擇 Next (下一步)。

10.    選取在上一步中建立的自訂 IAM 政策。

11.    選擇 Next (下一步),Create a Role (建立角色)

信任政策

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": "logs.region.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringLike": {
        "aws:SourceArn": "arn:aws:logs:<REGION>:<ACCOUNT_ID>:*"
      }
    }
  }
}

建立 Kinesis 串流和 IAM 角色後,您可以建立訂閲篩選條件:

1.    開啟 CloudWatch 主控台

2.    選取 Log Group (日誌群組)。

3.    選取 Action (動作),Subscription Filters (訂閱篩選條件)。

4.    若要設定目的地,選擇 Create Kinesis Subscription Filter (建立 Kinesis 訂閲篩選條件)。

5.    選取 Current Account (當前帳戶)。

6.    從下拉式選單中選取您的 Kinesis 資料串流。

7.    選取您先前建立的 IAM 角色。

8.    查看 Distribution method (分佈方法):

By Log Stream (依日誌串流) — 驗證下游使用者能否依日誌串流彙整日誌事件,但效率可能較低。此方法還可能會產生較高的串流成本,因其需要更多碎片。

Random (隨機) — 將負載分配到各 Kinesis 串流碎片上,但下游使用者無法依日誌串流來彙整日誌事件。

9.    設定 Log format and filters (日誌格式和篩選條件):

選取日誌格式。若為由 Amazon VPC、CloudTrail 或 Lambda 發佈的日誌,則格式可以是 Amazon VPC Flow Logs、AWS CloudTrail 或 AWS Lambda。或者,可依據您的傳入日誌事件,選擇 JSONSpace delimited (空格分隔) 或 Other (其他)。

定義 Subscription filter pattern (訂閲篩選條件模式) 區段中的 filter pattern (篩選條件模式)。

輸入訂閲篩選條件的名稱。

10.    使用現有的日誌事件資料驗證您的模式

11.    驗證後,選取 Start Streaming (開始串流)。

12.    (選用)藉由確認日誌事件的流動來驗證您的資料串流正確運作。

跨帳戶 Kinesis 資料串流目的地的組態

注意:如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確認您使用的是最新的 AWS CLI 版本

您可以將 CloudWatch 日誌事件傳遞到不同 AWS 帳戶和區域中的 Kinesis 資料串流。為此,請在指定 AWS 區域的同時設置與訂閲共享的跨帳戶日誌資料,如以下範例所示。

注意: 在此範例中,會將在 us-east-1 區域中的CloudWatch Logs 傳送到 us-west-2 中另一個 AWS 使用者的 Kinesis 資料串流。日誌資料收件人的 AWS 帳戶 ID 為 222222222222,日誌資料寄件人的 AWS 帳戶 ID 為 111111111111。

在收件人帳戶 222222222222 中建立目的地資料串流

1.    在具有 IAM 角色和信任政策的資料收件人帳戶的 Kinesis 中建立目的地資料串流

2.    使用 create-stream 命令建立資料串流。務必要指定 --region。例如,此命令在 us-west-2 中建立資料串流 YourStreamName

aws kinesis create-stream --stream-name "YourStreamName" --shard-count 1 --region us-west-2

3.    使用 describe-stream 命令檢查 StreamDescription.StreamStatus 屬性。務必要指定 --region。例如,此命令檢查在 us-west-2 中的串流 YourStreamName

aws kinesis describe-stream --stream-name "YourStreamName" --region us-west-2

4.    使用 put-destination 命令建立 CloudWatch Logs 目的地。將 --role-arn--region 設為與來源 CloudWatch 日誌相同的區域。例如,必須在收件人/目的地帳戶 222222222222 中執行以下命令,以在 us-east-1 的收件人帳戶 222222222222 中建立日誌目的地:

aws logs put-destination \
  --destination-name "testDestination" \
  --target-arn "arn:aws:kinesis:us-west-2:222222222222:stream/YourStreamName" \
  --role-arn "arn:aws:iam::222222222222:role/YourIAMRoleName" --region us-east-1

在來源帳戶111111111111 中建立訂閱篩選條件

若要建立訂閲篩選條件,請執行以下操作:

1.    選取日誌群組。

2.    選取 Action (動作),Subscription Filters (訂閱篩選條件)。

3.    若要選取目的地,請從以下選項中進行選擇:

Create Kinesis Subscription Filter: (建立 Kinesis 訂閲篩選條件): 建立 Kinesis 資料串流目的地的訂閱篩選條件

4.    選取 Another Account (另一個帳戶),因為目的地為跨帳戶。

5.    對於跨帳戶 Kinesis 或 Kinesis Firehose 目的地,應提供 Destination ARN (目標 ARN)。

6.    選取 Distribution (分佈) 方法:

By Log Stream (依日誌串流) — 驗證下游使用者能否依日誌串流彙整日誌事件,但效率可能較低。此方法還可能會產生較高的串流成本,因其需要更多碎片。

Random (隨機) — 將負載分配到各 Kinesis 串流碎片上,但下游使用者無法依日誌串流來彙整日誌事件。

7.    設定 Log format and filters (日誌格式和篩選條件):

選取日誌格式。若為由 Amazon VPC、CloudTrail 或 Lambda 發佈的日誌,則格式可以是 Amazon VPC Flow Logs、CloudTrail 或 AWS Lambda。或者,可依據您的傳入日誌事件,選擇 JSON、Space delimited (空格分隔) 或 Other (其他)。

定義 Subscription filter pattern (訂閲篩選條件模式) 區段中的 filter pattern (篩選條件模式)。

輸入訂閲篩選條件的名稱。

8.    使用現有的日誌事件資料驗證您的模式

9.    驗證後,選取 Start Streaming (開始串流)。

10.    (選用)藉由確認日誌事件的流動來驗證您的資料串流正確運作。

疑難排解

  • 確認您的 Kinesis 串流處於作用中狀態,而且您可以在 Kinesis 主控台上查看該串流。或者,您可以使用 DescribeStream API 呼叫
  • 驗證 CloudWatch 日誌群組和 Kinesis 資料串流的區域為相同。
  • 確認存在一個具有對 logs.yourregion.amazonaws.com 的信任許可而且允許 kinesis:putrecords 許可的 IAM 角色。
  • 驗證 IAM 政策中的區域和資源為正確。
  • 確認您在設定用於 Kinesis 資料串流的訂閲篩選條件時沒有選取 Kinesis Firehose。
  • 開始串流後,驗證訂閲篩選條件的指標確認模式為有效且與傳入日誌事件相符。若要執行此操作,請查看以下指標:ForwardedBytes: 轉發到訂閲目的地的日誌事件大小(以壓縮位元組為單位)。ForwardedLogEvents: 轉發到訂閲目的地的日誌事件數量。
  • 若要驗證將日誌事件串流到目的地時是否沒有錯誤,驗證以下指標:DeliveryErrors: CloudWatch Logs 在將資料轉發到訂閲目的地時收到錯誤的日誌事件數量。DeliveryThrottling: 顯示 CloudWatch Logs 在將資料轉發到訂閲目的地時受到調節的日誌事件數量。
  • 如果您有專用的 Kinesis 串流,檢查串流的指標以確認功能。
  • 若要進行跨帳戶日誌記錄的疑難排解,請參閲 CloudWatch 跨帳戶設置疑難排解

此文章是否有幫助?


您是否需要帳單或技術支援?