- 重要な情報
- はじめに
- 用語集
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
データベースモニタリングは、InnoDB ストレージエンジンのクエリメトリクス、クエリサンプル、説明プラン、接続データ、システムメトリクス、テレメトリを公開することにより、MySQL データベースの詳細な可視性を提供します。
Agent は、読み取り専用のユーザーとしてログインすることでデータベースから直接テレメトリーを収集します。MySQL データベースでデータベースモニタリングを有効にするには、以下の設定を行ってください。
DB パラメーターグループで以下の設定を行い、サーバーを再起動すると設定が反映されます。
パラメーター | 値 | 説明 |
---|---|---|
performance_schema | 1 | 必須。パフォーマンススキーマを有効にします。 |
performance_schema_consumer_events_statements_current | 1 | 必須。現在実行中のクエリのモニタリングを可能にします。 |
performance-schema-consumer-events-waits-current | ON | 必須。待機イベントの収集を有効にします。 |
performance_schema_consumer_events_statements_history | 1 | オプション。スレッドごとに最近のクエリの履歴を追跡することができます。この機能を有効にすると、頻度の低いクエリの実行情報を取得できる可能性が高まります。 |
performance_schema_consumer_events_statements_history_long | 1 | オプション。すべてのスレッドにおいて、より多くの最近のクエリを追跡することができます。この機能を有効にすると、頻度の低いクエリの実行情報を取得できる可能性が高まります。 |
パラメーター | 値 | 説明 |
---|---|---|
performance_schema | 1 | 必須。パフォーマンススキーマを有効にします。 |
performance_schema_consumer_events_statements_current | 1 | 必須。現在実行中のクエリのモニタリングを可能にします。 |
performance-schema-consumer-events-waits-current | ON | 必須。待機イベントの収集を有効にします。 |
performance_schema_consumer_events_statements_history | 1 | オプション。スレッドごとに最近のクエリの履歴を追跡することができます。この機能を有効にすると、頻度の低いクエリの実行情報を取得できる可能性が高まります。 |
performance_schema_consumer_events_statements_history_long | 1 | オプション。すべてのスレッドにおいて、より多くの最近のクエリを追跡することができます。この機能を有効にすると、頻度の低いクエリの実行情報を取得できる可能性が高まります。 |
performance_schema_max_digest_length | 4096 | events_statements_* テーブルの SQL ダイジェストテキストのサイズを増やします。デフォルト値のままにすると、1024 文字より長いクエリは収集されません。 |
performance_schema_max_sql_text_length | 4096 | performance_schema_max_digest_length と一致する必要があります。 |
注: Agent へのアクセス権限付与の一貫として、Agent がランタイム時に動的に performance-schema-consumer-*
設定を有効にできるようにすることを推奨します。ランタイムセットアップコンシューマーを参照してください。
Datadog Agent が統計やクエリを収集するためには、データベースへの読み取り専用のアクセスが必要となります。
次の手順では、datadog@'%'
を使用して任意のホストからログインするアクセス許可を Agent に付与します。datadog@'localhost'
を使用して、datadog
ユーザーが localhost からのみログインできるように制限できます。詳細については、MySQL ドキュメントを参照してください。
datadog
ユーザーを作成し、基本的なアクセス許可を付与します。
CREATE USER datadog@'%' IDENTIFIED BY '<UNIQUEPASSWORD>';
GRANT REPLICATION CLIENT ON *.* TO datadog@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT PROCESS ON *.* TO datadog@'%';
GRANT SELECT ON performance_schema.* TO datadog@'%';
次のスキーマを作成します。
CREATE SCHEMA IF NOT EXISTS datadog;
GRANT EXECUTE ON datadog.* to datadog@'%';
GRANT CREATE TEMPORARY TABLES ON datadog.* TO datadog@'%';
Agent が実行計画を収集できるように、 explain_statement
プロシージャを作成します。
DELIMITER $$
CREATE PROCEDURE datadog.explain_statement(IN query TEXT)
SQL SECURITY DEFINER
BEGIN
SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
PREPARE stmt FROM @explain;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
さらに、実行計画を収集するすべてのスキーマでこのプロシージャを作成します。<YOUR_SCHEMA>
をデータベーススキーマに置き換えます。
DELIMITER $$
CREATE PROCEDURE <YOUR_SCHEMA>.explain_statement(IN query TEXT)
SQL SECURITY DEFINER
BEGIN
SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
PREPARE stmt FROM @explain;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE <YOUR_SCHEMA>.explain_statement TO datadog@'%';
Datadog では、ランタイムで performance_schema.events_*
コンシューマーを有効にする機能を Agent に与えるために、次のプロシージャを作成することをお勧めしています。
DELIMITER $$
CREATE PROCEDURE datadog.enable_events_statements_consumers()
SQL SECURITY DEFINER
BEGIN
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE datadog.enable_events_statements_consumers TO datadog@'%';
Aurora ホストを監視するには、インフラストラクチャーに Datadog Agent をインストールし、各インスタンスのエンドポイントにリモートで接続するように構成します。Agent はデータベース上で動作する必要はなく、データベースに接続するだけで問題ありません。ここに記載されていないその他の Agent のインストール方法については、Agent のインストール手順を参照してください。
ホストで実行されている Agent に対してこのチェックを設定するには (Agent が Aurora データベースから収集するように小さな EC2 インスタンスをプロビジョニングする場合など)
Agent のコンフィギュレーションディレクトリのルートにある conf.d/
フォルダーの mysql.d/conf.yaml
ファイルを編集します。カスタムメトリクスのオプションなど、使用可能なすべてのコンフィギュレーションオプションについては、サンプル mysql.d/conf.yaml を参照してください。
MySQL メトリクスを収集するには、mysql.d/conf.yaml
に次のコンフィギュレーションブロックを追加します。
init_config:
instances:
- dbm: true
host: '<AWS_INSTANCE_ENDPOINT>'
port: 3306
username: datadog
password: '<YOUR_CHOSEN_PASSWORD>' # 前の CREATE USER ステップから
注: パスワードに特殊文字が含まれる場合は、単一引用符で囲んでください。
Agent を再起動すると、Datadog への MySQL メトリクスの送信が開始されます。
ECS や Fargate などの Docker コンテナで動作するデータベースモニタリング Agent を設定するには、Agent コンテナの Docker ラベルとしてオートディスカバリーのインテグレーションテンプレートを設定します。
注: ラベルのオートディスカバリーを機能させるためには、Agent にDocker ソケットに対する読み取り権限が与えられている必要があります。
次のコマンドを実行して、コマンドラインから Agent を実行することですぐに稼動させることができます。お使いのアカウントや環境に合わせて値を変更してください。
export DD_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export DD_AGENT_VERSION=7.36.1
docker run -e "DD_API_KEY=${DD_API_KEY}" \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-l com.datadoghq.ad.check_names='["mysql"]' \
-l com.datadoghq.ad.init_configs='[{}]' \
-l com.datadoghq.ad.instances='[{
"dbm": true,
"host": "<AWS_INSTANCE_ENDPOINT>",
"port": 3306,
"username": "datadog",
"password": "<UNIQUEPASSWORD>"
}]' \
gcr.io/datadoghq/agent:${DD_AGENT_VERSION}
Dockerfile
ではラベルの指定も可能であるため、インフラストラクチャーのコンフィギュレーションを変更することなく、カスタム Agent を構築・デプロイすることができます。
FROM gcr.io/datadoghq/agent:7.36.1
LABEL "com.datadoghq.ad.check_names"='["mysql"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"dbm": true, "host": "<AWS_INSTANCE_ENDPOINT>", "port": 3306,"username": "datadog","password": "<UNIQUEPASSWORD>"}]'
datadog
ユーザーのパスワードをプレーンテキストで公開しないようにするには、Agent のシークレット管理パッケージを使用し、ENC[]
構文を使ってパスワードを宣言するか、オートディスカバリーテンプレート変数に関するドキュメントでパスワードを環境変数として渡す方法をご確認ください。
Kubernetes クラスターをお使いの場合は、データベースモニタリング用の Datadog Cluster Agent をご利用ください。
Kubernetes クラスターでまだチェックが有効になっていない場合は、手順に従ってクラスターチェックを有効にしてください。MySQL のコンフィギュレーションは、Cluster Agent コンテナにマウントされた静的ファイル、またはサービスアノテーションのいずれかを使用して宣言できます。
以下の Helm コマンドを実行して、Kubernetes クラスターに Datadog Cluster Agent をインストールします。お使いのアカウントや環境に合わせて値を変更してください。
helm repo add datadog https://helm.datadoghq.com
helm repo update
helm install <RELEASE_NAME> \
--set 'datadog.apiKey=<DATADOG_API_KEY>' \
--set 'clusterAgent.enabled=true' \
--set "clusterAgent.confd.mysql\.yaml=cluster_check: true
init_config:
instances:
- dbm: true
host: <INSTANCE_ADDRESS>
port: 3306
username: datadog
password: <UNIQUEPASSWORD>" \
datadog/datadog
マウントされたコンフィギュレーションファイルを使ってクラスターチェックを構成するには、コンフィギュレーションファイルを Cluster Agent コンテナのパス /conf.d/mysql.yaml
にマウントします。
cluster_check: true # このフラグを必ず含めてください
init_config:
instances:
- dbm: true
host: '<AWS_INSTANCE_ENDPOINT>'
port: 3306
username: datadog
password: '<UNIQUEPASSWORD>'
ファイルをマウントせずに、インスタンスのコンフィギュレーションをKubernetes サービスとして宣言することができます。Kubernetes 上で動作する Agent にこのチェックを設定するには、Datadog Cluster Agent と同じネームスペースにサービスを作成します。
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
tags.datadoghq.com/env: '<ENV>'
tags.datadoghq.com/service: '<SERVICE>'
annotations:
ad.datadoghq.com/service.check_names: '["mysql"]'
ad.datadoghq.com/service.init_configs: '[{}]'
ad.datadoghq.com/service.instances: |
[
{
"dbm": true,
"host": "<AWS_INSTANCE_ENDPOINT>",
"port": 3306,
"username": "datadog",
"password": "<UNIQUEPASSWORD>"
}
]
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: mysql
Cluster Agent は自動的にこのコンフィギュレーションを登録し、MySQL チェックを開始します。
datadog
ユーザーのパスワードをプレーンテキストで公開しないよう、Agent のシークレット管理パッケージを使用し、構文を使ってパスワードを宣言します。
Agent の status サブコマンドを実行し、Checks セクションで mysql
を探します。または、データベースのページを参照してください。
AWS からより包括的なデータベースメトリクスを収集するには、RDS インテグレーションをインストールします (オプション)。
インテグレーションと Agent を手順通りにインストール・設定しても期待通りに動作しない場合は、トラブルシューティングを参照してください。
お役に立つドキュメント、リンクや記事: