AWSの各種ログをDatadogに入れてみて嬉しかったこと・うまくいかなかったこと

今年の9月末に行われたServerlessconf Tokyoに行ってきたのですが、
そこで猫も杓子もDatadogというくらい、Serverlessの監視系の話では出てきたので、
実際どんなものなのか触ってみました。

## Datadogとは

> [Datadog](https://www.datadoghq.com/)
> Modern monitoring & analytics
> See inside any stack, any app, at any scale, anywhere.

モニタリングとログ解析などの機能を持ったツールです。

## Datadog使ってみて嬉しかったこと

### Integrationが無料

[Instantly see into all your systems, apps, and services \| Datadog](https://www.datadoghq.com/product/integrations/)

これ無料でできちゃっていいんだというくらい、Integrationいくらでもできます。
実際試したのはAWS Integrationだけですが、Free Planで問題なく稼働しています。

ただしAWSからデータを抜き出すのにはもちろんお金がかかるので、完全無料とはいきません。
![AWS-Cost.png](https://qiita-image-store.s3.amazonaws.com/0/135041/966ec973-4e6a-42ef-ce18-ee809af61075.png)

Datadog関係以外の費用も混ざってますので、金額はなんとなくで見てください。
いろいろ試行錯誤しているときに、CloudTrailの2つ目を作ったのでTrailの費用が発生していますが、AWS Integrationだけであれば、ほとんどCloudWatchとLambdaとS3が対象になると思います。

これ見てわかるようにCloudWatch高めです。
CloudFront/ELB/VPC Flow logsなどS3に出力できるものは、S3に出力してからLambdaでLog Managementに上げるのがいいと思います。

### Dashboardがデフォルトでたくさんある

[Real time interactive dashboards \| Datadog](https://www.datadoghq.com/dashboarding/)

![Datadog-Dashboards.png](https://qiita-image-store.s3.amazonaws.com/0/135041/65550357-f782-922d-470f-9a713b5937f9.png)

こういうのすごく嬉しい、いちからダッシュボードだったりテンプレート作るの意外と大変なので。


### 初期設定CloudFormationがある

これがあるおかげでデータ投入で詰まることはあんまりなかったです。
WEBにもたくさん情報ありますし。

* [dd\-aws\-lambda\-functions/Log at master · DataDog/dd\-aws\-lambda\-functions](https://github.com/DataDog/dd-aws-lambda-functions/tree/master/Log)
* [dd\-aws\-lambda\-functions/vpc\_flow\_log\_monitoring at master · DataDog/dd\-aws\-lambda\-functions](https://github.com/DataDog/dd-aws-lambda-functions/tree/master/vpc_flow_log_monitoring)
* [dd\-aws\-lambda\-functions/rds\_enhanced\_monitoring at master · DataDog/dd\-aws\-lambda\-functions](https://github.com/DataDog/dd-aws-lambda-functions/tree/master/rds_enhanced_monitoring)

AWS Integration用のRoleを作るのもめんどうという人のためにCFnも置いておきます。
CloudTrail対応版になってます。

* https://gist.github.com/14kw/8ef8a2dd02a30035f9e5db5a6358a101

### Log ManagementのデフォルトFilterがたくさんある

[Datadog log management & analytics \| Datadog](https://www.datadoghq.com/log-management/)

![Datadog-LogExplorer.png](https://qiita-image-store.s3.amazonaws.com/0/135041/0310a4df-92c2-5ac5-a0a1-7406f9702b58.png)

上記のLambdaを使ってCloudFront/ELB/CloudTrailあたりを送ったあとの状態です。
長すぎてキャプチャできませんでしたが、私の設定上では29個ありました。

### AWS Marketplaceで買える

[AWS Marketplace: Datadog](https://aws.amazon.com/marketplace/seller-profile?id=e56c35d0-c5d4-4dac-91d5-ebf57fef6e5c)

会社で使う場合は、Marketplaceから買えるといろいろと都合がいい。

Datadog本家とちょっとプランが違うところがあるので注意が必要。
実際に購入して使ったわけではないので、以下は推測が混じります。

* `Datadog Pro|Enterprise`
    * Infrastracture/APMが月・年単位で1ホストから定額購入できる
    * 定額購入したホスト以上を使った場合は時間単位の従量課金
    * Log ManagementのほうをSubscribeしなくてもログ送れば使える（当然費用はかかる）
* `Datadog Pro|Enterprise (Container Agent)`
    * 上記プランの1ホストごとに10|20Container立ち上げられる
        * Agent入りのコンテナかAMIが提供される？
* `Datadog Pro (Pay-As-You-Go)`
    * Infrastracture/APMが時間単位の従量課金で利用できる
    * 1つ目のものと違って定額購入はできない（しなくていいとも言える）
* `Datadog Pro - Pay-As-You-Go (Container Agent)`
    * 上記プランの1ホストごとに10|20Container立ち上げられる
* `Datadog Log Management`
    * 15-day retentionで利用できる
    * 月単位で100万ログごとの従量課金
    * Unitsは期間を表しているそうです
        * 1monthを3Units購入すれば3ヶ月、12monthsを2Units購入すれば24ヶ月
        * 複数Unitsで買えば請求が一気にくる仕様かな？
    * SubscribeしなくてもInfrastracture・APMのAgent入れれば使える（当然費用はかかる）

## Datadogを使ってみてうまくいかなかったこと

### 請求は一括にしつつ内部的には分けたい

[Configuring Teams & Organizations with Multiple Accounts](https://docs.datadoghq.com/ja/guides/multiaccountorg/)

複数DatadogアカウントをまとめるMulti-Account Organizationsという機能を使います。
これで子アカウントをたくさん作れるし、請求を一括にすることができます。

まとめるのはできるのですが、AWSみたいに各アカウントの請求額は出してくれないみたいです。一括された費用しか出てこない（要望あげよう）。
各アカウントの請求額が見たかった場合は、各アカウントの利用量を見て自分で計算する必要があるとのこと。

### 親アカウントから子アカウントのデータを見たい

Multi-Account Organizationsを使えばいけるかと思ったんですが、できないみたいです。残念。

### 全AWSアカウントのCloudTrailログを集計したかったが上限に引っかかった

全AWSアカウントのCloudTrailやVPC Flow Logsが入ったアカウントとDatadogを繋げようとしたが、上限に引っかかりました。
`Too many accounts to process in this bucket`

![CloudTrailIntegrationError.png](https://qiita-image-store.s3.amazonaws.com/0/135041/b02c8d98-0716-b489-8c54-291d64e01237.png)

> Could you check if there is indeed over 500 streams coming from your accounts? As a reminder a stream is being defined as a unique combination of an account + region, so if you have X accounts, and each of them are bound to Y regions, then the number of streams would X*Y.

サポートに問い合わせたら、500 streamsを超えるBucketを指定した場合にエラーになるとのこと。
CloudTrailは全アカウントの全リージョンから取っているので500は軽く超えていました。

現在AWSは19リージョンあるため、全リージョンのCloudTrailを取っていた場合は `26アカウント` がDatadogから読み取れる上限となります。

Integrationではどうにもならなそうでしたので、いまはLog ManagementにCloudTrailログを上げています。


## Elastic Cloudも使ってみた

Elasticsearch+Kibanaでいいんじゃない？と心がささやくので、こちらも使ってみました。
監視機能を持ったX-Packがほしかったので、実際に使ったのはElastic Cloud。

機能的にはDatadogと同じことはもちろんできました。
ただ自分で用意しないといけない部分が思った以上に多いです。
Elasticsearch+Kibanaに慣れていないとダッシュボード作る前に挫折しそう。

* DatadogのLog Managementにもっと大量にデータを入れたい
* DatadogのLog Managementでもっと長い期間のデータを集計したい
* Kibana大好き

という人以外は、Datadogのほうがいいと私は思います。

## 総評

困ったところはありましたが、どれも全AWSアカウントのログを扱おうとしたところなので、単一AWSアカウントの集計・監視・可視化ツールとしては、もうDatadogでいいじゃないかとなるくらいには良かったです。

この機能群でこの金額はコスパいいし、それなりに使えるようになるまでが早い。
CloudWatchで監視設定作ったり、KibanaでDashboard作るよりも、Datadogは学習難度がかなり低く感じられました。

無料版でも結構ガッツリ使えるので、みんなDatadog使ってみましょう！