オートスケールするEC2インスタンスをDatadogで監視する

# なぜかくのか

Auto ScaleするAWS EC2インスタンスの監視運用をするにあたって
気になることが多々あるかと思います。

 - スケールアウトするたびに増えたサーバーの監視設定はしたくない
 - スケールインするたびに死活監視のアラートが飛んできたらつらい
 - スケールアウトしたホストの数全部課金されるようだときびしい

Datadogでは上記の問題たちを特に気にしなくて済んでとてもよかったです。
という覚書です。


# かいつまんで、Datadogのいいところ

### スケールアウト都度の監視設定追加は不要
Dataodogの監視アラート設定はホスト単位ではなく
監視対象のサーバに付与したタグを使ってグルーピングした単位で行うので、
監視対象のインスタンスに適切なタグの設定さえされていれば
サーバが増えようとも都度の監視設定は不要です。

### スケールインで消えたサーバのアラートは自動ミュート
Integrationを設定したAWSアカウント内のスケールイベント発生状況を検知し、
スケールインにより削除されたサーバは自動でアラートをミュートしてくれます。
なので、いちいち死活監視のアラートを気にすることはありません。

（そして一定時間経過後、それまでのモニタリングデータは残したまま管理ホスト一覧から退場もしてくれてお掃除要らず）

 
### 課金について

サーバが停止し、メトリクスの送信がなくなった時点で課金対象からは除外されるようです。
また、スケールアウト→スケールインを繰り返してサーバの延べ台数が増えてしまった場合も
課金対象は起動したサーバ台数の合計ではなく、月内で監視対象サーバ数が最大だったタイミングの台数です。

汚い図で恐縮ですがこんな感じ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174283/1befbbf7-f3d7-e7db-3791-52a468dc6290.png)



https://docs.datadoghq.com/ja/faq/
> 課金の判定基準は、メトリクスデータをDatadog側で受信しているかどうかです。

https://help.datadoghq.com/hc/en-us/articles/216099263-How-are-my-bills-calculated-each-month-
> The billable count of hosts and containers is calculated at the end of the month using the maximum count (high-water mark) of the lower 99 percent of usage for those hours. 

# 作業概要メモ

各項目、具体的な実装手順は説明せず公式ドキュメントを貼るのみにとどめます。

## AutoScalingグループを作成

![スクリーンショット 2018-11-17 21.20.10.png](https://qiita-image-store.s3.amazonaws.com/0/174283/24f0e5ad-f943-3db9-619b-0082a089cd2d.png)

- あらかじめAMIにはDatadogのAgentを仕込んでおく
  - [AMI作成の公式ドキュメント](https://docs.aws.amazon.com/ja_jp/toolkit-for-visual-studio/latest/user-guide/tkv-create-ami-from-instance.html)
  - [AuroScalingグループ作成の公式チュートリアル](https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/as-register-lbs-with-asg.html)
  - [Datadog Agentインストール手順](https://app.datadoghq.com/account/settings#agent) 
      - 要ログインのためスクショを添付。コマンド一発でインストール可能
      ![image.png](https://qiita-image-store.s3.amazonaws.com/0/174283/e27a6a55-61b4-1e8c-cbf5-eda083ae1044.png)


- 後述の監視設定のため、AutoScalingグループのタグ設定が必要です
ex )
![スクリーンショット 2018-11-18 23.29.08.png](https://qiita-image-store.s3.amazonaws.com/0/174283/6086e544-c8c8-a672-66c3-70f16772c64a.png)

## AWS Integration設定

AutoScaleイベントの発生を検知するため、
以下手順でDatadogにAWS Integrationを設定します。
https://docs.datadoghq.com/integrations/amazon_web_services/#installation

## Monitoring(監視アラート)設定

DatadogのMonitoring設定は、ホストごとではなくタグを使ってグルーピングします。
ここで指定したタグと同じタグさえついていれば、
スケールアウトでLaunchされた新規ホストも自動で監視対象に組み込まれます。

例えば死活監視の設定画面は以下のような感じです。
（赤枠部分が対象ホストの指定）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174283/b4fe8cf1-d402-4593-88fc-2ea3ec64c792.png)


# オートスケールイベントを起こしてみる

ここまで設定したら、動作確認をします。

サーバに負荷をかけてスケールアウトさせてみます。
（初期状態のスクショを撮り忘れました…）

## スケールアウトした結果

- インスタンスが2台に増えました(Launchしたサーバは `i-052e6ba9b9f614f04`)
![スクリーンショット 2018-11-20 0.45.44.png](https://qiita-image-store.s3.amazonaws.com/0/174283/68df234b-105b-7dd2-1dbd-b13c4b783c9a.png)

- Datadogのイベントストリーム画面にて新たなインスタンスがLaunchされたことを確認できます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174283/e7f84886-323a-41de-85c0-0a65154f84d0.png)

- Datadog Monitor対象も自動で2台に増えました！手動での監視設定追加はいりません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174283/d94b8ac8-c5a8-b3d5-f21e-6abb6b4d4a0a.png)

## スケールインした結果

今度は負荷をかけるのをやめて、サーバ台数を縮小させます。

- インスタンスがスケールインしました（`i-0db34e11110846f54` がTerminate）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174283/d5c99b29-aa27-c8fc-858c-e047d761c67a.png)

- Datadogのイベントストリーム画面にてインスタンスのTerminateを確認できます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174283/bd755db8-70be-b423-092d-5d1502c4d7db.png)

- 対象サーバがアラート状態になりますが、自動でミュートされるので通知は飛びません
    - 赤がアラート、網掛けがミュートを表します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174283/046f3514-524a-041f-e98f-8d526ab2d8cb.png)


# まとめ

この辺りの自動化は何かしら工夫すればできるだろうとは思っていましたが、
デフォルトでここまでやってくれると思いませんでした。Datadog好き！！