概要
CloudWatchにて収集しているAWSサービスの様々なメトリクスを、別システムに転送するための仕組み及びセットアップ手順を示します。
構成
- CloudWatch:各種AWSサービスのメトリクスを自動的に収集しています。また、
CloudWatch Metric Streams
という機能を利用し、収集したメトリクスをData Firehoseへ転送します - Data Firehose:CloudWatchからメトリクスを受け取り、API Gatewayへ転送します
- API Gateway:Data Firehoseからメトリクスを受け取り、別システムへ転送します
API Gatewayを使わなくとも、Data Firehoseから様々な外部サービスへ転送することができますが、
Amazon Data Firehose ではアクセストークンを"Amz-Firehose-Access-Key"というリクエストヘッダーで送信する仕様になっています。
今回の転送先システムでは、このリクエストヘッダーを受け付けておらず(401エラーが発生してしまうことを確認している)ため、Authorizationヘッダを設定する必要があり、そのためにAPI Gatewayを利用しています。
転送先システムが"Amz-Firehose-Access-Key"に対応しているのであれば、API Gatewayは不要になるので、本手順のAPI Gatewayの箇所は飛ばしてください。
また、メトリクスの情報はBase64
エンコードされた状態で転送先システムにて受け取ります。デコードした状態で受け取りたい場合は、Lambda等を利用しデコード処理を組み込んで下さい。本記事ではLambdaによるデコード処理方法は記載対象外とします。
手順
API Gatewayセットアップ
API GatewayのタイプはREST APIにて作成します。
作成が完了すると、次のような画面になるはずです。
メソッドを作成
を押下します。
メソッドの作成画面では、次のように設定にして下さい。
メソッドの作成後、"統合リクエスト"タブを開き、下記のようにURL リクエストヘッダーのパラメータ設定を行います。名前を"Authorization"とし、マッピング元を"bearer <アクセストークン>"としてください。値は一重符で囲う必要があります。※<アクセストークン>には、転送先システムにて発行された実際のトークンを入力して下さい。
設定が完了したら、下記のように"テスト"タブから、テストデータを送信することが可能ですので、転送先システムにて受信できるかどうかを確認して下さい。
テストが完了したら、APIをデプロイして下さい。
デプロイ後、API gateway向けのURLが発行されるので、curl等で疎通確認して下さい。以下のcurlコマンドはサンプルです。
$ curl -X POST https://<API Gateway URL> -H "Content-Type:application/json" -d "{\"val\":\"from api\"}"
Data firehoseセットアップ
Data firehoseの作成画面では、次のように設定して下さい。
- S3バックアップバケット:任意のS3バケット
CloudWatch Metric Streamsセットアップ
CloudWatch Metric Streamsの作成画面では、次のように設定して下さい。
- 送信先:先ほど作成したData Firehose
- 出力フォーマット:転送先システムに合わせたフォーマットを選択します。今回の転送先システムではJSONに対応しているため、JSONを選択しています。
- ストリーミングするメトリクス:すべてのメトリクスを転送するか、一部のメトリクスのみを転送するか、選択して下さい。
動作確認
転送先システムにて、データが受信できていることを確認して下さい。
データはBase64
エンコードされているため、デコード処理が必要です。デコードすると、以下のようなメトリクス情報が表示されることを確認して下さい。以下はサンプルのデータですが、EC2のメトリクスになります。
{"metric_stream_name":"CustomPartial-DUZS5w","account_id":"xxxxxxxxxxx","region":"us-west-2","namespace":"AWS/EC2","metric_name":"NetworkOut","dimensions":{"InstanceId":"xxxxxxxxxxx"},"timestamp":1737081600000,"value":{"max":1259261.0,"min":14083.0,"sum":1862702.0,"count":5.0},"unit":"Bytes"}
{"metric_stream_name":"CustomPartial-DUZS5w","account_id":"xxxxxxxxxxx","region":"us-west-2","namespace":"AWS/EC2","metric_name":"CPUCreditBalance","dimensions":{"InstanceId":"xxxxxxxxxxx"},"timestamp":1737081600000,"value":{"max":576.0,"min":576.0,"sum":576.0,"count":1.0},"unit":"Count"}
{"metric_stream_name":"CustomPartial-DUZS5w","account_id":"xxxxxxxxxxx","region":"us-west-2","namespace":"AWS/EC2","metric_name":"StatusCheckFailed","dimensions":{"InstanceId":"xxxxxxxxxxx"},"timestamp":1737081780000,"value":{"max":0.0,"min":0.0,"sum":0.0,"count":1.0},"unit":"Count"}
以上でセットアップは完了となります。
参考