View a markdown version of this page

Account-level filter berlangganan - CloudWatch Log Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Account-level filter berlangganan

penting

Ada risiko menyebabkan loop rekursif tak terbatas dengan filter langganan yang dapat menyebabkan peningkatan besar dalam tagihan konsumsi jika tidak ditangani. Untuk mengurangi risiko ini, sebaiknya gunakan kriteria seleksi di filter langganan tingkat akun untuk mengecualikan grup log yang menyerap data log dari sumber daya yang merupakan bagian dari alur kerja pengiriman langganan. Untuk informasi selengkapnya tentang masalah ini dan menentukan grup log mana yang akan dikecualikan, lihatPencegahan rekursi log.

Anda dapat menetapkan kebijakan langganan tingkat akun yang menyertakan subset grup log di akun. Kebijakan berlangganan akun dapat bekerja dengan Amazon Kinesis Data Streams, AWS Lambda, atau Amazon Data Firehose. Log yang dikirim ke layanan melalui kebijakan langganan tingkat akun dikodekan base64 dan dikompresi dengan format gzip. Bagian ini memberikan contoh yang dapat Anda ikuti untuk membuat langganan tingkat akun untuk Amazon Kinesis Data Streams, Lambda, dan Firehose.

catatan

Untuk melihat daftar semua kebijakan filter langganan di akun Anda, gunakan describe-account-policies perintah dengan nilai SUBSCRIPTION_FILTER_POLICY untuk --policy-type parameter. Untuk informasi selengkapnya, lihat describe- account-policicies¶.

Contoh 1: Filter langganan dengan Amazon Kinesis Data Streams

Sebelum Anda membuat aliran data Amazon Kinesis Data Streams untuk digunakan dengan kebijakan langganan tingkat akun, hitung volume data log yang akan dihasilkan. Pastikan untuk membuat aliran dengan pecahan yang cukup untuk menangani volume ini. Jika aliran tidak memiliki cukup pecahan, itu dibatasi. Untuk informasi selengkapnya tentang batas volume streaming, lihat Ku ota dan Batas di dokumentasi Amazon Kinesis Data Streams.

Awas

Karena peristiwa log dari beberapa grup log diteruskan ke tujuan, ada risiko pelambatan. Kiriman yang dibatasi dicoba ulang hingga 24 jam. Setelah 24 jam, kiriman yang gagal dijatuhkan.

Untuk mengurangi risiko pelambatan, Anda dapat mengambil langkah-langkah berikut:

  • Pantau aliran Amazon Kinesis Data Streams Anda dengan CloudWatch metrik. Ini membantu Anda mengidentifikasi pelambatan dan menyesuaikan konfigurasi Anda sesuai dengan itu. Misalnya, DeliveryThrottling metrik melacak jumlah peristiwa CloudWatch log yang Lognya dibatasi saat meneruskan data ke tujuan langganan. Untuk informasi selengkapnya, lihat Pemantauan dengan CloudWatch metrik.

  • Gunakan mode kapasitas sesuai permintaan untuk streaming Anda di Amazon Kinesis Data Streams. On-demandmode langsung mengakomodasi beban kerja Anda saat naik atau turun. Untuk informasi selengkapnya, lihat On-demand mode.

  • Batasi pola filter langganan CloudWatch Log Anda agar sesuai dengan kapasitas streaming Anda di Amazon Kinesis Data Streams. Jika Anda mengirim terlalu banyak data ke streaming, Anda mungkin perlu mengurangi ukuran filter atau menyesuaikan kriteria filter.

Contoh berikut menggunakan kebijakan langganan tingkat akun untuk meneruskan semua peristiwa log ke aliran di Amazon Kinesis Data Streams. Pola filter mencocokkan peristiwa log apa pun dengan teks Test dan meneruskannya ke aliran di Amazon Kinesis Data Streams.

Cara membuat kebijakan berlangganan tingkat akun untuk Amazon Kinesis Data Streams
  1. Buat aliran tujuan menggunakan perintah berikut:

    $ C:\> aws kinesis create-stream —stream-name "TestStream" —shard-count 1
  2. Tunggu beberapa menit agar streaming menjadi aktif. Anda dapat memverifikasi apakah aliran aktif dengan menggunakan perintah describe-stream untuk memeriksa properti. StreamDescription.StreamStatus

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

    Berikut ini adalah output contoh:

    { "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. Buat peran IAM yang akan memberikan izin CloudWatch Log untuk memasukkan data ke aliran Anda. Pertama, Anda harus membuat kebijakan kepercayaan dalam file (misalnya, ~/TrustPolicyForCWL-Kinesis.json). Gunakan editor teks untuk membuat kebijakan ini.

    Kebijakan ini mencakup kunci konteks kondisi aws:SourceArn global untuk membantu mencegah masalah keamanan wakil yang membingungkan. Untuk informasi selengkapnya, lihat Pencegahan wakil yang bingung.

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }
  4. Gunakan perintah create-role untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan. Perhatikan Role.Arn nilai yang dikembalikan, karena Anda juga akan membutuhkannya untuk langkah selanjutnya:

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

    Berikut adalah contoh output.

    { "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. Buat kebijakan izin untuk menentukan tindakan apa yang dapat dilakukan CloudWatch Log pada akun Anda. Pertama, Anda akan membuat kebijakan izin dalam file (misalnya, ~/PermissionsForCWL-Kinesis.json). Gunakan editor teks untuk membuat kebijakan ini. Jangan gunakan konsol IAM untuk membuatnya.

    { "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:region:123456789012:stream/TestStream" } ] }
  6. Kaitkan kebijakan izin dengan peran menggunakan perintah put-role-policy berikut:

    aws iam put-role-policy --role-name CWLtoKinesisRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL-Kinesis.json
  7. Setelah streaming berada dalam status Aktif dan Anda telah membuat peran IAM, Anda dapat membuat kebijakan filter langganan CloudWatch Log. Kebijakan ini segera memulai aliran data log real-time ke streaming Anda. Dalam contoh ini, semua peristiwa log yang berisi string dial ERROR irkan, kecuali yang ada di grup log bernama LogGroupToExclude1 danLogGroupToExclude2.

    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. Setelah Anda mengatur filter langganan, Log CloudWatch meneruskan semua peristiwa log masuk yang sesuai dengan pola filter dan kriteria pemilihan ke streaming Anda.

    Bid selection-criteria ang ini opsional, tetapi penting untuk mengecualikan grup log yang dapat menyebabkan rekursi log tak terbatas dari filter langganan. Untuk informasi selengkapnya tentang masalah ini dan menentukan grup log mana yang akan dikecualikan, lihatPencegahan rekursi log. Saat ini, NOT IN adalah satu-satunya operator yang didukung untukselection-criteria.

    Anda dapat memverifikasi aliran peristiwa log dengan menggunakan iterator pecahan Amazon Kinesis Data Streams dan menggunakan get-records perintah Amazon Kinesis Data Streams untuk mengambil beberapa rekaman Amazon 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"

    Anda mungkin perlu menggunakan perintah ini beberapa kali sebelum Amazon Kinesis Data Streams mulai mengembalikan data.

    Anda akan melihat respons dengan array catatan. A tribut Data dalam catatan Amazon Kinesis Data Streams dikodekan base64 dan dikompresi dengan format gzip. Anda dapat memeriksa data mentah dari baris perintah menggunakan perintah Unix berikut:

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

    Data base64 yang diterjemahkan dan didekompresi diformat sebagai JSON dengan struktur berikut:

    { "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" }

    Elemen kunci dalam struktur data adalah sebagai berikut:

    messageType

    Pesan data akan menggunakan tipe "DATA_MESSAGE". Terkadang CloudWatch Log mungkin memancarkan catatan Amazon Kinesis Data Streams dengan tipe “CONTROL_MESSAGE”, terutama untuk memeriksa apakah tujuan dapat dijangkau.

    owner

    ID AWS Akun dari data log asal.

    logGroup

    Nama grup log dari data log asal.

    logStream

    Nama pengaliran log dari data log asal.

    subscriptionFilters

    Daftar nama filter langganan yang cocok dengan data log asal.

    logEvents

    Data log yang sebenarnya, direpresentasikan sebagai array catatan log acara. Properti "id" adalah pengenal unik untuk setiap log acara.

    Tingkat kebijakan

    Tingkat di mana kebijakan itu ditegakkan. “ACCOUNT_LEVEL_POLICY” adalah kebijakan filter langganan tingkat policyLevel akun.

Contoh 2: Filter langganan dengan AWS Lambda

Dalam contoh ini, Anda akan membuat kebijakan filter langganan tingkat akun CloudWatch Log yang mengirimkan data log ke fungsi Anda AWS Lambda .

Awas

Sebelum membuat fungsi Lambda, hitung volume data log yang akan dihasilkan. Pastikan untuk membuat fungsi yang dapat menangani volume ini. Jika fungsi tidak dapat menangani volume, aliran log akan dibatasi. Karena peristiwa log dari semua grup log atau subset grup log akun diteruskan ke tujuan, ada risiko pelambatan. Untuk informasi selengkapnya tentang batas Lambda, lihat Batas AWS Lambda.

Cara membuat kebijakan filter langganan tingkat akun untuk Lambda
  1. Buat AWS Lambda fungsi.

    Pastikan bahwa Anda telah mengatur peran eksekusi Lambda. Untuk informasi selengkapnya, lihat: Langkah 2.2: Buat IAM role (peran eksekusi) dalam Panduan Developer AWS Lambda .

  2. Buka editor teks dan buat file bernama helloWorld.jsdengan isi sebagai berikut:

    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. Zip file halo World.js dan simpan dengan namahelloWorld.zip.

  4. Gunakan perintah berikut, di mana perannya adalah peran eksekusi Lambda yang Anda atur di langkah pertama:

    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. Ber CloudWatch ikan Logs izin untuk menjalankan fungsi Anda. Gunakan perintah berikut, ganti akun placeholder dengan akun Anda sendiri.

    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. Buat kebijakan filter langganan tingkat akun menggunakan perintah berikut, ganti akun placeholder dengan akun Anda sendiri. Dalam contoh ini, semua peristiwa log yang berisi string dial ERROR irkan, kecuali yang ada di grup log bernama LogGroupToExclude1 danLogGroupToExclude2.

    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"

    Setelah Anda mengatur filter langganan, Log CloudWatch meneruskan semua peristiwa log masuk yang sesuai dengan pola filter dan kriteria pemilihan ke streaming Anda.

    Bid selection-criteria ang ini opsional, tetapi penting untuk mengecualikan grup log yang dapat menyebabkan rekursi log tak terbatas dari filter langganan. Untuk informasi selengkapnya tentang masalah ini dan menentukan grup log mana yang akan dikecualikan, lihatPencegahan rekursi log. Saat ini, NOT IN adalah satu-satunya operator yang didukung untukselection-criteria.

  7. (Opsional) Uji menggunakan contoh log acara. Di jendela perintah, jalankan perintah berikut, yang akan menempatkan pesan log sederhana ke dalam pengaliran langganan.

    Untuk melihat output dari fungsi Lambda Anda, arahkan ke fungsi Lambda di mana Anda akan melihat output di/aws/lambdahelloworld:

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

    Anda akan melihat respons dengan array Lambda. A tribut Data dalam catatan Lambda dikodekan base64 dan dikompresi dengan format gzip. Muatan sebenarnya yang diterima oleh Lambda memiliki format berikut { "awslogs": {"data": "BASE64ENCODED_GZIP_COMPRESSED_DATA"} } Anda dapat memeriksa data mentah dari baris perintah menggunakan perintah Unix berikut:

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

    Data base64 yang diterjemahkan dan didekompresi diformat sebagai JSON dengan struktur berikut:

    { "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" }
    catatan

    Filter langganan tingkat akun tidak akan diterapkan ke grup log fungsi Lambda tujuan. Ini untuk mencegah rekursi log tak terbatas yang dapat menyebabkan peningkatan tagihan konsumsi. Untuk informasi lebih lanjut tentang masalah ini, lihatPencegahan rekursi log.

    Elemen kunci dalam struktur data adalah sebagai berikut:

    messageType

    Pesan data akan menggunakan tipe "DATA_MESSAGE". Terkadang CloudWatch Log mungkin memancarkan catatan Amazon Kinesis Data Streams dengan tipe “CONTROL_MESSAGE”, terutama untuk memeriksa apakah tujuan dapat dijangkau.

    owner

    ID AWS Akun dari data log asal.

    logGroup

    Nama grup log dari data log asal.

    logStream

    Nama pengaliran log dari data log asal.

    subscriptionFilters

    Daftar nama filter langganan yang cocok dengan data log asal.

    logEvents

    Data log yang sebenarnya, direpresentasikan sebagai array catatan log acara. Properti "id" adalah pengenal unik untuk setiap log acara.

    Tingkat kebijakan

    Tingkat di mana kebijakan itu ditegakkan. “ACCOUNT_LEVEL_POLICY” adalah kebijakan filter langganan tingkat policyLevel akun.

Contoh 3: Filter langganan dengan Amazon Data Firehose

Dalam contoh ini, Anda akan membuat CloudWatch kebijakan filter langganan tingkat akun Logs yang mengirimkan peristiwa log masuk yang sesuai dengan filter yang Anda tentukan ke aliran pengiriman Amazon Data Firehose Anda. Data yang dikirim dari CloudWatch Log ke Amazon Data Firehose sudah dikompresi dengan kompresi gzip level 6, jadi Anda tidak perlu menggunakan kompresi dalam aliran pengiriman Firehose Anda. Anda kemudian dapat menggunakan fitur dekompresi di Firehose untuk secara otomatis mendekompresi log. Untuk informasi selengkapnya, lihat Menulis ke Kinesis Data Firehose Menggunakan CloudWatch Log.

Awas

Sebelum Anda membuat aliran Firehose, hitung volume data log yang akan dihasilkan. Pastikan untuk membuat aliran Firehose yang dapat menangani volume ini. Jika pengaliran tidak dapat menangani volume, pengaliran log akan mengalami throttling. Untuk informasi selengkapnya tentang batas volume aliran Firehose, lihat Batas Data Firehose Data Amazon.

Untuk membuat filter langganan untuk Firehose
  1. Buat bucket Amazon Simple Storage Service (Amazon S3). Sebaiknya gunakan bucket yang dibuat khusus untuk CloudWatch Log. Namun, jika Anda ingin menggunakan bucket yang sudah ada, lewati ke langkah 2.

    Jalankan perintah berikut, dengan mengganti Wilayah placeholder dengan Wilayah yang ingin Anda gunakan:

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

    Berikut ini adalah output contoh:

    { "Location": "/amzn-s3-demo-bucket2" }
  2. Buat peran IAM yang memberikan izin Amazon Data Firehose untuk memasukkan data ke bucket Amazon S3 Anda.

    Untuk informasi selengkapnya, lihat Mengontrol Akses dengan Amazon Data Firehose di Panduan Pengembang Amazon Data Firehose.

    Pertama, gunakan editor teks untuk membuat kebijakan kepercayaan dalam file ~/TrustPolicyForFirehose.json sebagai berikut:

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  3. Gunakan perintah create-role untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan. Catat Role.Arn nilai yang dikembalikan, karena Anda akan membutuhkannya di langkah selanjutnya:

    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. Buat kebijakan izin untuk menentukan tindakan apa yang dapat dilakukan Firehose pada akun Anda. Pertama, gunakan editor teks untuk membuat kebijakan izin dalam file ~/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. Kaitkan kebijakan izin dengan peran menggunakan perintah put-role-policy berikut:

    aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
  6. Buat aliran pengiriman Firehose tujuan sebagai berikut, ganti nilai placeholder untuk rolearn dan bucketarn dengan peran dan bucket ARN yang Anda buat:

    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 secara otomatis menggunakan awalan dalam format waktu YYYY/MM/DD/HH UTC untuk objek Amazon S3 yang dikirimkan. Anda dapat menentukan prefiks tambahan untuk ditambahkan di depan prefiks format waktu. Jika prefiks berakhir dengan garis miring (/), itu akan muncul sebagai folder dalam bucket Amazon S3.

  7. Tunggu beberapa menit agar streaming menjadi aktif. Anda dapat menggunakan perintah Firehose describe-delivery-stream untuk memeriksa properti. DeliveryStreamDescription.DeliveryStreamStatus Selain itu, perhatikan nil DeliveryStreamDescription.DeliveryStreamARN ainya, karena Anda akan membutuhkannya di langkah selanjutnya:

    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. Buat peran IAM yang memberikan izin CloudWatch Log untuk memasukkan data ke aliran pengiriman Firehose Anda. Pertama, gunakan editor teks untuk membuat kebijakan kepercayaan dalam file ~/TrustPolicyForCWL.json:

    Kebijakan ini mencakup kunci konteks kondisi aws:SourceArn global untuk membantu mencegah masalah keamanan wakil yang membingungkan. Untuk informasi selengkapnya, lihat Pencegahan wakil yang bingung.

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }
  9. Gunakan perintah create-role untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan. Catat Role.Arn nilai yang dikembalikan, karena Anda akan membutuhkannya di langkah selanjutnya:

    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. Buat kebijakan izin untuk menentukan tindakan apa yang dapat dilakukan CloudWatch Log pada akun Anda. Pertama, gunakan editor teks untuk membuat file kebijakan izin (misalnya, ~/PermissionsForCWL.json):

    { "Statement":[ { "Effect":"Allow", "Action":["firehose:PutRecord"], "Resource":[ "arn:aws:firehose:region:account-id:deliverystream/delivery-stream-name"] } ] }
  11. Kaitkan kebijakan izin dengan peran menggunakan perintah put-role-policy:

    aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  12. Setelah aliran pengiriman Amazon Data Firehose berada dalam status aktif dan Anda telah membuat peran IAM, Anda dapat membuat kebijakan filter langganan tingkat CloudWatch akun Logs. Kebijakan ini segera memulai aliran data log real-time dari grup log yang dipilih ke aliran pengiriman Amazon Data Firehose Anda:

    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. Setelah Anda mengatur filter langganan, Log mener CloudWatch uskan peristiwa log masuk yang cocok dengan pola filter ke aliran pengiriman Amazon Data Firehose Anda.

    Bid selection-criteria ang ini opsional, tetapi penting untuk mengecualikan grup log yang dapat menyebabkan rekursi log tak terbatas dari filter langganan. Untuk informasi selengkapnya tentang masalah ini dan menentukan grup log mana yang akan dikecualikan, lihatPencegahan rekursi log. Saat ini, NOT IN adalah satu-satunya operator yang didukung untukselection-criteria.

    Data Anda akan mulai muncul di Amazon S3 berdasarkan interval buffer waktu yang ditetapkan pada aliran pengiriman Amazon Data Firehose Anda. Setelah waktu tertentu berlalu, Anda dapat memverifikasi data dengan memeriksa Bucket Amazon S3 Anda.

    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": {} }

    Data dalam objek Amazon S3 dikompresi dengan format gzip. Anda dapat memeriksa data mentah dari baris perintah menggunakan perintah Unix berikut:

    zcat testfile.gz