Edited at

dd-agentでRDSのMySQLを監視してみた

More than 3 years have passed since last update.


概要

DatadogではMySQLをモニタリングするためのMySQL Integrationが提供されているが、基本的にMySQLが稼動しているサーバにdatadog-agentをインストールしてlocalhostのmysqldからデータを取得することをを想定して各種ドキュメントなどが書かれている感がある。

RDSでMySQLを利用している場合、CloudWatchで取得できる値は造作もなくDatadogへ食わせることができるわけだが、いかんせんOSリソース的なメトリクスが多く、MySQL固有の値をモニタリングの対象にしたい場合物足りない。

そこで、別のサーバへdatadog-agentをインストールし、そこからRDSへ接続してDatadogへデータをもっていくということができる。


やったこと


  • RDSのセキュリティグループ設定

  • Datadog用ユーザの作成

  • /etc/dd-agent/conf.d/mysql.yamlへ監視対象の設定

  • dashboardでの設定


RDSのセキュリティグループ設定

AWSエキスパートの諸兄ならば特に解説不要と思われるので省略


Datadog用ユーザの作成

RDSのMasterUserを使用してもモニタリングは可能だが、後述するように設定ファイル(mysql.yaml)にUserID/Passwordを埋め込む必要があるため権限の強いユーザを使用することは推奨できない。そのため読み取りに特化したユーザを作成するべきである。

MySQL Integrationのインストール画面のConfigurationタブに下記のようなユーザ作成手順がある。

sudo mysql -e "CREATE USER 'datadog'@'localhost' IDENTIFIED BY 'GENERATED_PASSWORD';"

sudo mysql -e "GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'localhost' WITH MAX_USER_CONNECTIONS 5;"

If you'd like to get the full metrics catalog please also grant the following privileges:

sudo mysql -e "GRANT PROCESS ON *.* TO 'datadog'@'localhost';"
sudo mysql -e "GRANT SELECT ON performance_schema.* TO 'datadog'@'localhost';"

上記の例ではdatadog@localhostというユーザを作成し、*.*に対しREPLICATIONを許可するように権限設定している。

また、すべてのメトリクスをとりたい場合はさらに*.*に対しSELECT, performance_schema.* に対しSELECTを許可せよとのことである。

このままの手順でユーザをつくるとlocalhostのみが接続できることになってしまうため、下記のように変更した。

(要は @localhostをとっただけ)

sudo mysql -e "CREATE USER 'datadog' IDENTIFIED BY 'GENERATED_PASSWORD';"

sudo mysql -e "GRANT REPLICATION CLIENT ON *.* TO 'datadog' WITH MAX_USER_CONNECTIONS 5;"
sudo mysql -e "GRANT PROCESS ON *.* TO 'datadog';"
sudo mysql -e "GRANT SELECT ON performance_schema.* TO 'datadog';"


/etc/dd-agent/conf.d/mysql.yamlへ監視対象の設定

datadog-agentが稼動しているサーバの /etc/dd-agent/conf.d/mysql.yaml に対象RDSの情報を設定する。

もともと mysql.yaml.example が存在しているので、 cp mysql.yaml.example mysql.yaml といった感じでオリジナルを保存した状態で mysql.yaml を作成し、修正するのがよいと思う。

筆者が使用しているのは下記のようにサンプル記述をすべて消したものとなっている。

init_config:

instances:
- server: rds1.hogehoge.ap-northeast-1.rds.amazonaws.com
user: datadog
pass: YOUR_GENERATED_PASSWORD
tags:
- dbname:rds1

- server: rds2.hogehoge.ap-northeast-1.rds.amazonaws.com
user: datadog
pass: YOUR_GENERATED_PASSWORD
tags:
- dbname:rds2

上記のように複数のRDSを記述することができる。また、tagsにタグを設定することによりdashboard等で対象RDSを指定する際にタグを使用できるようになる。


dashboardでの設定

mysql_integration_dashboard.png

以上