Datadogの請求書に怯えないためにするべきこと

## はじめに
サーバーリソースや、各種KPIのモニタリングツールとして利用されるDatadog。導入するにあたって事前に金額を決められるわけではないため、導入に二の足を踏まれている方も多いのではないでしょうか？ 本記事では、そのDatadogの利用に際して、安心して請求日を迎えるためのTIPSについて記載させて頂きます。

## Datadogとは
DatadogはSaaS形式のモニタリングサービスです。サーバーリソースの監視だけでなく、KPIのモニタリングにもDatadogは利用されています。
KPIのモニタリングによって、リアルタイムに事業状況をつかむことはもちろん、Sentryで現れないバグの検知も可能となります。

さて、Datadogの請求日を安心に迎えるためのTIPSについて説明させていただく前に、Datadogの課金体系について、簡単に確認してみましょう。

## Datadogの課金体系について
Datadogの基本的な料金は1月あたり **$18/host** です。ただし、年間契約で台数を設定することもでき、その場合だと少し割安の **$15/host** になります。年間契約をする場合は、Datadogのサポートに直接連絡をしましょう。

Datadogには時間課金も存在します。これは、事前に基本台数を連絡しておくことで、申請した台数を超えた分は時間課金にすることができるというオプションです。AutoScaleを利用しているサービスでは必要となるでしょう。なお、基本台数の申請は設定回数は年２回とありますが、詳しくはサポートに直接連絡して頂ければと思います。

またAWSについては、EC2のみ課金対象となります。RDSやElastiCache、ELBなどAWSの各種サービスを、今のところ全て **無料で** 監視することができます。AWSのモニタリングはDatadogのAWS integrationにIAMを登録するだけで可能です。監視対象のホストはタグで制限を加えることができますので、その設定だけは **絶対に忘れないでください。**

なお、GCPもほぼ同じ仕組みです。

## Datadog課金の注意点について
さて、少し前に説明させて頂いたように、Datadogの課金はホスト数に依存しています。そして、監視するホスト数は制限を設けることができません。

よって、誤ってDatadogの監視設定をしてしまったときに、意図しない金額の請求がされることがあります。とはいえ、人間はよく間違うものなので、「慎重に設定しようぜ！」 ではなく、間違ったら気付ける仕組みを準備することが必要になります。

## Datadog利用状況の把握について

監視しているホストの把握ですが、長期的にはDashboardで、短期的にはmonitorを使って実現します。

### 監視ホスト数を見るDashboard作成
この件については、既に[公式から対処方法](https://help.datadoghq.com/hc/en-us/articles/209061426)を提案されています。以下に、その方法について簡単に記載します。

まず、api_keyとapplication_keyは下記リンクから取ってきましょう。
https://app.datadoghq.com/account/settings#api

その後、[shell script](https://gist.githubusercontent.com/MisterRayCo/21e1af9b6cf93bb44a48/raw/c2dcfcf836d0af77daa5c4fb1ec18da175569d7e/agentcountscreenboard.sh)を実行します。これにより、下記のような screen boardを作られます。

<img width="781" alt="c2105312-83fa-4bce-08b2-c6d09bf675b6.png" src="https://qiita-image-store.s3.amazonaws.com/0/23606/e4025fac-31aa-f0cb-c642-f7093a3fa368.png">

このDashboardによって、EC2インスタンスの監視数や、全体のAgentの監視数を確認することができるようになります。上記ダッシュボードは、iframeにして共有することも可能です。なお、GCPの台数を計測したい場合は、shell scriptの``count:aws.ec2.host_ok{*}.rollup(max,3600)``部分をGCPで利用されているmetricsに合わせて、下記のように変更する必要があります。``count:gcp.gce.instance.is_running``

### 監視数の変動をslackに通知する
さて、監視しているホスト数について、Dashboardで確認ができるようになりました。しかしながら、すぐに気がつくためには、もう少し工夫が必要となります。ここでは metrics monitorを使って、問題が起きてから数分以内に検知できる仕組みを紹介します。

設定は簡単です。New Monitor => Metricを選択し、sourceタブを押して下の設定を貼り付けます。

```
count:system.cpu.user{*}.rollup(max,3600)
```

その後、Threshold Alertを選び、通知する際のしきい値を設定します。すると、通知の際は下記のように表示されます。

<img width="496" alt="2bf948af-42e5-abf9-3df3-6eeed8ed979a.png" src="https://qiita-image-store.s3.amazonaws.com/0/23606/061b4467-485c-4b5c-ea2d-6a560edad6d8.png">


### 監視ホストの名前をslackに通知する
さて、これでホスト数の増加は取れるようになりました。次は、監視対象として追加されたホストの名前が知りたくならないでしょうか？ ここでは、追加されたホストの名前を取得する方法について説明します。

設定は、New Monitor => Eventを選択し、イベントの中でアラートとして使いたいものを、キーワードで選択するだけです。

<img width="984" alt="bd0d961b-f338-2f6d-a639-919992b0b4b4 (1).png" src="https://qiita-image-store.s3.amazonaws.com/0/23606/f6106cf0-3492-f2de-1c92-dc1090f8a7be.png">

その後、statusが下記のようになっていたら完了です！

```
events('priority:all "Datadog agent started"').rollup('count').last('1m') >= 1
```

通知は以下のようにされます。

<img width="646" alt="618a7fb9-60fa-eeb4-d6b2-ac9477acbf9f.png" src="https://qiita-image-store.s3.amazonaws.com/0/23606/1a6d93ab-e08f-b1fe-8437-af96d625d5dd.png">

## まとめ
今回はDatadogを使う上で、ホスト数の増減を検知するための仕組みを書いてみました。これによって、意図しない請求が発生するリスクを避けることができるようになると思います。このような仕組みを用意しておくことで、安心して今後もDatadogを利用することができるのではないでしょうか。

もっとスマートな方法あるぜ！とかありましたら、教えて頂ければ幸いっす :pray:


## 参考URL
https://docs.datadoghq.com/integrations/gcp/
http://qiita.com/jhotta/items/c5410c9b3a739e04f1f5
http://docs.datadoghq.com/ja/guides/billing/#section
https://help.datadoghq.com/hc/en-us/articles/209061426