vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

AWS API Call 数の取得

AWSの監視をCloudWatch以外(SaaS等)で行っている場合に、AWS API のコール数が気になります。
CloudTrail で証跡を保存、解析すれば詳細に分析できると思いますが、諸事情によりその手法が使えなかったので調べてみました。



AWSサービス

関連するAWSサービスの概要です。

CloudTrail Event

APIの実行履歴は CloudTrail Event で表示・取得できます。

CloudTrail は、作成時に AWS アカウントで有効になります。AWS アカウントでアクティビティが発生した場合、そのアクティビティは CloudTrail イベントに記録されます。

f:id:htnosm:20180917013940p:plain

Trail(証跡)が有効である必要はありません。ここでのTrail(証跡)は S3 等への転送を指します。

Trail(証跡)

CloudTrail Event を S3バケットや CloudWatch Logs へ転送する設定が行なえます。

Amazon Macie

機械学習によるユーザ動向の分析が行えるサービスです。

データソースとして AWS CloudTrail イベントログを利用できます。上記 Trail(証跡) を使用します。 また、現時点ではバージニアオレゴンリージョンのみの提供です。

f:id:htnosm:20180917013936p:plain

主要なSaaSAPI実行間隔

AWSの統合機能がある主要な SaaSAPI 実行間隔の情報です。

Datadog

We use the CloudWatch monitoring APIs to monitor your AWS resources. Our main use of these APIs is to gather raw metrics data through the GetMetricStatistics endpoint.

By default, we collect AWS metrics every 10 minutes.

デフォルトでは10分間隔で収集します。サポートへの依頼で間隔を変更することができます。

現時点では API コール数を参照する方法は用意されておらず、 AWS Biling インテグレーションを利用し、請求額を参照する事で把握する方法が紹介されています。

Mackerel

5分ごとに取得対象となるメトリックの数だけAWSAPIをコールして値を取得します。

New Relic

By default, the polling interval frequency is set to the maximum. You can change the polling frequency in the configuration settings.

サービス毎に異なり、デフォルトでは 1分 or 5分毎となるようです。[Configure]から設定変更も可能です。

AWS Account Status Dashboard からAPIコール数を参照できるようです。

可視化してみる

New Relic の AWS Account Status Dashboard と同等の物を Datadog で作成してみます。

定期的に CloudTrail Event を収集し、サマリを Datadog のカスタムメトリクスとして登録します。
今回は Datadog AWSインテグレーション用IAMロールを対象とし、Datadog へ送信していますが、仕組み的に応用は効きそうです。

f:id:htnosm:20180917013932p:plain

host を aws_account_no として登録しています。

f:id:htnosm:20180917020345p:plain

尚、Datadog で Custom Metrics を扱うには有償プランである必要があるようです。

留意点

LookupEvents を使用して CloudTrail Event を取得します。

The rate of lookup requests is limited to one per second per account. If this limit is exceeded, a throttling error occurs.

Lookup には1秒に1回の実行制限があります。

Events that occurred during the selected time range will not be available for lookup if CloudTrail logging was not enabled when the events occurred.

logging が有効であることが条件との記載がありますが、確認した限りではTrail(証跡)を有効化していないリージョンでも取得が行えていました。

CloudTrail typically delivers log files within 15 minutes of account activity.

Event が即時反映されないように見えたので、ドキュメントにあるよう、15分前の値を取得しています。

CloudWatch supports logging the following actions as events in CloudTrail log files:

Trail に出力されるAPIのみが対象になります。 叩かれているであろう GetMetricStatistics 等は残念ながら対象外です。

没案

CloudWatch のカスタムメトリクスとして登録する方法も考えましたが、 リージョン跨いで参照したかったのと、APIコール数参照のためにAPIコール数を増やすのもいかがなものかと思い、止めました。

f:id:htnosm:20180917013928p:plain