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


はじめに

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

  • CloudWatch (AWS) 連携
  • Postgresql 連携

が利用できる。

また、Sensu で監視したメトリクスを Datadog に送ることも可能。
sensu と datadog を連携してちょっとリッチなメトリクスの可視化 - inokappa に丁寧に書かれてる。

CloudWatch 連携

Datadog 用 IAM ユーザを用意する

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

連携を ON にする

Integration タブから

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

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

Postgresql 連携

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

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

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

# /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 連携のデータが表示されなくなってしまう。

# /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 をインストールするサーバを用意する。

$ 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

スクリーンショット

メモと感想

スロークエリとかは NewRelic の領域なんだと思う

スロークエリとかは上記の連携では表示されない。

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

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

TODO テーブルごとのメトリクス取得を試す

postgres.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