帳戶層級訂閱篩選條件 - Amazon CloudWatch Logs

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

帳戶層級訂閱篩選條件

重要

使用訂閱篩選條件可能會導致無限遞迴迴圈的風險,如果未解決,可能會導致擷取計費大幅增加。若要降低此風險,建議您在帳戶層級訂閱篩選條件中使用選擇條件,以排除從訂閱交付工作流程一部分的資源擷取日誌資料的日誌群組。如需此問題和決定要排除哪些日誌群組的詳細資訊,請參閱 日誌遞迴預防

您可以設定帳戶層級訂閱政策,其中包含帳戶中的日誌群組子集。帳戶訂閱政策可以使用 Amazon Kinesis Data Streams AWS Lambda或 Amazon Data Firehose。透過帳戶層級訂閱政策傳送至服務的日誌,會以 base64 編碼並以 gzip 格式壓縮。本節提供您可以遵循的範例,以建立 Kinesis Data Streams、Lambda 和 Firehose 的帳戶層級訂閱。

注意

若要檢視您帳戶中所有訂閱篩選條件政策的清單,請使用 --policy-type describe-account-policies命令,SUBSCRIPTION_FILTER_POLICY參數的值為 。如需詳細資訊,請參閱 describe-account-policies¶。

範例 1:訂閱篩選條件與 Kinesis Data Streams 搭配使用

建立要與帳戶層級訂閱政策搭配使用的 Kinesis Data Streams 資料串流之前,請計算將產生的日誌資料量。請務必使用足夠碎片建立 串流,以處理此磁碟區。如果串流沒有足夠的碎片,則會調節。如需串流磁碟區限制的詳細資訊,請參閱 Kinesis Data Streams 文件中的配額和限制

警告

由於多個日誌群組的日誌事件會轉送至目的地,因此可能會有限流風險。限流的交付項目會持續重試,時間長達 24 小時。24 小時後,失敗的交付項目就會捨棄。

若要降低限流風險,您可以採取下步驟:

  • 使用 CloudWatch 指標監控 Kinesis Data Streams 串流。這可協助您識別調節,並相應地調整您的組態。例如, DeliveryThrottling 指標會追蹤 CloudWatch Logs 在轉送資料至訂閱目的地時,受到調節的日誌事件數量。如需詳細資訊,請參閱使用 CloudWatch 指標監控使用量

  • 在 Kinesis Data Streams 中為您的串流使用隨需容量模式。隨需模式會在您的工作負載上升或下降時,立即為您的工作負載調整所需的容量。如需詳細資訊,請參閱隨需模式

  • 限制 CloudWatch Logs 訂閱篩選條件模式,以符合 Kinesis Data Streams 中串流的容量。如果您傳送太多資料至串流,您可能需要減少篩選條件大小或調整篩選條件標準。

下列範例使用帳戶層級訂閱政策,將所有日誌事件轉送至 Kinesis Data Streams 中的串流。篩選條件模式會將任何日誌事件與文字相符,Test並將其轉送至 Kinesis Data Streams 中的串流。

為 Kinesis Data Streams 建立帳戶層級訂閱政策
  1. 使用下列命令建立目的地 串流:

    $ C:\> aws kinesis create-stream —stream-name "TestStream" —shard-count 1
  2. 等待幾分鐘讓串流變成作用中。您可以使用 describe-stream 命令來檢查 StreamDescription.StreamStatus 屬性,以驗證串流是否作用中。

    aws kinesis describe-stream --stream-name "TestStream"

    下列為範例輸出:

    { "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "TestStream", "StreamARN": "arn:aws:kinesis:region:123456789012:stream/TestStream", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "EXAMPLE8463463374607431768211455", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "EXAMPLE688818456679503831981458784591352702181572610" } } ] } }
  3. 建立將授予 CloudWatch Logs 許可以將資料放到串流中的 IAM 角色。首先,您將需要在檔案中建立信任政策 (例如,~/TrustPolicyForCWL-Kinesis.json)。請使用文字編輯器來建立此政策。

    此政策包含 aws:SourceArn 全域條件內容金鑰,以協助預防混淆代理人安全問題。如需詳細資訊,請參閱預防混淆代理人

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }
  4. 使用 create-role 命令來建立 IAM 角色,並指定信任政策檔案。請注意傳回的 Role.Arn 值,因您將在後續步驟需要此值:

    aws iam create-role --role-name CWLtoKinesisRole --assume-role-policy-document file://~/TrustPolicyForCWL-Kinesis.json

    以下為輸出範例。

    { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": { "arn:aws:logs:region:123456789012:*" } } } } }, "RoleId": "EXAMPLE450GAB4HC5F431", "CreateDate": "2023-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisRole" } }
  5. 建立許可政策以定義 CloudWatch Logs 可在您的帳戶上執行哪些動作。首先,您將需要在檔案中建立許可政策 (例如,~/PermissionsForCWL-Kinesis.json)。請使用文字編輯器來建立此政策。請勿使用 IAM 主控台來建立它。

    { "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:region:123456789012:stream/TestStream" } ] }
  6. 使用以下 put-role-policy 命令將許可政策與角色建立關聯:

    aws iam put-role-policy --role-name CWLtoKinesisRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL-Kinesis.json
  7. 在串流處於作用中狀態且您已建立 IAM 角色之後,您可以建立 CloudWatch Logs 訂閱篩選條件政策。政策會立即開始即時日誌資料流至串流。在此範例中,ERROR會串流包含字串的所有日誌事件,除了名為 LogGroupToExclude1和 的日誌群組中的事件LogGroupToExclude2

    aws logs put-account-policy \ --policy-name "ExamplePolicy" \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-document '{"RoleArn":"arn:aws:iam::123456789012:role/CWLtoKinesisRole", "DestinationArn":"arn:aws:kinesis:region:123456789012:stream/TestStream", "FilterPattern": "Test", "Distribution": "Random"}' \ --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \ --scope "ALL"
  8. 設定訂閱篩選條件後,CloudWatch Logs 會將符合篩選條件模式和選取條件的所有傳入日誌事件轉送至串流。

    欄位是選用selection-criteria的,但對於排除可能導致訂閱篩選條件無限日誌遞迴的日誌群組而言很重要。如需此問題和決定要排除哪些日誌群組的詳細資訊,請參閱 日誌遞迴預防。目前, NOT IN 是 唯一支援的運算子selection-criteria

    您可以使用 Kinesis Data Streams 碎片迭代器,並使用 Kinesis Data Streams get-records命令來擷取一些 Kinesis Data Streams 記錄,藉此驗證日誌事件的流程:

    aws kinesis get-shard-iterator --stream-name TestStream --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON
    { "ShardIterator": "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP" }
    aws kinesis get-records --limit 10 --shard-iterator "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP"

    在 Kinesis Data Streams 開始傳回資料之前,您可能需要使用此命令幾次。

    您應該預期會看到含一系列的記錄的回應。Kinesis Data Streams 記錄中的 資料屬性採用 Base64 編碼並以 gzip 格式壓縮。您可以使用以下 Unix 命令來透過命令列檢查原始資料:

    echo -n "<Content of Data>" | base64 -d | zcat

    Base64 解碼和解壓縮資料是以 JSON 形式並以下列結構進行格式化:

    { "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "Example1", "logStream": "logStream1", "subscriptionFilters": [ "ExamplePolicy" ], "logEvents": [ { "id": "31953106606966983378809025079804211143289615424298221568", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" }, { "id": "31953106606966983378809025079804211143289615424298221569", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" }, { "id": "31953106606966983378809025079804211143289615424298221570", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" } ], "policyLevel": "ACCOUNT_LEVEL_POLICY" }

    資料結構中的關鍵元素如下:

    messageType

    資料訊息將使用「DATA_MESSAGE」類型。有時 CloudWatch Logs 可能會發出 "CONTROL_MESSAGE" 類型的 Kinesis Data Streams 記錄,主要用於檢查目的地是否可連線。

    owner

    原始日誌資料 AWS 的帳戶 ID。

    logGroup

    原始日誌資料的日誌群組名稱。

    logStream

    原始日誌資料的日誌串流名稱。

    subscriptionFilters

    與原始日誌資料相符的訂閱篩選條件名稱清單。

    logEvents

    實際的日誌資料,以一系列的日誌事件記錄呈現。「id」屬性是每個記錄事件的唯一識別符。

    policyLevel

    強制執行政策的層級。"ACCOUNT_LEVEL_POLICY" 是帳戶層級訂閱篩選條件政策policyLevel的 。

範例 2:使用 的訂閱篩選條件 AWS Lambda

在此範例中,您將建立 CloudWatch Logs 帳戶層級訂閱篩選條件政策,將日誌資料傳送至您的 AWS Lambda 函數。

警告

建立 Lambda 函數前,請計算將產生的日誌資料量。請務必建立可以處理此磁碟區的函數。如果函數無法處理磁碟區,日誌串流將會受到調節。由於所有日誌群組或帳戶日誌群組子集的日誌事件都會轉送至目的地,因此可能會有限流風險。如需 Lambda 限制的詳細資訊,請參閱 AWS Lambda 限制

為 Lambda 建立帳戶層級訂閱篩選條件政策
  1. 建立 AWS Lambda 函數。

    確保您已設定 Lambda 執行角色。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的步驟 2.2:建立 IAM 角色 (執行角色)

  2. 開啟文字編輯器,並建立名為 helloWorld.js 的檔案,內含下列內容:

    var zlib = require('zlib'); exports.handler = function(input, context) { var payload = Buffer.from(input.awslogs.data, 'base64'); zlib.gunzip(payload, function(e, result) { if (e) { context.fail(e); } else { result = JSON.parse(result.toString()); console.log("Event Data:", JSON.stringify(result, null, 2)); context.succeed(); } }); };
  3. 壓縮檔案 helloWorld.js,並以名稱 helloWorld.zip 將其儲存。

  4. 使用下列命令,其中角色是您在第一個步驟中設定的 Lambda 執行角色:

    aws lambda create-function \ --function-name helloworld \ --zip-file fileb://file-path/helloWorld.zip \ --role lambda-execution-role-arn \ --handler helloWorld.handler \ --runtime nodejs18.x
  5. 授予 CloudWatch Logs 許可來執行函數。使用下列命令,將預留位置帳戶取代為您自己的帳戶。

    aws lambda add-permission \ --function-name "helloworld" \ --statement-id "helloworld" \ --principal "logs.amazonaws.com" \ --action "lambda:InvokeFunction" \ --source-arn "arn:aws:logs:region:123456789012:log-group:*" \ --source-account "123456789012"
  6. 使用下列命令建立帳戶層級訂閱篩選條件政策,以您自己的帳戶取代預留位置帳戶。在此範例中,ERROR會串流包含字串的所有日誌事件,除了名為 LogGroupToExclude1和 的日誌群組中的事件LogGroupToExclude2

    aws logs put-account-policy \ --policy-name "ExamplePolicyLambda" \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-document '{"DestinationArn":"arn:aws:lambda:region:123456789012:function:helloWorld", "FilterPattern": "Test", "Distribution": "Random"}' \ --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \ --scope "ALL"

    設定訂閱篩選條件後,CloudWatch Logs 會將符合篩選條件模式和選取條件的所有傳入日誌事件轉送至您的串流。

    欄位是選用selection-criteria的,但對於排除可能導致訂閱篩選條件無限日誌遞迴的日誌群組而言很重要。如需此問題和決定要排除哪些日誌群組的詳細資訊,請參閱 日誌遞迴預防。目前, NOT IN 是 唯一支援的運算子selection-criteria

  7. (選用) 使用範例日誌事件進行測試。在命令提示字元中執行下列命令,這會將簡單日誌訊息放置到訂閱的串流。

    若要查看 Lambda 函數的輸出,請導覽至 Lambda 函數,其中您將會在 /aws/lambda/helloworld 中看到輸出:

    aws logs put-log-events --log-group-name Example1 --log-stream-name logStream1 --log-events "[{\"timestamp\":CURRENT TIMESTAMP MILLIS , \"message\": \"Simple Lambda Test\"}]"

    預期會看到含一系列 Lambda 的回應。Lambda 記錄中的 Data (資料) 屬性是以 Base64 編碼並以 gzip 格式壓縮。Lambda 收到的實際酬載為以下格式:{ "awslogs": {"data": "BASE64ENCODED_GZIP_COMPRESSED_DATA"} }。您可以從命令列使用以下 Unix 命令來檢視原始資料:

    echo -n "<BASE64ENCODED_GZIP_COMPRESSED_DATA>" | base64 -d | zcat

    Base64 解碼和解壓縮資料是以 JSON 形式並以下列結構進行格式化:

    { "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "Example1", "logStream": "logStream1", "subscriptionFilters": [ "ExamplePolicyLambda" ], "logEvents": [ { "id": "31953106606966983378809025079804211143289615424298221568", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" }, { "id": "31953106606966983378809025079804211143289615424298221569", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" }, { "id": "31953106606966983378809025079804211143289615424298221570", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" } ], "policyLevel": "ACCOUNT_LEVEL_POLICY" }
    注意

    帳戶層級訂閱篩選條件不會套用至目的地 Lambda 函數的日誌群組。這是為了防止無限日誌遞迴,這可能會導致擷取計費增加。如需此問題的詳細資訊,請參閱 日誌遞迴預防

    資料結構中的關鍵元素如下:

    messageType

    資料訊息將使用「DATA_MESSAGE」類型。有時 CloudWatch Logs 可能會發出「CONTROL_MESSAGE」類型的 Kinesis Data Streams 記錄,主要用於檢查目的地是否可連線。

    owner

    原始日誌資料 AWS 的帳戶 ID。

    logGroup

    原始日誌資料的日誌群組名稱。

    logStream

    原始日誌資料的日誌串流名稱。

    subscriptionFilters

    與原始日誌資料相符的訂閱篩選條件名稱清單。

    logEvents

    實際的日誌資料,以一系列的日誌事件記錄呈現。「id」屬性是每個記錄事件的唯一識別符。

    policyLevel

    強制執行政策的層級。"ACCOUNT_LEVEL_POLICY" 是帳戶層級訂閱篩選條件政策policyLevel的 。

範例 3:使用 Amazon Data Firehose 的訂閱篩選條件

在此範例中,您將建立 CloudWatch Logs 帳戶層級訂閱篩選條件政策,將符合您所定義篩選條件的傳入日誌事件傳送至 Amazon Data Firehose 交付串流。從 CloudWatch Logs 傳送至 Amazon Data Firehose 的資料已使用 gzip 第 6 級壓縮進行壓縮,因此您不需要在 Firehose 交付串流中使用壓縮。然後,您可以使用 Firehose 中的解壓縮功能來自動解壓縮日誌。如需詳細資訊,請參閱使用 CloudWatch Logs 寫入 Kinesis Data Firehose

警告

建立 Firehose 串流之前,請先計算將產生的日誌資料量。請務必建立可處理此磁碟區的 Firehose 串流。如果串流無法處理磁碟區、日誌串流將受到限制。如需 Firehose 串流磁碟區限制的詳細資訊,請參閱 Amazon Data Firehose Data Limits

建立 Firehose 的訂閱篩選條件
  1. 建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體。我們建議您使用專為 CloudWatch Logs 建立的儲存貯體。不過,如果您想要使用現有的儲存貯體,請跳到步驟 2。

    執行以下命令,將預留位置 Region 換成您想要使用的區域:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket2 --create-bucket-configuration LocationConstraint=region

    下列為範例輸出:

    { "Location": "/amzn-s3-demo-bucket2" }
  2. 建立 IAM 角色,授予 Amazon Data Firehose 將資料放入 Amazon S3 儲存貯體的許可。

    如需詳細資訊,請參閱《Amazon Data Firehose 開發人員指南》中的使用 Amazon Data Firehose 控制存取

    首先,請按如下所示,使用文字編輯器來建立檔案 ~/TrustPolicyForFirehose.json 中的信任政策:

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  3. 使用 create-role 命令來建立 IAM 角色,並指定信任政策檔案。請記下傳回的 Role.Arn 值,因為在後續步驟中會需要它:

    aws iam create-role \ --role-name FirehosetoS3Role \ --assume-role-policy-document file://~/TrustPolicyForFirehose.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" } } }, "RoleId": "EXAMPLE50GAB4HC5F431", "CreateDate": "2023-05-29T13:46:29.431Z", "RoleName": "FirehosetoS3Role", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/FirehosetoS3Role" } }
  4. 建立許可政策,以定義 Firehose 可以在您的帳戶上執行的動作。首先,使用文字編輯器來建立檔案 ~/PermissionsForFirehose.json 中的許可政策:

    { "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket2", "arn:aws:s3:::amzn-s3-demo-bucket2/*" ] } ] }
  5. 使用以下 put-role-policy 命令將許可政策與角色建立關聯:

    aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
  6. 建立目的地 Firehose 交付串流,如下所示,將 RoleARNBucketARN 的預留位置值取代為您建立的角色和儲存貯體 ARNs:

    aws firehose create-delivery-stream \ --delivery-stream-name 'my-delivery-stream' \ --s3-destination-configuration \ '{"RoleARN": "arn:aws:iam::123456789012:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket2"}'

    NFirehose 會自動使用 YYYY/MM/DD/HH UTC 時間格式的字首來傳遞 Amazon S3 物件。您可以指定在時間格式前綴前要新增的額外前綴。如果字首結尾是斜線 (/),則會在 Amazon S3 儲存貯體中顯示為資料夾。

  7. 等待幾分鐘,讓串流變成作用中。您可以使用 Firehose describe-delivery-stream 命令來檢查 DeliveryStreamDescription.DeliveryStreamStatus 屬性。此外,請留意 DeliveryStreamDescription.DeliveryStreamARN 值,因您將在後續步驟需要此值:

    aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream" { "DeliveryStreamDescription": { "HasMoreDestinations": false, "VersionId": "1", "CreateTimestamp": 1446075815.822, "DeliveryStreamARN": "arn:aws:firehose:us-east-1:123456789012:deliverystream/my-delivery-stream", "DeliveryStreamStatus": "ACTIVE", "DeliveryStreamName": "my-delivery-stream", "Destinations": [ { "DestinationId": "destinationId-000000000001", "S3DestinationDescription": { "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "RoleARN": "delivery-stream-role", "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket2", "BufferingHints": { "IntervalInSeconds": 300, "SizeInMBs": 5 } } } ] } }
  8. 建立 IAM 角色,授予 CloudWatch Logs 將資料放入 Firehose 交付串流的許可。首先,使用文字編輯器來建立檔案 ~/TrustPolicyForCWL.json 中的信任政策:

    此政策包含 aws:SourceArn 全域條件內容金鑰,以協助預防混淆代理人安全問題。如需詳細資訊,請參閱預防混淆代理人

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }
  9. 使用 create-role 命令來建立 IAM 角色,並指定信任政策檔案。請記下傳回的 Role.Arn 值,因為後續步驟中會需要它:

    aws iam create-role \ --role-name CWLtoKinesisFirehoseRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisFirehoseRole", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole" } }
  10. 建立許可政策以定義 CloudWatch Logs 可在您的帳戶上執行哪些動作。首先,使用文字編輯器來建立許可政策檔案 (例如,~/PermissionsForCWL.json):

    { "Statement":[ { "Effect":"Allow", "Action":["firehose:PutRecord"], "Resource":[ "arn:aws:firehose:region:account-id:deliverystream/delivery-stream-name"] } ] }
  11. 使用 put-role-policy 命令將許可政策與角色建立關聯:

    aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  12. 在 Amazon Data Firehose 交付串流處於作用中狀態且您已建立 IAM 角色後,您可以建立 CloudWatch Logs 帳戶層級訂閱篩選條件政策。政策會立即開始從所選日誌群組到 Amazon Data Firehose 交付串流的即時日誌資料流程:

    aws logs put-account-policy \ --policy-name "ExamplePolicyFirehose" \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-document '{"RoleArn":"arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole", "DestinationArn":"arn:aws:firehose:us-east-1:123456789012:deliverystream/delivery-stream-name", "FilterPattern": "Test", "Distribution": "Random"}' \ --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \ --scope "ALL"
  13. 設定訂閱篩選條件後,CloudWatch Logs 會將符合篩選條件模式的傳入日誌事件轉送至您的 Amazon Data Firehose 交付串流。

    欄位是選用selection-criteria的,但對於排除可能導致訂閱篩選條件無限日誌遞迴的日誌群組而言很重要。如需此問題和決定要排除哪些日誌群組的詳細資訊,請參閱 日誌遞迴預防。目前, NOT IN 是 唯一支援的運算子selection-criteria

    您的資料會根據 Amazon Data Firehose 交付串流上設定的時間緩衝間隔,開始出現在 Amazon S3 中。一旦經過足夠的時間,您就可以檢查 Amazon S3 儲存貯體來驗證資料。

    aws s3api list-objects --bucket 'amzn-s3-demo-bucket2' --prefix 'firehose/' { "Contents": [ { "LastModified": "2023-10-29T00:01:25.000Z", "ETag": "\"a14589f8897f4089d3264d9e2d1f1610\"", "StorageClass": "STANDARD", "Key": "firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250", "Owner": { "DisplayName": "cloudwatch-logs", "ID": "1ec9cf700ef6be062b19584e0b7d84ecc19237f87b5" }, "Size": 593 }, { "LastModified": "2015-10-29T00:35:41.000Z", "ETag": "\"a7035b65872bb2161388ffb63dd1aec5\"", "StorageClass": "STANDARD", "Key": "firehose/2023/10/29/00/my-delivery-stream-2023-10-29-00-35-40-EXAMPLE-7e66-49bc-9fd4-fc9819cc8ed3", "Owner": { "DisplayName": "cloudwatch-logs", "ID": "EXAMPLE6be062b19584e0b7d84ecc19237f87b6" }, "Size": 5752 } ] }
    aws s3api get-object --bucket 'amzn-s3-demo-bucket2' --key 'firehose/2023/10/29/00/my-delivery-stream-2023-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250' testfile.gz { "AcceptRanges": "bytes", "ContentType": "application/octet-stream", "LastModified": "Thu, 29 Oct 2023 00:07:06 GMT", "ContentLength": 593, "Metadata": {} }

    在 Amazon S3 物件中的資料會以 gzip 格式壓縮。您可以使用以下 Unix 命令來透過命令列檢查原始資料:

    zcat testfile.gz