{CloudWatch Logs}CloudWatch Logs サブスクリプションフィルターの使用(Kinesis Data Streams)

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/SubscriptionFilters.html

サブスクリプションフィルターは、Kinesis、Lambda、または Kinesis Data Firehose で使用できます。
サブスクリプションフィルターを介して宛先サービスに送信されるログは、base64エンコードされ、gzip 形式で圧縮されます。


-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

aws --version


-- 2. CloudWatchロググループの作成

aws logs create-log-group --log-group-name app01/test.log

aws logs describe-log-groups --log-group-name-prefix app01/test.log

aws logs put-retention-policy \
--log-group-name app01/test.log \
--retention-in-days 1


-- 3. CloudWatchログストリームの作成

aws logs create-log-stream \
--log-group-name app01/test.log \
--log-stream-name stream01

aws logs describe-log-streams \
--log-group-name app01/test.log

 

-- 4 Kinesis ストリームの作成

aws kinesis create-stream --stream-name kinesisstream01 --shard-count 1
aws kinesis describe-stream --stream-name kinesisstream01


-- 5. IAMポリシー作成
vim policy01.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kinesis:PutRecord",
      "Resource": "arn:aws:kinesis:ap-northeast-1:999999999999:stream/kinesisstream01"
    }
  ]
}


aws iam create-policy \
--policy-name policy01 \
--policy-document file://policy01.json

-- 6. IAMロール作成
vim role01.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "logs.ap-northeast-1.amazonaws.com" },
      "Action": "sts:AssumeRole",
      "Condition": { 
          "StringLike": { "aws:SourceArn": "arn:aws:logs:ap-northeast-1:999999999999:*" } 
       }
    }
  ]
}

aws iam create-role \
--role-name role01 \
--assume-role-policy-document file://role01.json

-- 7. ポリシーをロールにアタッチ
aws iam attach-role-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01 \
--role-name role01


-- 8. サブスクリプションフィルタ作成

Kinesis ストリームが [Active (アクティブ)] 状態になるまで待つ。


aws logs put-subscription-filter \
--log-group-name "app01/test.log" \
--filter-name "filter01" \
--filter-pattern "Error" \
--destination-arn "arn:aws:kinesis:ap-northeast-1:999999999999:stream/kinesisstream01" \
--role-arn "arn:aws:iam::999999999999:role/role01"


-- 9. 動作確認

 

aws kinesis get-shard-iterator \
--stream-name kinesisstream01 \
--shard-id shardId-000000000000 \
--shard-iterator-type TRIM_HORIZON


aws kinesis get-records \
--limit 10 \
--shard-iterator "AAAAAAAAAAHLZ4OxYM8SIGGDMJ8xGbPVSd2WOjGP2fq5t1kUu++uPkUEwe/xIPCma1BEkJLAiBwffDF8moJXNJmigBrpV8b5EapIqd0uI8gq9V0sA2MvqJgvHGt96JN60ODEfGk2MpO1VKn1gntAp9PatmEH6fzuC1jGdsbPqqtdV7+Mv6IBwe3RtrKct9TTGwADlK57xvlEi7USOGkIytuQq8gqcsMklSrpvJIX68u3AfhtyKS9dQ=="

 

 

aws logs put-log-events \
--log-group-name app01/test.log \
--log-stream-name stream01 \
--log-events timestamp=1646547311000,message="Error01"


aws logs put-log-events \
--log-group-name app01/test.log \
--log-stream-name stream01 \
--log-events timestamp=1646547322000,message="OK01" \
--sequence-token 49627243341973344359308009412245450401004517813949301138


aws logs put-log-events \
--log-group-name app01/test.log \
--log-stream-name stream01 \
--log-events timestamp=1646547333000,message="Error02" \
--sequence-token 49625710070401111655270747028956652469333359796458356834


"OK01"はKinesisに届いていないことを確認


-- 10. クリーンアップ

-- サブスクリプションフィルターの削除

aws logs describe-subscription-filters \
--log-group-name app01/test.log

aws logs delete-subscription-filter \
--log-group-name "app01/test.log" \
--filter-name "filter01"

 

 

-- IAMロールの削除
aws iam list-roles | grep role01

aws iam detach-role-policy \
--role-name role01 \
--policy-arn arn:aws:iam::999999999999:policy/policy01

aws iam delete-role --role-name role01


-- IAMポリシーの削除
aws iam list-policies | grep policy01

aws iam delete-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01

 

-- Kinesis ストリームの削除
aws kinesis list-streams
aws kinesis delete-stream --stream-name kinesisstream01


-- CloudWatchログストリームの削除

aws logs describe-log-streams \
--log-group-name app01/test.log


aws logs delete-log-stream \
--log-group-name app01/test.log \
--log-stream-name stream01


-- CloudWatchロググループの削除

aws logs describe-log-groups --log-group-name-prefix app01/test.log

aws logs delete-log-group --log-group-name app01/test.log