AWS Global Acceleratorのフローログを設定して可視化してみた
はじめに
AWSチームのすずきです。
海外からのインターネットアクセスの改善のために導入したAWS Global Accelerator。 その利用傾向や、コストの確認のためGlobal AcceleratorのフローログをS3に出力する設定を行い、 Amazon Athenaを利用した集計と、Amazon QuickSightによる可視化を試みる機会がありましたので、 紹介させて頂きます。
準備
実行環境
AWS Global Accelerator に対応した最新AWS CLIの実行環境を用意しました。
- OS: AmazonLinux 2 (amzn2-ami-hvm-2.0.20181114-x86_64-gp2)
- IAMロール: PowerUserAccessを付与済
最新AWS CLIインストール
sudo yum install git -y curl -O https://bootstrap.pypa.io/get-pip.py python get-pip.py --user echo 'export PATH=~/.local/bin:$PATH' >> ~/.bash_profile source .bash_profile pip install -U awscli --user
AWS CLIバージョン情報
$ aws --version aws-cli/1.16.75 Python/2.7.14 Linux/4.14.77-81.59.amzn2.x86_64 botocore/1.12.65
エンドポイント確認
- AWS Global Acceleratorのエンドポイントはオレゴンに存在します。
$ host globalaccelerator.amazonaws.com globalaccelerator.amazonaws.com is an alias for globalaccelerator.us-west-2.amazonaws.com. globalaccelerator.us-west-2.amazonaws.com is an alias for globalaccelerator-1584653106.us-west-2.elb.amazonaws.com. globalaccelerator-1584653106.us-west-2.elb.amazonaws.com has address 52.32.64.41 globalaccelerator-1584653106.us-west-2.elb.amazonaws.com has address 52.88.94.37 globalaccelerator-1584653106.us-west-2.elb.amazonaws.com has address 34.209.92.216 $ host globalaccelerator.ap-northeast-1.amazonaws.com Host globalaccelerator.ap-northeast-1.amazonaws.com not found: 3(NXDOMAIN)
- Global Acceleratorの設定は、CLIのオプションで「us-west-2」リージョンを明示して行いました。
list-accelerators
$ aws --region=us-west-2 globalaccelerator list-accelerators { "Accelerators": [ { "AcceleratorArn": "arn:aws:globalaccelerator::000000000000:accelerator/xxxx-xxxx-xxxx-xxxx-xxxx", "IpAddressType": "IPV4", "Name": "xxxxxxxx", "Enabled": true, "Status": "DEPLOYED", "IpSets": [ { "IpAddresses": [ "13.248.136.211", "76.223.10.179" ], "IpFamily": "IPv4" } ], "CreatedTime": 1544503340.0, "LastModifiedTime": 1544503343.0 } ] }
設定
S3
S3バケット作成
- フローログの出力先となる、任意のS3バケット「global-accelerator-flowlogs-xxxxxx」を作成します。
- Athena、QuickSightを利用するリージョンに設置しました。
S3バケットポリシー設定
- 作成したS3バケットに以下のバケットポリシーを反映、フローログの書き込みを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::global-accelerator-flowlogs-xxxxxx/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::global-accelerator-flowlogs-xxxxxx" } ] }
Global Accelerator
- CLIを利用してフローログを有効にします。
aws --region=us-west-2 globalaccelerator update-accelerator-attributes \ --accelerator-arn arn:aws:globalaccelerator::000000000000:accelerator/xxxx-xxxx-xxxx-xxxx-xxxx \ --flow-logs-enabled \ --flow-logs-s3-bucket global-accelerator-flowlogs-xxxxxx \ --flow-logs-s3-prefix flowlogs/xxxxxx/
update-accelerator-attributes実行結果
$ aws --region=us-west-2 globalaccelerator update-accelerator-attributes \ > --accelerator-arn arn:aws:globalaccelerator::000000000000:accelerator/xxxx-xxxx-xxxx-xxxx-xxxx \ > --flow-logs-enabled \ > --flow-logs-s3-bucket global-accelerator-flowlogs-xxxxxx \ > --flow-logs-s3-prefix flowlogs/xxxxxx/ { "AcceleratorAttributes": { "FlowLogsS3Bucket": "global-accelerator-flowlogs-xxxxxx", "FlowLogsS3Prefix": "flowlogs/xxxxxx/", "FlowLogsEnabled": true } }
Athena
- 今回「2018/12/14」以下のフローログを集計対象とし、スペース区切りのCSVとして読み込みます。
CREATE EXTERNAL TABLE `flowlogs`( `version` string, `aws_account_id` string, `accelerator_id` string, `client_ip` string, `client_port` string, `gip` string, `gip_port` string, `endpoint_ip` string, `endpoint_port` string, `protocol` string, `ip_address_type` string, `packets` bigint, `bytes` bigint, `start_time` bigint, `end_time` bigint, `action` string, `log_status` string, `globalaccelerator_source_ip` string, `globalaccelerator_source_port` string, `endpoint_region` string, `globalaccelerator_region` string, `direction` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://global-accelerator-flowlogs-xxxx/flowlogs/xxxxxx/AWSLogs/000000000000/globalaccelerator/us-west-2/2018/12/14' TBLPROPERTIES ( 'CrawlerSchemaDeserializerVersion'='1.0', 'CrawlerSchemaSerializerVersion'='1.0', 'UPDATED_BY_CRAWLER'='orders_jp', 'classification'='csv', 'columnsOrdered'='true', 'compressionType'='none', 'delimiter'=' ', 'objectCount'='1', 'skip.header.line.count'='1', 'transient_lastDdlTime'='1544880186', 'typeOfData'='file')
「テーブルのプレビュー」結果
集計データ作成
- 1時間集計データが生成出来ることを確認します。
SELECT date_format(from_unixtime(start_time),'%Y-%m-%dT%H:00:00') as start_datetime , client_ip , protocol , ip_address_type , sum(bytes) as sum_byte , sum(end_time-start_time) as sum_elapsed_time , count(1) as count_rec , log_status , substring(split_part(globalaccelerator_region,'-',1),1,3) as ga_region , direction FROM "default"."ga_flowlogs" GROUP BY date_format(from_unixtime(start_time),'%Y-%m-%dT%H:00:00') , client_ip , protocol , ip_address_type , log_status , substring(split_part(globalaccelerator_region,'-',1),1,3) , direction order by sum_byte desc limit 10
- order by, limit を除外したものを、QuickSightのカスタムクエリとして利用します。
-
実行結果
QuickSight
AWS resources設定
- バージニアリージョンのQuickSightコンソールを利用して、AthenaとS3の利用を許可する権限設定を行います。
- 利用するAthena と S3をチェック
- S3はフローログ出力先のバケットをチェックします。
Data Set作成
- Athenaを利用するデータセットを作成します。
- SPICEの容量節約と同期時間の短縮の為、カスタムSQLを指定します。
- 先に動作確認をした1時間集計を行うSQLを登録し、「Finish」を行います。
SELECT date_format(from_unixtime(start_time),'%Y-%m-%dT%H:00:00') as start_datetime , client_ip , protocol , ip_address_type , sum(bytes) as sum_byte , sum(end_time-start_time) as sum_elapsed_time , count(1) as count_rec , log_status , substring(split_part(globalaccelerator_region,'-',1),1,3) as ga_region , direction FROM "default"."ga_flowlogs" GROUP BY date_format(from_unixtime(start_time),'%Y-%m-%dT%H:00:00') , client_ip , protocol , ip_address_type , log_status , substring(split_part(globalaccelerator_region,'-',1),1,3) , direction
- Athenaで文字列型で出力した日時カラム、QuickSightで時刻カラムとして扱うための設定を行います。
Visualize
QuickSightで対象を指定して可視化を行いました。
direction
- 約94%のトラフィックがEGRESS、ユーザーへのアウトバウンドトラフィックである事が確認できました。
region
- 米国からのアクセスが大半を占め約60%、アジアと欧州からのアクセスがそれぞれ20%程度である事が確認できました。
時間別
- 1時間あたりのトラフィックは400MB弱、1日8GB程度のトラフィックが発生する事を確認できました。
まとめ
今回Global Acceleratorを導入した環境、1日あたりのAWS費用は約0.85ドルとの計算になりました。
内訳は、時間課金で発生する固定費用として0.6ドル(0.025ドル * 24時間)。 ネットワーク転送量に応じた課金は 0.25 ドル ((8GB * 0.035ドル * 0.6 ) + (8GB * 0.043ドル * 0.2 ) + (8GB* 0.01ドル * 0.2 ) )でした。
事前に予想したコストで利用できる目処のついたGlobal Accelerator、 しばらく継続稼働させ、その費用に見合う効果が得られるか確認を試みてみたいと思います。