DatadogでAWS利用料金の推移を可視化する


背景

Excelにコピペするのは嫌でござる!LambdaもTerraformも書きとうない!Datadogならポチポチだけでできるはずだ!

準備が5つ必要です

ポチポチだけでイケた。AWSとDatadogすごい。神。

準備1: AWSでBudgetを作成する

AWS請求ダッシュボードにある「Budget」で、雑でも何でもいいので、「予算を作成」してください。もうあるなら、この準備は飛ばして大丈夫です。

作成が必要な理由は、Datadogは、Budget経由でBillingのデータを吸い出しているため、Budgetがとにかく存在してないと始まらないのです。

ちなみに予算を作ったところで、予算を超えると何も動かなくなるとか、予算の金額を毎月必ず請求されるとか、そんなことは一切ないです。AWSからの請求に対して、予算という枠組みで分析したり通知させるための仕組みです。

予算はこんな感じで作成しました。ちゃんと活用してる方からは石を投げられるんじゃなかろうか....

  • 予算タイプは「コスト予算」
    • 名前は「月別AWS予算」
    • 間隔は「月別」
    • 予算は、前月実績に+20%くらいの金額をテキトーに入れておきます
    • 定期予算
    • フィルタリングは無し。include all。
    • 非ブレンドコスト
    • 含められる関連コストは、すべてチェック
    • アラートもテキトーに組む

準備2: AWSでIAM権限を付与する

IAM権限 budgets:ViewBudget を、Datadogのロールに付与します。もう付与してあるなら、この準備は不要です。DatadogのAWSインテグレーションを、以下マニュアルの「All Permissions」で提示されるIAM権限で設定してれば含まれてますが、改めてご確認ください。

準備3: Billingの設定で「請求アラートを受け取る」にチェックして保存

これをチェックして保存すると、バージニア北部リージョンのCloudWatchに、Billingのメトリクスとして EstimatedChargesが作られて、Datadogで aws.billing.estimated_charges として、利用サービス毎の料金を取れるようになります。

準備4: DatadogでAWS Billingインテグレーションを有効化する

Datadogがマニュアルを用意してくれてます。

有効化後、これを書いてる今も Broken ですが、AWSからデータを取れてるので気にしなくていいです。

準備5: 一晩くらい待つ

請求関連のメトリクスは更新頻度が少なく、日に数回らしいです。ここまでの準備しても、Datadogでまとまった量のデータが最初に見えるようになるのは、一晩くらい経ってからです。焦らず待ちましょう。

Datadogで可視化する

これで可視化できます。AWSから吸い出してるメトリクスは4つですが、「by」で切り口にできる、何ていうんですかあれは、あれがあるので、めちゃめちゃ面倒くさい願望をぶつけなければ、大体なんとかなる気がします。

  • aws.billing.budget_limit
  • aws.billing.actual_spend
  • aws.billing.forecasted_spend
  • aws.billing.estimated_charges

利用料金の推移のグラフ

こんなグラフが作れます。積み上がってるのは費目で、EC2, RDS, DataTransfer,,,毎に出ます。メトリクスの性質として、月末締めで一旦ゼロになります。

グラフのJSONはこのように。aws.billing.estimated_charges を servicename 毎にやるのがミソですね。ソートしてほしい。

{
  "viz": "timeseries",
  "requests": [
    {
      "q": "sum:aws.billing.budget_limit{*}",
      "type": "line",
      "style": {
        "palette": "dog_classic",
        "type": "dashed",
        "width": "normal"
      },
      "aggregator": "avg",
      "conditional_formats": []
    },
    {
      "q": "sum:aws.billing.actual_spend{*}",
      "type": "line",
      "style": {
        "palette": "dog_classic",
        "type": "dashed",
        "width": "normal"
      }
    },
    {
      "q": "sum:aws.billing.forecasted_spend{*}",
      "type": "line",
      "style": {
        "palette": "dog_classic",
        "type": "dashed",
        "width": "normal"
      }
    },
    {
      "q": "sum:aws.billing.estimated_charges{*} by {servicename}",
      "type": "area",
      "style": {
        "palette": "cool",
        "type": "solid",
        "width": "normal"
      }
    }
  ],
  "autoscale": true
}

利用料金 Top 10

aws.billing.estimated_charges を servicename 毎に、こちらは利用料金の多い順にソートされてます。注意として、ダッシュボードの表示期間が月をまたいでる場合、先月と今月の金額が混ざります。select rangeでイイ感じに調整して見てください。

JSONはこのように。

{
  "viz": "toplist",
  "requests": [
    {
      "q": "top(sum:aws.billing.estimated_charges{*} by {servicename}, 10, 'mean', 'desc')",
      "type": null,
      "style": {
        "palette": "dog_classic",
        "type": "solid",
        "width": "normal"
      },
      "conditional_formats": []
    }
  ]
}

さらに凝った可視化をするには

AWS側の予算で分析軸を作れるのと、Datadog側のダッシュボードやグラフの仕組みで可視化できるので、物事に限度はありますが頑張れるのではないでしょうか。

Datadogで監視&通知する

ところでDatadogにメトリクスが来ているので、Datadogで監視&通知できます。AWS Budgetの仕組みでも監視と通知ができます。が、メトリクスの動きに対して、DatadogではAnomary Detectionなど凝った監視ができるので、活用するといい、はずだ!