Datadog × AWS を初めた話

[Ateam Lifestyle Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ateam-lifestyle)の4日目は、株式会社エイチームライフスタイル 名古屋開発部第１の（希少な）インフラエンジニア山口（@dayamaguchi1）が努めます。
Qiita初投稿ですが、特に緊張せず背伸びせず緩やかにやっていきます。

# はじめに

弊社では最近、監視ソリューションであるDatadogを利用し始めました。
スモールスタートで実機検証段階ではありますが、担当している私個人としてはもっと拡大していき、より強固な監視基盤を構築したいと思っています。
（反面、コストがいくらかかるか毎日ビクビクしてます。従量課金コワイ）
Getting Startと被りに被ってしまっているのですが、実際に導入した体験談を加味して提供しますので、この先始める方の踏み台にでもなれば幸いです。

## 先にまとめる

* DatadogのAWSインテグレーション使うと、ELBやRDSと言ったマネージドサービスは概ねタダで監視できるぞ！
* AWS Systems Manager使うと楽にDatadog 
* Agentがインストールできるよ！
* EC2使うならSSM Agent入れておくとあとで運用が楽になるぞ！


# Datadog導入前夜

## Zabbixの終焉（嘘ですまだ使ってます）

Datadog以前の監視基盤は基本的にZabbixオンリーでした。
またZabbix Serverはエイチームグループ全体で管理されており、ライフスタイルの一担当者にすぎない私では、サーバの設定変更やプラグイン追加、バージョンアップなどが気楽に行えない状態でした。
Zabbixのバージョンアップなども実施していますが、コンテナ化している環境も増えており、現在の環境により適した監視ソリューションを選択する必要がありました。

## AWSをもっと監視したい願望を叶える

Datadogは各種IaaSとの連携機能が豊富です。
弊社では主にAWSを活用しており、AWSはその高機能さから大量の情報を所有しています。CloudTrailやVPC Flow Logなどがその代表ですね、
ただ大量すぎてみるのも辛い。
とはいえ、AWSを活用していく上で、DatadogがもつAWSインテグレーション機能はとても魅力的に見えました。

またライフスタイルでは複数の事業が横断的に稼働していることもあり、事業ごとにAWS費用が幾ら発生しているか確認する必要があります。
そのため、AWSオーガナイゼーションを活用してAWSアカウント分離をしています。
ただしアカウント分離の弊害として、横断的に監視をすることが難しくなってしまいました。
そこで颯爽登場したのがDatadog。これで集約し、監視基盤を作ってやろうと野望を抱きました。
まだ抱いただけなので、俺の戦いはこれからだ。
山口の今後の展望にご期待ください。

# Datadog導入最前線

ついにAWSへ導入を進めます。

## AWSインテグレーションから始めよう
まずはDatadogのインテグレーション機能を使って、AWSアカウントを丸ごとDatadogと連携させます。
これは公式ドキュメントが手取り足取り丁寧なので、わざわざ解説はしません。
以下をご参照ください。
[Datadog Docs - Integragion - AWS](https://docs.datadoghq.com/integrations/amazon_web_services/?tab=allpermissions)

私が導入時に気にしたポイントだけ簡単にあげておきます。

* EC2を対象にすると１台あたりのコストが発生するので、Datadogが参照するEC2は特定のタグがあるものだけにする
    * AWS Integrationにある「Optionally limit resource collection」-「to hosts with tag:」で、Datadogが参照するEC2を選択することが可能
        * 弊社では「Tag:Datadog,Value:on」となっているEC2のみ対象になるように設定
    * タグの設定をする場合は、タグエディターを使うとまとめて設定できるので、活用しよう
* ELB、RDSなどのマネージドサービスを監視するのはタダ！AWSインテグレーションしない選択肢はないぞ
    * lambdaとかお金かかるのもあるから、pricing見たりDatadog営業の方に相談してね

## Datadog Agent Install!!

EC2の（というかLinuxOSの）詳細な情報を取得するためにはDatadogAgentを導入するのが最適です。
導入しないとCloudWatchのEC2メトリクスしか取得できないので、あまり旨みがありません。
メモリのメトリクス見たいですよね？私は見たい。
どうでEC2を対象にしたら１台あたりのコストが発生するので、DatadogAgentを入れてしまいましょう。

### EC2にDatadogAgentをInstallする

LinuxOSへのDatadogAfgent InstallはOSにログインしてコマンド入力一発で完了します。
環境固有の値はマスクしますが、LinuxOSであれば以下のようなコマンドになります。

```
DD_API_KEY=**************** bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)"
```
コマンドの内容はDatadogのコンソールに記載されているので、そちらを参照ください。

ただコマンド１つとはいえ、サーバ台数が複数台に渡ると大変です。
1回1分の作業としても、１００台あればすごい辛いです。
そこで登場するのがAWS Systems Managerです。

### Systems ManagerのRun Commandを活用

Systems ManagerはAWSを管理する上で多数の機能を保持していますが、今回はRun Commandを使います。
***　※Systems Managerを利用するには対象EC2にSSM Agentがインストールしてあることが前提です。Systems Managerは超有能なのでSSM Agentは積極的に導入しましょう！！！！！***

監視対象のEC2には「Datadog:on」のタグが設定されているので、以下の流れで実施しました。
（簡単なのでちゃんと検証してください。いきなり本番実行とかやめようね。）

1. Systems ManagerコンソールからRun Command（コマンドの実行）を選択 
2. コマンドドキュメントの中から、AWS-RunShellScriptを選択
3. コマンドパラメータに、Datadog Agent Install用のコマンドを入力（細かい条件分岐なんて考えない）
4. ターゲットに「Specify instance tags」を選択し、「Datadog:on」というタグを対象にする
5. Run Command実行
6. Run Commandの実行が正常終了することを確認
7. 少し待つと、Datadog Console上にEC2が追加されているに違いない未来が待っている

とっても簡単。ありがとうSystems Manager。

# Datadog導入期の終わり

DatadogAgentを入れただけでできることは、OSの情報を吸い上げることだけです。
M/Wの情報が必要な場合は、個別でDatadogのインテグレーション機能を活用してDatadog Agentのconfを設定する必要があります。
NginxやApacheと言ったWebサーバを含め、それぞれのM/Wごとにインテグレーション方法が異なるため、この記事では割愛させていただきます。
私もこれからなので、そんな装備では大丈夫ではない状態です。
Datadog設定期がこれから始まるのです。

# 今後の展望

今後やりたいことは以下です。思いつきで書いたのでもっとたくさんあると思います。
とにかくDatadog見て今まで見てこれなかった（見てこなかった）データを可視化していきたいですね。

* 利用しているM/Wのメトリクスを取得する
* 各種モニターを整備し、サーバダウン時に検知する仕組みを導入
* syntheticsを活用した簡単なE2Eテスト
* Networkを利用したネットワーク経路の把握（まだ出たての機能なのであまり充実していません。これからに期待）
* etc...


# さいごに

Ateam Lifestyle Advent Calendar 2019 の 5日目は、@yuko1658 がお送りします。弊社の機械学習プロフェッショナルです！今度お酒飲みに行きましょう。（私信）

そんな"挑戦"を大事にするエイチームグループでは、一緒に働けるチャレンジ精神旺盛な仲間を募集しています。興味を持たれた方はぜひエイチームグループ採用サイトを御覧ください。
https://www.a-tm.co.jp/recruit/