翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ロググループレベルのサブスクリプションフィルター
Amazon Kinesis Data Streams、、Amazon Data Firehose AWS Lambda、または Amazon OpenSearch Service でサブスクリプションフィルターを使用できます。サブスクリプションフィルターを介してサービスに送信されるログは、base64 でエンコードされ、gzip 形式で圧縮されます。このセクションでは、Firehose、Lambda、Kinesis Data Streams にログデータを送信する CloudWatch Logs サブスクリプションフィルターを作成するための例を示します。
注記
ログデータを検索する場合は、「Filter and pattern syntax」を参照してください。
例
例 1: Kinesis データストリームのサブスクリプションフィルター
次の例では、サブスクリプションフィルターを AWS CloudTrail イベントを含むロググループに関連付けます。サブスクリプションフィルターは、ログが記録された「Root」 AWS 認証情報のすべてのアクティビティを、「RootAccess」という Kinesis データストリームに配信します。CloudWatch Logs に AWS CloudTrail イベントを送信する方法の詳細については、AWS CloudTrail 「 ユーザーガイド」のCloudTrail イベントを CloudWatch Logs に送信する」を参照してください。
注記
ストリームを作成する前に、生成するログデータのボリュームを計算します。このボリュームを処理するために十分なシャードで ストリームを作成するように注意してください。ストリームに十分なシャードがないと、ログストリームはスロットリングされます。ストリームボリューム制限に関する詳細は、「クォータと制限」を参照してください。
スロットリングされた成果物は、最大 24 時間再試行されます。24 時間が経過すると、失敗した成果物は破棄されます。
スロットリングのリスクを軽減するには、次のステップに従います。
-
PutSubscriptionFilter または put-subscription-filter
を使用してサブスクリプションフィルターを作成するときは、 distribution
にrandom
を指定します。デフォルトでは、ストリームフィルターディストリビューションはログストリームによって行われ、スロットリングが発生する可能性があります。 -
CloudWatch メトリクスを使用したストリームのモニタリング これにより、スロットリングを特定し、必要に応じて構成を調整できます。たとえば、
DeliveryThrottling
メトリクスを使用してデータをサブスクリプション送信先に転送するときに CloudWatch Logs がスロットルされたログイベントの数を追跡できます。モニタリングの詳細については、「CloudWatch メトリクスによるモニタリング」をご参照ください。 -
Kinesis Data Streams のストリームにはオンデマンドキャパシティモードを使用します。オンデマンドモードは、ワークロードが増加または縮小すると、即座にワークロードに対応します。オンデマンドキャパシティモードの詳細については、「オンデマンドモード」を参照してください。
-
CloudWatch サブスクリプションのフィルターパターンを Kinesis Data Streams のストリームの容量に合わせて制限します。ストリームに送信するデータが多すぎる場合、フィルターサイズを小さくするか、フィルター条件を調整する必要があります。
Kinesis データストリームのサブスクリプションフィルタを作成するには
-
次のコマンドを使用して送信先 ストリームを作成します。
$
C:\>
aws kinesis create-stream --stream-name "RootAccess" --shard-count 1 -
ストリームが [アクティブ] になるまで待ちます (これには 1~2 分かかる可能性があります)。次の Kinesis データストリーム describe-stream コマンドを使用して、StreamDescription.StreamStatus プロパティをチェックできます。さらに、後のステップで必要になるため StreamDescription.StreamARN 値を書き留めます。
aws kinesis describe-stream --stream-name "RootAccess"
出力例を次に示します。
{ "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "RootAccess", "StreamARN": "arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "340282366920938463463374607431768211455", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "49551135218688818456679503831981458784591352702181572610" } } ] } }
-
ストリームにデータを置くアクセス許可を CloudWatch Logs に付与する IAM ロールを作成します。まず、ファイル (
~/TrustPolicyForCWL-Kinesis.json
など) で信頼ポリシーを作成する必要があります。テキストエディタを使用してこのポリシーを作成します。IAM コンソールを使用してポリシーを作成しないでください。このポリシーには、「混乱した代理」のセキュリティ上の問題を防止するための
aws:SourceArn
グローバル条件コンテキストキーが含まれています。詳細については、「混乱した代理の防止」を参照してください。{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:
region
:123456789012
:*" } } } } -
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": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::123456789012
:role/CWLtoKinesisRole" } } -
権限ポリシーを作成し、CloudWatch Logs がアカウントで実行できるアクションを定義します。まず、ファイル (
~/PermissionsForCWL-Kinesis.json
など) で権限ポリシーを作成します。テキストエディタを使用してこのポリシーを作成します。IAM コンソールを使用してポリシーを作成しないでください。{ "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:
region
:123456789012
:stream/RootAccess" } ] } -
次の put-role-policy コマンドを使用して、アクセス許可ポリシーをロールに関連付けます。
aws iam put-role-policy --role-name
CWLtoKinesisRole
--policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL-Kinesis.json
-
ストリームが [アクティブ] 状態になり、IAM ロールを作成したら、CloudWatch Logs サブスクリプションフィルタを作成できます。サブスクリプションフィルタにより、選択されたロググループから ストリームへのリアルタイムログデータの流れがすぐに開始されます。
aws logs put-subscription-filter \ --log-group-name "CloudTrail/logs" \ --filter-name "RootAccess" \ --filter-pattern "{$.userIdentity.type = Root}" \ --destination-arn "arn:aws:kinesis:
region
:123456789012:stream/RootAccess" \ --role-arn "arn:aws:iam::123456789012
:role/CWLtoKinesisRole
" -
サブスクリプションフィルタを設定したら、CloudWatch Logs によりフィルタパターンに一致するすべての受信ログイベントがストリームに転送されます。これが起きていることは、Kinesis データストリームシャードイテレータを取得し、Kinesis データストリーム get-records コマンドを使用していくつかの Kinesis データストリームレコードを取得することで確認できます。
aws kinesis get-shard-iterator --stream-name RootAccess --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 データストリームがデータを返し始めるまで、この呼び出しを数回行う必要があるかもしれない点に注意してください。
レコードの配列を含むレスポンスが表示されます。Kinesis データストリームレコードの データ 属性は、base64 でエンコードされており、gzip 形式で圧縮されています。raw データは、コマンドラインから次の UNIX コマンドを使用して調べることができます。
echo -n "<Content of Data>" | base64 -d | zcat
base64 でデコードおよび解凍されたデータは、次の構造を使用して JSON としてフォーマットされます。
{ "owner": "111111111111", "logGroup": "CloudTrail/logs", "logStream": "111111111111_CloudTrail/logs_us-east-1", "subscriptionFilters": [ "Destination" ], "messageType": "DATA_MESSAGE", "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\"}" } ] }
上のデータ構造の主な要素は次のとおりです。
- owner (オーナー)
-
元のログデータの AWS アカウント ID。
- logGroup
-
発行元ログデータのロググループ名。
- logStream
-
発行元ログデータのログストリーム名。
- subscriptionFilters
-
発行元ログデータと一致したサブスクリプションフィルタ名のリスト。
- messageType
-
データメッセージは、"DATA_MESSAGE" 型を使用します。CloudWatch Logs は、主に送信先が到達可能であるかどうかをチェックするために、"CONTROL_MESSAGE" 型の Kinesis データストリームレコードを発行することがあります。
- logEvents
-
ログイベントレコードの配列として表される実際のログデータ。"id" プロパティは、各ログイベントの一意識別子です。
例 2: を使用したサブスクリプションフィルター AWS Lambda
この例では、ログデータを AWS Lambda 関数に送信する CloudWatch Logs サブスクリプションフィルターを作成します。
注記
Lambda 関数を作成する前に、生成するログデータのボリュームを計算します。このボリュームを処理できる関数を作成するように注意してください。関数に十分なボリュームがないと、ログストリームはスロットリングされます。Lambda の制限の詳細については、「AWS Lambda の制限」を参照してください。
Lambda のサブスクリプションフィルタを作成するには
-
AWS Lambda 関数を作成します。
Lambda 実行ロールをセットアップ済みであることを確認します。詳細については、AWS Lambda デベロッパーガイドの「ステップ 2.2: IAM ロール (実行ロール) を作成する」を参照してください。
-
テキストエディターを開き、以下の内容で
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(); } }); };
-
helloWorld.js ファイルを圧縮して
helloWorld.zip
という名前で保存します。 -
次のコマンドを使用します。ロールは、最初のステップで設定した Lambda 実行ロールです。
aws lambda create-function \ --function-name helloworld \ --zip-file fileb://
file-path
/helloWorld.zip \ --rolelambda-execution-role-arn
\ --handler helloWorld.handler \ --runtime nodejs12.x -
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
:123456789123
:log-group:TestLambda
:*" \ --source-account "123456789012
" -
次のコマンドを使用してサブスクリプションフィルタを作成します。プレースホルダーアカウントは自身のアカウントに置き換え、プレースホルダーロググループは処理するロググループに置き換えます。
aws logs put-subscription-filter \ --log-group-name
myLogGroup
\ --filter-name demo \ --filter-pattern "" \ --destination-arn arn:aws:lambda:region
:123456789123
:function:helloworld -
(オプション) サンプルのログイベントを使用してテストします。コマンドプロンプトで、次のコマンドを実行します。これにより、サブスクライブしたストリームに単純なログメッセージを送信されます。
Lambda 関数の出力を確認するには、Lambda 関数に移動して、/aws/lambda/helloworld にある出力を参照します。
aws logs put-log-events --log-group-name
myLogGroup
--log-stream-namestream1
--log-events "[{\"timestamp\":<CURRENT TIMESTAMP MILLIS>
, \"message\": \"Simple Lambda Test
\"}]"Lambda の配列を含むレスポンスが表示されます。Lambda レコードの [Data] (データ) 属性は、base64 でエンコードされており、gzip 形式で圧縮されています。Lambda が受け取る実際のペイロードは、
{ "awslogs": {"data": "BASE64ENCODED_GZIP_COMPRESSED_DATA"} }
の形式になります。raw データは、コマンドラインから次の UNIX コマンドを使用して調べることができます。echo -n "<BASE64ENCODED_GZIP_COMPRESSED_DATA>" | base64 -d | zcat
base64 でデコードおよび解凍されたデータは、次の構造を使用して JSON としてフォーマットされます。
{ "owner": "123456789012", "logGroup": "CloudTrail", "logStream": "123456789012_CloudTrail_us-east-1", "subscriptionFilters": [ "Destination" ], "messageType": "DATA_MESSAGE", "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\"}" } ] }
上のデータ構造の主な要素は次のとおりです。
- owner (オーナー)
-
元のログデータの AWS アカウント ID。
- logGroup
-
発行元ログデータのロググループ名。
- logStream
-
発行元ログデータのログストリーム名。
- subscriptionFilters
-
発行元ログデータと一致したサブスクリプションフィルタ名のリスト。
- messageType
-
データメッセージは、"DATA_MESSAGE" 型を使用します。CloudWatch Logs は、主に送信先が到達可能であるかどうかをチェックするために、"CONTROL_MESSAGE" 型の Lambda レコードを発行することがあります。
- logEvents
-
ログイベントレコードの配列として表される実際のログデータ。"id" プロパティは、各ログイベントの一意識別子です。
例 3: Amazon Data Firehose を使用したサブスクリプションフィルター
この例では、CloudWatch Logs サブスクリプションを作成して、定義されたフィルターに一致する受信ログイベントを Amazon Data Firehose 配信ストリームに送信します。CloudWatch Logs から Amazon Data Firehose に送信されたデータは、既に gzip レベル 6 圧縮で圧縮されているため、Firehose 配信ストリーム内で圧縮を使用する必要はありません。その後、Firehose の解凍機能を使用して、ログを自動的に解凍できます。詳細については、CloudWatch Logs を Firehose に送信する」を参照してください。
注記
Firehose ストリームを作成する前に、生成するログデータのボリュームを計算します。このボリュームを処理できる Firehose ストリームを作成するように注意してください。ストリームがこのボリュームを処理できない場合、ログストリームはスロットリングされます。Firehose ストリームボリュームの制限事項の詳細については、「Amazon Data Firehose Data Limits」をご参照ください。
Firehose のサブスクリプションフィルターを作成するには
-
Amazon Simple Storage Service (Amazon S3) バケットを作成します。CloudWatch Logs 専用に作成したバケットを使用することをお勧めします。ただし、既存のバケットを使用する場合は、ステップ 2 に進みます。
次のコマンドを実行します。プレースホルダーリージョンは、使用するリージョンに置き換えます。
aws s3api create-bucket --bucket
amzn-s3-demo-bucket2
--create-bucket-configuration LocationConstraint=region
出力例を次に示します。
{ "Location": "/
amzn-s3-demo-bucket2
" } -
Amazon S3 バケットにデータを置くためのアクセス許可を Amazon Data Firehose に付与する IAM ロールを作成します。
詳細については、「Amazon Data Firehose 開発者ガイド」の「Controlling Access with Amazon Data Firehose」を参照してください。
まず、テキストエディタを使用して、次のようにファイル
~/TrustPolicyForFirehose.json
で信頼ポリシーを作成します。{ "Statement": { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } }
-
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": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "
FirehosetoS3Role
", "Path": "/", "Arn": "arn:aws:iam::123456789012
:role/FirehosetoS3Role
" } } -
アクセス許可ポリシーを作成し、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
/*" ] } ] } -
次の put-role-policy コマンドを使用して、アクセス許可ポリシーをロールに関連付けます。
aws iam put-role-policy --role-name
FirehosetoS3Role
--policy-namePermissions-Policy-For-Firehose
--policy-documentfile://~/PermissionsForFirehose
.json -
次のように、送信先 Firehose 配信ストリームを作成します。RoleARN と BucketARN のプレースホルダー値を、作成したロールおよびバケット ARN に置き換えます。
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
"}'Firehose は、配信された Amazon S3 オブジェクトに対して、YYYY/MM/DD/HH UTC 時間形式のプレフィックスを自動的に使用することに注意してください。時間形式プレフィックスの前に、追加のプレフィックスを指定できます。プレフィックスの最後がフォワードスラッシュ (/) の場合は、Amazon S3 バケット内のフォルダとして表示されます。
-
ストリームがアクティブになるまで待ちます (これには数分かかる可能性があります)。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 } } } ] } } -
Firehose 配信ストリームにデータを置くためのアクセス許可を CloudWatch Logs に付与する IAM ロールを作成します。まず、テキストエディタを使用してファイル
~/TrustPolicyForCWL.json
で信頼ポリシーを作成します。このポリシーには、「混乱した代理」のセキュリティ上の問題を防止するための
aws:SourceArn
グローバル条件コンテキストキーが含まれています。詳細については、「混乱した代理の防止」を参照してください。{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:
region
:123456789012
:*" } } } } -
create-role コマンドを使用し、信頼ポリシーファイルを指定して IAM ロールを作成します。後のステップで必要になるため、返された Role.Arn 値を書き留めます。
aws iam create-role \ --role-name
CWLtoKinesisFirehoseRole
\ --assume-role-policy-documentfile://~/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
" } } -
権限ポリシーを作成し、CloudWatch Logs がアカウントで実行できるアクションを定義します。まず、テキストエディタを使用して権限ポリシーファイル (例:
~/PermissionsForCWL.json
) を作成します。{ "Statement":[ { "Effect":"Allow", "Action":["firehose:PutRecord"], "Resource":[ "arn:aws:firehose:
region
:account-id
:deliverystream/delivery-stream-name
"] } ] } -
put-role-policy コマンドを使用して、権限ポリシーをロールに関連付けます。
aws iam put-role-policy --role-name
CWLtoKinesisFirehoseRole
--policy-namePermissions-Policy-For-CWL
--policy-documentfile://~/PermissionsForCWL.json
-
Amazon Data Firehose 配信ストリームがアクティブ状態になり、IAM ロールを作成したら、CloudWatch Logs サブスクリプションフィルターを作成できます。サブスクリプションフィルターにより、選択されたロググループから Amazon Data Firehose 配信ストリームへのリアルタイムログデータのフローがすぐに開始されます。
aws logs put-subscription-filter \ --log-group-name "CloudTrail" \ --filter-name "Destination" \ --filter-pattern "{$.userIdentity.type = Root}" \ --destination-arn "
arn:aws:firehose:
" \ --role-arn "region
:123456789012
:deliverystream/my-delivery-streamarn:aws:iam::
"123456789012
:role/CWLtoKinesisFirehoseRole -
サブスクリプションフィルターを設定したら、CloudWatch Logs からフィルタパターンに一致するすべての受信ログイベントが Amazon Data Firehose 配信ストリームに転送されます。Amazon Data Firehose 配信ストリームに設定された時間バッファ間隔に基づいて、Amazon S3 にデータが表示されるようになります。十分な時間が経過すると、Amazon S3 バケットをチェックしてデータを確認できます。
aws s3api list-objects --bucket '
amzn-s3-demo-bucket2
' --prefix 'firehose/
'{ "Contents": [ { "LastModified": "2015-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/2015/10/29/00/my-delivery-stream-2015-10-29-00-35-40-7cc92023-7e66-49bc-9fd4-fc9819cc8ed3", "Owner": { "DisplayName": "cloudwatch-logs", "ID": "1ec9cf700ef6be062b19584e0b7d84ecc19237f87b6" }, "Size": 5752 } ] }
aws s3api get-object --bucket '
amzn-s3-demo-bucket2
' --key 'firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250' testfile.gz{ "AcceptRanges": "bytes", "ContentType": "application/octet-stream", "LastModified": "Thu, 29 Oct 2015 00:07:06 GMT", "ContentLength": 593, "Metadata": {} }
Simple Storage Service (Amazon S3) オブジェクトのデータは、gzip 形式で圧縮されます。raw データは、コマンドラインから次の UNIX コマンドを使用して調べることができます。
zcat testfile.gz
例 4: Amazon OpenSearch Service を使用したサブスクリプションフィルター
この例では、定義したフィルターに一致する受信ログイベントを OpenSearch Service ドメインに送信する CloudWatch Logs サブスクリプションを作成します。
OpenSearch Service のサブスクリプションフィルターを作成するには
-
OpenSearch Service ドメインを作成する。詳細については、OpenSearch Service ドメインの作成」を参照してください。
-
CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/
を開いてください。 -
ナビゲーションペインで、[Log groups] (ロググループ) を選択します。
ロググループの名前を選択します。
[Actions] (アクション)、[Subscription filters] (サブスクリプションフィルター)、[Create Amazon OpenSearch Service subscription filter] (Amazon OpenSearch Service サブスクリプションフィルターを作成) の順に選択します。
このアカウントのクラスターにストリーミングするか、別のアカウントにストリーミングするかを選択します。
このアカウントを選択した場合は、ステップ 1 で作成したドメインを選択します。
別のアカウントを選択した場合は、そのドメインの ARN とエンドポイントを入力します。
別のアカウントを選択した場合は、ドメイン ARN とエンドポイントを指定します。
Lambda IAM 実行ロールでは、OpenSearch Service への呼び出しを実行するときに Lambda が使用する IAM ロールを選択します。選択した IAM ロールは、次の要件を満たしている必要があります。
信頼関係に
lambda.amazonaws.com
が含まれている必要があります。以下のポリシーが含まれている必要があります。
ターゲット OpenSearch Service ドメインが VPC アカウントを使用している場合、IAM ロールには AWSLambdaVPCAccessExecutionRole ポリシーもアタッチされている必要があります。Amazon が管理するこのポリシーにより、お客様の VPC へのアクセスが Lambda に許可され、Lambda は VPC の OpenSearch エンドポイントに書き込むことができます。
ログ形式を選択します。
サブスクリプションフィルターパターンには、ログイベントで検索する用語またはパターンを入力します。これにより、関心のあるデータのみを OpenSearch Service クラスターに送信できます。詳細については、「メトリックスフィルターのフィルターパターン構文」を参照してください。
(オプション) [Select log data to test] (テストするログデータの選択) を開き、ログストリームを選択してから、[Test pattern] (パターンをテスト) を選択して、期待通りの結果が出ることを確認します。
[Start streaming] (ストリーミングの開始) を選択します。