そーだいなるらくがき帳

そーだいが自由気侭に更新します。

Amazon CloudFrontの監視 ~ mackerel-plugin-aws-cloudfrontを読み解く

この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の21日目です。

qiita.com

soudai.hatenablog.com

それでは21日目は mackerel-plugin-aws-cloudfront です。

※2018/12/21 追記 MackerelのAWSインテグレーションにCloudFrontも追加されています。

mackerel-plugin-aws-cloudfrontはAWSが提供する Amazon CloudFront 専用プラグインです。

github.com

インストールと設定手順

Amazon CloudFrontプラグインCloudWatch と同等の内容を可視化してくれるプラグインです。

プラグインプラグイン集として提供しているパッケージの mackerel-agent-plugins に含まれています。 インストール先は mackerel-plugin-aws-cloudfront です。

次にMackerelのプラグインはコマンドですので実行する事ができます。

※下記は実行する環境はEC2でCloudWatchにアクセスできるようにIAMロールを割り当てしています。

-- /usr/bin はPATHが通っているので省略出来ます
$ mackerel-plugin-aws-cloudfront -identifier=<distribution id>
cloudfront.Transfer.BytesDownloaded    15526    1513831522
cloudfront.Transfer.BytesUploaded    0    1513831522
cloudfront.ErrorRate.4xxErrorRate    0    1513831522
cloudfront.ErrorRate.5xxErrorRate    0    1513831522
cloudfront.Requests.Requests    3    1513831522

設定ファイルであるmackerel-agent.confは標準では /etc/mackerel-agent/mackerel-agent.conf にインストールされます。 confの設定などはREADME.mdにしっかり纏まっているのでご参考ください。

README.md

以上を行った上でmackerel-agentを再起動してください。

見れるメトリック

各グラフ定義ごとに説明します。 それでは各グラフ定義ごとに説明します。 また表に出てくるdiffとはプラグイン上で差分値計算をするかどうかです。 となっている項目はプラグインで前回の実行時の値と差分値計算して出力しています。

CloudFront Requests

メトリック名(ラベル) プラグインの出力名 diff 説明
Requests cloudfront.Requests.Requests  リクエストの総数

CloudFrontの指定したDistributionに対するリクエスト数です。 このリクエストには200、404の全てのHTTPレスポンスが含まれます。 勿論GET、HEAD、POST などのメソッドも全てカウントの対象です。

CloudFront Transfer

メトリック名(ラベル) プラグインの出力名 diff 説明
Download cloudfront.Transfer.BytesDownloaded  ダウンロードしたバイト数
Upload cloudfront.Transfer.BytesUploaded  アップロードしたバイト数

CloudFrontの指定したDistributionに対する転送状況です。 リクエストに対してどれくらい実際に転送量が発生しているか比較するようにしましょう。

CloudFront ErrorRate

メトリック名(ラベル) プラグインの出力名 diff 説明
4xx cloudfront.ErrorRate.4xxErrorRate  HTTP ステータスコード4xx エラーであったリクエスト数
5xx cloudfront.ErrorRate.5xxErrorRate  HTTP ステータスコード5xx エラーであったリクエスト数

こちらはリクエストの中でどれくらい失敗してるかを表しています。 失敗する理由は色々ありますが勿論ERRORはない方が良いので定期的に確認しましょう。 リクエストを捌いているつもりでも実はうまくイメージが取得できていなかった!ってこともありえます。

CloudFrontを一つのホストとして監視したい

プラグインはどこかで実行する必要があるのでEC2で実行するとCloudFrontのメトリックがEC2に紐付いてしまいます。 こちら運用する際に本来のロールと変わってしまうのでわかりにくい問題があります。 そこでmkrコマンドでホストを作成し、そちらにカスタムメトリックを送る方法をご紹介します。 この方法はCloudFront以外のPaaSなどでも同じように使うことができます。

  • mkrをインストールする
    公式ドキュメントをご活用ください mackerel.io

  • ホストを作成する
    ホストの作成方法はmkr create --customIdentifier=<任意なユニークな文字列> <ホスト名>としましょう。 実際にはこのような感じになります。

# mkr create --customIdentifier=test123 demo
   created 3c4fQPZ8ktN

3c4fQPZ8ktN の部分はhost idです。実際に詳細を見てみましょう。

# mkr hosts -v -n=demo
[
    {
        "id": "3c4fQPZ8ktN",
        "name": "demo",
        "customIdentifier": "test123",
        "type": "unknown",
        "status": "working",
        "createdAt": 1513837649,
        "meta": {
            "cloud": {}
        }
    }
]

作られていますね。 今回は指定していませんがホストの作成時に --service--role を指定することもできます。

  • メトリックの投稿
    いよいよメトリックの投稿です。 プラグインを追加しているEC2のmackerel-agent.confに下記のように追加しましょう。
[plugin.metrics.cloudfront]
command = "mackerel-plugin-aws-cloudfront -identifier=<distribution id>"
custom_identifier = "<先程指定したcustom_identifier>"

今回の例ですと custom_identifier=test123 になります。 これで新たに作成したホストのカスタムメトリックとして送られるようになります。

※新たに作成したホストも当然課金の対象ですのでご注意ください!!

CloudFrontのdistributionが複数監視したい

例えばCloudFrontのホストを作成してカスタムメトリックを投稿したとして、distributionが有った場合に複数のホストを作成するのはコストがかかってしまいます。 とは言え、同じホストに送ってしまうとグラフがぶつかってしまう…。 そんな時は metric-key-prefix を指定するようにしましょう! するとグラフがそれぞれ別にすることができます。 CloudFrontは現状ではAWSインテグレーションしていないのですが可視化されると非常に便利ですのでこの機会に是非試してみてください。

21日目はAWSが提供する Amazon CloudFront プラグインについての説明でした。 PaaSの監視はMackerelのAPIを使うともっと色んな方法がある楽しい部分の一つです。 この機会にみなさんも是非色々試してみてください。

それでは次回は次世代WebServerとして注目を浴びているにH2Oの監視です。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!

22日目 mackerel-plugin-h2o