Datadog で RDS Postgresql をモニタリングする


## はじめに
Datadog で RDS をモニタリングしようと思った場合は、

* CloudWatch (AWS) 連携
* Postgresql 連携

が利用できる。

また、Sensu で監視したメトリクスを Datadog に送ることも可能。
[sensu と datadog を連携してちょっとリッチなメトリクスの可視化 - inokappa](http://qiita.com/inokappa/items/f2c51ee0401d4d6dd6e6) に丁寧に書かれてる。

## CloudWatch 連携
### Datadog 用 IAM ユーザを用意する
AWS 連携を有効にするには予め read-only の datadog 用 IAM ユーザを作成しておく。

* [必要な権限](http://docs.datadoghq.com/integrations/aws/#cloudwatch)

### 連携を ON にする
Integration タブから

![Setup___Datadog.png](https://qiita-image-store.s3.amazonaws.com/0/20833/45eb5eba-1183-2384-4473-961abc209401.png "Setup___Datadog.png")


"Available" 一覧から "Amazon Web Services" を選択し、"Install Integration" 
その際に、 datadog 用の Access Key ID と Secret Access Key を入力する。

オプションで連携する AWS のサービスやタグで対象リソースをフィルタリングできる。 課金対象は agent がインストールされている EC2 ホスト or AWS 連携してメトリクスを取得している EC2 ホスト (重複する場合は 1 台にカウント) なので、RDS や ELB 自体には課金されない。

![Setup___Datadog.png](https://qiita-image-store.s3.amazonaws.com/0/20833/377f692f-4bcc-c088-5a53-6d97a93da4ea.png "Setup___Datadog.png")


## Postgresql 連携
### モニタリング用に Postgresql に datadog ROLE を作成する

```sql
create user datadog with password 'XXXXXXXXXXXXXXXXXXXXX'; 
GRANT SELECT ON pg_stat_database to datadog;
```

### Postgresql 用設定ファイルを作成する

```yaml
# /etc/dd-agent/conf.d/postgres.yaml
init_config:

instances:
   -   host: <your-rds-host>
       port: <your-rds-port>
       username: datadog
       password: XXXXXXXXXXXXXXXXXXX
       tags:
            - <your-tag>
```

設定ファイルの `tags` に、`CloudWatch` 連携時に自動で付けられるタグ

* `dbinstanceidentifier`
* `enginename`
* `databaseclass`

を付けておく。これを付けておかないと Datadog のダッシュボードで、タグによるフィルタリング時に CloudWatch 連携のデータは表示されるが Postgresql 連携のデータが表示されなくなってしまう。

```yaml
# /etc/dd-agent/conf.d/postgres.yaml の例
init_config:

instances:
   -   host: production-my-db.xxxxxxxx.ap-northeast-1.rds.amazonaws.com
       port: 5432
       username: datadog
       password: XXXXXXXXXXXXXXXXXXX
       tags:
            - 'dbinstanceidentifier:production-my-db'
            - 'enginename:postgres'
            - 'databaseclass:db.r3.2xlarge'
```

### dd-agent を再起動してモニタリング開始
基本的な Postgresql 連携の方法は Postgresql サーバに dd-agent をインストールし、そのサーバでこの設定ファイルを配置する。RDS はサーバにログインすることはできないので、別途 Postgresql モニタリング用 dd-agent をインストールするサーバを用意する。

```bash
$ sudo chmod 644 /etc/dd-agent/conf.d/postgres.yaml
$ sudo chown dd-agent:root /etc/dd-agent/conf.d/postgres.yaml
$ sudo /etc/init.d/datadog-agent restart
$ sudo /etc/init.d/datadog-agent info
  Checks
  ======

    postgres
    --------
      - instance #0 [OK]
      - Collected 6 metrics, 0 events & 2 service checks
```

## スクリーンショット
![DB_Metrics___Datadog.png](https://qiita-image-store.s3.amazonaws.com/0/20833/434ba400-af16-7994-bfa7-7d444ef9b7b0.png "DB_Metrics___Datadog.png")

## メモと感想
### スロークエリとかは NewRelic の領域なんだと思う
スロークエリとかは上記の連携では表示されない。

* アプリケーション寄りのメトリクスは New Relic
* インフラ寄りのメトリクスは Datadog

という住み分けだと思っている。

### TODO テーブルごとのメトリクス取得を試す
`postgres.yaml` にはテーブルごとのメトリクスを取得する設定も書いてあるので試そう

```yaml
#  Custom-metrics section

#  You can now track per-relation (table) metrics
#  You need to specify the list. Each relation
#  generates a lot of metrics (10 + 10 per index)
#  so you want to only use the ones you really care about

#       relations:
#            - my_table
#            - my_other_table
```

### TODO Postgresql の各種 Stats について書く

## REF

* [Datadog-AWS RDS Integration - Datadog Docs](http://docs.datadoghq.com/integrations/rds/)
* [Datadog-AWS Cloudwatch Integration - Datadog Docs](http://docs.datadoghq.com/integrations/aws/)
* [Monitoring - Postgresql Wiki](https://wiki.postgresql.org/wiki/Monitoring)