Datadog を使って AWS のコストを先月と比較する

Posted on

AWS のコストを分析するには Cost Explorer が便利ですが、ビジュアライズ機能は少し物足りないです。例えばサービスごとの月別コストは簡単に出せますが、月の途中で先月を超えそうか予測するのは難しいです。

そこで Datadog を使って AWS のコストを先月と比較できるようにしました。次の画像はその一部ですが、Compute, Database, Storage, Network といった単位でグルーピングしてダッシュボードを作っています。

AWS billing dashboard

このダッシュボードを見れば、どのサービスのコストが先月を超えそうかひと目でわかります。

先月と比較するグラフを作る

Datadog でコストを監視するには AWS Billing の integration を有効にします。公式ドキュメントの AWS Billing のページに詳しくまとまっているので、ここでは省略します。

先月と比較するグラフを作るには timeshift() 関数で 1 か月前の秒数を指定します。月によって日数が違うので month_before() だときれいに重なりません(month_before() だと 28 日単位になる)。

Edit graph

JSON で定義するとこんな感じです。

{
    "viz": "timeseries",
    "requests": [
        {
            "formulas": [
                {
                    "formula": "query1"
                }
            ],
            "queries": [
                {
                    "query": "sum:aws.billing.estimated_charges{servicename:amazonec2}",
                    "data_source": "metrics",
                    "name": "query1"
                }
            ],
            "response_format": "timeseries",
            "type": "line",
            "style": {
                "palette": "dog_classic",
                "type": "solid",
                "width": "normal"
            }
        },
        {
            "formulas": [
                {
                    "formula": "timeshift(query1, -2678400)"
                }
            ],
            "queries": [
                {
                    "query": "sum:aws.billing.estimated_charges{servicename:amazonec2}",
                    "data_source": "metrics",
                    "name": "query1"
                }
            ],
            "response_format": "timeseries",
            "type": "line",
            "style": {
                "palette": "dog_classic",
                "type": "dotted",
                "width": "normal"
            },
            "on_right_yaxis": false
        }
    ],
    "yaxis": {
        "include_zero": true,
        "max": "auto",
        "scale": "linear",
        "min": "auto",
        "label": ""
    },
    "markers": []
}

あとは servicename:amazonec2 のところを変えて必要なグラフを作っていきます。コスト比で上位 10 サービスくらいを見ていれば十分でしょう。

まとめ

これまで毎月のコストが予算を超えそうかどうかは勘に頼っていましたが、このダッシュボードのおかげで月の途中でも早く気づけるようになりました。クエリを工夫すればさまざまな切り口でビジュアライズできるので、もっと活用してみようと思います。