
概要
MySQL インテグレーションは、MySQL インスタンスのパフォーマンスを追跡します。スループット、接続、エラー、InnoDB に関するメトリクスを収集します。
データベースモニタリング (DBM) を有効にすると、クエリのパフォーマンスとデータベースの健全性について詳細なインサイトを取得できます。標準のインテグレーションに加え、Datadog DBM では、クエリレベルのメトリクス、リアルタイムおよび過去のクエリスナップショット、待機イベントの分析情報、データベースの負荷、クエリ実行計画が提供されます。
MySQL バージョン 5.6、5.7、8.0、および MariaDB バージョン 10.5、10.6、10.11、11.1 がサポートされています。
セットアップ
このページでは、MySQL Agent の標準的なインテグレーションについて説明します。MySQL のデータベースモニタリング製品をお求めの場合は、
Datadog データベースモニタリングをご覧ください。
インストール
MySQL チェックは Datadog Agent パッケージに含まれています。MySQL サーバーに追加でインストールする必要はありません。
MySQL の準備
注: MySQL 用のデータベースモニタリングをインストールするには、データベースモニタリングドキュメントでご利用のホスティングソリューションを選択して、手順を確認してください。
標準のインテグレーションを単体でインストールする場合のみ、このガイドの下記の手順に進んでください。
各 MySQL サーバーで、Datadog Agent 用のデータベースユーザーを作成します。
次の手順では、datadog@'%'
を使用して任意のホストからログインするアクセス許可を Agent に付与します。datadog@'localhost'
を使用して、datadog
ユーザーが localhost からのみログインできるように制限できます。詳細については、MySQL アカウントの追加、特権の割り当て、アカウントの削除を参照してください。
以下のコマンドで datadog
ユーザーを作成します。
mysql> CREATE USER 'datadog'@'%' IDENTIFIED BY '<UNIQUEPASSWORD>';
Query OK, 0 rows affected (0.00 sec)
次のコマンドを使用して、ユーザーが問題なく作成されたことを検証します。<一意のパスワード>
は上記で作成したパスワードに置き換えます。
mysql -u datadog --password=<UNIQUEPASSWORD> -e "show status" | \
grep Uptime && echo -e "\033[0;32mMySQL user - OK\033[0m" || \
echo -e "\033[0;31mCannot connect to MySQL\033[0m"
Agent がメトリクスを収集するには、いくつかの権限が必要です。次のように、限られた権限のみを datadog
ユーザーに付与してください。
MySQL バージョン 5.6 および 5.7 の場合は、 replication client
を付与し、次のコマンドで max_user_connections
を設定します。
mysql> GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'%' WITH MAX_USER_CONNECTIONS 5;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MySQL 8.0 以上の場合は、replication client
を付与し、次のコマンドで max_user_connections
を設定します。
mysql> GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'datadog'@'%' WITH MAX_USER_CONNECTIONS 5;
Query OK, 0 rows affected (0.00 sec)
datadog
ユーザーに PROCESS 権限を付与します。
mysql> GRANT PROCESS ON *.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)
レプリケーションクライアントを検証します。<UNIQUEPASSWORD>
は上記で作成したパスワードに置き換えます。
mysql -u datadog --password=<一意のパスワード> -e "show slave status" && \
echo -e "\033[0;32mMySQL grant - OK\033[0m" || \
echo -e "\033[0;31mMissing REPLICATION CLIENT grant\033[0m"
有効になると、追加の権限を付与することで、performance_schema
データベースからメトリクスを収集できます。
mysql> show databases like 'performance_schema';
+-------------------------------+
| Database (performance_schema) |
+-------------------------------+
| performance_schema |
+-------------------------------+
1 row in set (0.00 sec)
mysql> GRANT SELECT ON performance_schema.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)
構成
ホストで実行されている Agent 用にこのチェックを構成する場合は、以下の手順に従ってください。コンテナ環境の場合は、Docker、Kubernetes、または ECS セクションを参照してください。
注: 利用可能な構成オプションの完全なリストについては、mysql.d/conf.yaml のサンプルを参照してください。
ホスト
ホストで実行中の Agent に対してこのチェックを構成するには
MySQL のメトリクスとログの収集を開始するには、Agent の構成ディレクトリのルートにある conf.d/
フォルダーの mysql.d/conf.yaml
ファイルを編集します。
利用可能な構成オプションの完全なリストについては、mysql.d/conf.yaml
のサンプルを参照してください。
メトリクスの収集
注: パスワードに特殊文字が含まれる場合は、単一引用符で囲んでください。
extra_performance_metrics
を収集するには、MySQL サーバーで performance_schema
が有効になっている必要があります。それ以外の場合は、extra_performance_metrics
を false
に設定します。performance_schema
の詳細については、MySQL パフォーマンススキーマクイックスタートを参照してください。
注: datadog
ユーザーは、localhost
ではなく host: 127.0.0.1
として MySQL インテグレーション構成内にセットアップされる必要があります。または、sock
を使用することもできます。
Agent を再起動すると、Datadog への MySQL メトリクスの送信が開始されます。
ログ収集
Agent バージョン 6.0 以降で利用可能
MySQL は、デフォルトでは /var/log/syslog
内のすべてをログに記録しますが、これには、読み取りのルートアクセス許可が必要です。ログへのアクセス可能性を高めるには、以下の手順に従ってください。
/etc/mysql/conf.d/mysqld_safe_syslog.cnf
を編集して、行を削除またはコメントにします。
/etc/mysql/my.cnf
を編集し、次の行を追加して、一般ログ、エラーログ、および低速なクエリログを有効にします。
[mysqld_safe]
log_error = /var/log/mysql/mysql_error.log
[mysqld]
general_log = on
general_log_file = /var/log/mysql/mysql.log
log_error = /var/log/mysql/mysql_error.log
slow_query_log = on
slow_query_log_file = /var/log/mysql/mysql_slow.log
long_query_time = 2
ファイルを保存し、次のコマンドを使用して MySQL を再起動します。
service mysql restart
Agent が /var/log/mysql
ディレクトリとその中のすべてのファイルに対する読み取りアクセス許可を持つことを確認します。logrotate 構成もチェックして、これらのファイルが考慮され、アクセス許可が正しく設定されていることを確認します。
/etc/logrotate.d/mysql-server
の内容は次のようになります。
/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql_slow.log {
daily
rotate 7
missingok
create 644 mysql adm
Compress
}
Datadog Agent で、ログの収集はデフォルトで無効になっています。以下のように、datadog.yaml
ファイルでこれを有効にします。
MySQL のログの収集を開始するには、次の構成ブロックを mysql.d/conf.yaml
ファイルに追加します。
logs:
- type: file
path: "<ERROR_LOG_FILE_PATH>"
source: mysql
service: "<SERVICE_NAME>"
- type: file
path: "<SLOW_QUERY_LOG_FILE_PATH>"
source: mysql
service: "<SERVICE_NAME>"
log_processing_rules:
- type: multi_line
name: new_slow_query_log_entry
pattern: "# Time:"
# If mysqld was started with `--log-short-format`, use:
# pattern: "# Query_time:"
# If using mysql version <5.7, use the following rules instead:
# - type: multi_line
# name: new_slow_query_log_entry
# pattern: "# Time|# User@Host"
# - type: exclude_at_match
# name: exclude_timestamp_only_line
# pattern: "# Time:"
- type: file
path: "<GENERAL_LOG_FILE_PATH>"
source: mysql
service: "<SERVICE_NAME>"
# For multiline logs, if they start by the date with the format yyyy-mm-dd uncomment the following processing rule
# log_processing_rules:
# - type: multi_line
# name: new_log_start_with_date
# pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
# If the logs start with a date with the format yymmdd but include a timestamp with each new second, rather than with each log, uncomment the following processing rule
# log_processing_rules:
# - type: multi_line
# name: new_logs_do_not_always_start_with_timestamp
# pattern: \t\t\s*\d+\s+|\d{6}\s+\d{,2}:\d{2}:\d{2}\t\s*\d+\s+
カスタムメトリクスのオプションなど、使用可能なすべてのコンフィギュレーションオプションについては、サンプル mysql.yaml を参照してください。
Agent を再起動します。
Docker
コンテナで実行中の Agent に対してこのチェックを構成するには:
メトリクスの収集
アプリケーションのコンテナで、オートディスカバリーのインテグレーションテンプレートを Docker ラベルとして設定します。
LABEL "com.datadoghq.ad.check_names"='["mysql"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"server": "%%host%%", "username": "datadog","password": "<UNIQUEPASSWORD>"}]'
<UNIQUEPASSWORD>
をラベルではなく環境変数として使う方法について、詳細はオートディスカバリーテンプレート変数を参照してください。
ログ収集
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、Docker ログ収集を参照してください。
次に、ログインテグレーションを Docker ラベルとして設定します。
LABEL "com.datadoghq.ad.logs"='[{"source":"mysql","service":"mysql"}]'
Kubernetes
このチェックを、Kubernetes で実行している Agent に構成します。
メトリクスの収集
アプリケーションのコンテナで、オートディスカバリーのインテグレーションテンプレートをポッドアノテーションとして設定します。または、ファイル、コンフィギュレーションマップ、または Key-Value ストアを使用してテンプレートを構成することもできます。
Annotations v1 (Datadog Agent < v7.36 向け)
apiVersion: v1
kind: Pod
metadata:
name: mysql
annotations:
ad.datadoghq.com/mysql.check_names: '["mysql"]'
ad.datadoghq.com/mysql.init_configs: '[{}]'
ad.datadoghq.com/mysql.instances: |
[
{
"server": "%%host%%",
"username": "datadog",
"password": "<UNIQUEPASSWORD>"
}
]
labels:
name: mysql
spec:
containers:
- name: mysql
Annotations v2 (Datadog Agent v7.36+ 向け)
apiVersion: v1
kind: Pod
metadata:
name: mysql
annotations:
ad.datadoghq.com/mysql.checks: |
{
"mysql": {
"instances": [
{
"server": "%%host%%",
"username": "datadog",
"password": "<UNIQUEPASSWORD>"
}
]
}
}
labels:
name: mysql
spec:
containers:
- name: mysql
<UNIQUEPASSWORD>
をラベルではなく環境変数として使う方法について、詳細はオートディスカバリーテンプレート変数を参照してください。
ログ収集
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、Kubernetes ログ収集を参照してください。
次に、ログインテグレーションをポッドアノテーションとして設定します。または、ファイル、コンフィギュレーションマップ、または Key-Value ストアを使用してこれを構成することもできます。
Annotations v1/v2
apiVersion: v1
kind: Pod
metadata:
name: mysql
annotations:
ad.datadoghq.com/mysql.logs: '[{"source": "mysql", "service": "mysql"}]'
labels:
name: mysql
ECS
このチェックを、ECS で実行している Agent に構成するには:
メトリクスの収集
アプリケーションのコンテナで、オートディスカバリーのインテグレーションテンプレートを Docker ラベルとして設定します。
{
"containerDefinitions": [{
"name": "mysql",
"image": "mysql:latest",
"dockerLabels": {
"com.datadoghq.ad.check_names": "[\"mysql\"]",
"com.datadoghq.ad.init_configs": "[{}]",
"com.datadoghq.ad.instances": "[{\"server\": \"%%host%%\", \"username\": \"datadog\",\"password\": \"<UNIQUEPASSWORD>\"}]"
}
}]
}
<UNIQUEPASSWORD>
をラベルではなく環境変数として使う方法について、詳細はオートディスカバリーテンプレート変数を参照してください。
ログ収集
Agent バージョン 6.0 以降で利用可能
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、ECS ログ収集を参照してください。
次に、ログインテグレーションを Docker ラベルとして設定します。
{
"containerDefinitions": [{
"name": "mysql",
"image": "mysql:latest",
"dockerLabels": {
"com.datadoghq.ad.logs": "[{\"source\":\"mysql\",\"service\":\"mysql\"}]"
}
}]
}
検証
Agent の status サブコマンドを実行し、Checks セクションで mysql
を探します。
収集データ
メトリクス
このチェックは、デフォルトではすべてのメトリクスを収集しません。以下のブール値構成オプションを true
に設定することで、対応するメトリクスが有効になります。
extra_status_metrics
は、次のメトリクスを追加します。
メトリクス名 | メトリクスタイプ |
---|
mysql.binlog.cache_disk_use | GAUGE |
mysql.binlog.cache_use | GAUGE |
mysql.performance.handler_commit | RATE |
mysql.performance.handler_delete | RATE |
mysql.performance.handler_prepare | RATE |
mysql.performance.handler_read_first | RATE |
mysql.performance.handler_read_key | RATE |
mysql.performance.handler_read_next | RATE |
mysql.performance.handler_read_prev | RATE |
mysql.performance.handler_read_rnd | RATE |
mysql.performance.handler_read_rnd_next | RATE |
mysql.performance.handler_rollback | RATE |
mysql.performance.handler_update | RATE |
mysql.performance.handler_write | RATE |
mysql.performance.opened_tables | RATE |
mysql.performance.qcache_total_blocks | GAUGE |
mysql.performance.qcache_free_blocks | GAUGE |
mysql.performance.qcache_free_memory | GAUGE |
mysql.performance.qcache_not_cached | RATE |
mysql.performance.qcache_queries_in_cache | GAUGE |
mysql.performance.select_full_join | RATE |
mysql.performance.select_full_range_join | RATE |
mysql.performance.select_range | RATE |
mysql.performance.select_range_check | RATE |
mysql.performance.select_scan | RATE |
mysql.performance.sort_merge_passes | RATE |
mysql.performance.sort_range | RATE |
mysql.performance.sort_rows | RATE |
mysql.performance.sort_scan | RATE |
mysql.performance.table_locks_immediate | GAUGE |
mysql.performance.table_locks_immediate.rate | RATE |
mysql.performance.threads_cached | GAUGE |
mysql.performance.threads_created | 単調増加 (MONOTONIC) |
extra_innodb_metrics
は、次のメトリクスを追加します。
メトリクス名 | メトリクスタイプ |
---|
mysql.innodb.active_transactions | GAUGE |
mysql.innodb.buffer_pool_data | GAUGE |
mysql.innodb.buffer_pool_pages_data | GAUGE |
mysql.innodb.buffer_pool_pages_dirty | GAUGE |
mysql.innodb.buffer_pool_pages_flushed | RATE |
mysql.innodb.buffer_pool_pages_free | GAUGE |
mysql.innodb.buffer_pool_pages_total | GAUGE |
mysql.innodb.buffer_pool_read_ahead | RATE |
mysql.innodb.buffer_pool_read_ahead_evicted | RATE |
mysql.innodb.buffer_pool_read_ahead_rnd | GAUGE |
mysql.innodb.buffer_pool_wait_free | 単調増加 (MONOTONIC) |
mysql.innodb.buffer_pool_write_requests | RATE |
mysql.innodb.checkpoint_age | GAUGE |
mysql.innodb.current_transactions | GAUGE |
mysql.innodb.data_fsyncs | RATE |
mysql.innodb.data_pending_fsyncs | GAUGE |
mysql.innodb.data_pending_reads | GAUGE |
mysql.innodb.data_pending_writes | GAUGE |
mysql.innodb.data_read | RATE |
mysql.innodb.data_written | RATE |
mysql.innodb.dblwr_pages_written | RATE |
mysql.innodb.dblwr_writes | RATE |
mysql.innodb.hash_index_cells_total | GAUGE |
mysql.innodb.hash_index_cells_used | GAUGE |
mysql.innodb.history_list_length | GAUGE |
mysql.innodb.ibuf_free_list | GAUGE |
mysql.innodb.ibuf_merged | RATE |
mysql.innodb.ibuf_merged_delete_marks | RATE |
mysql.innodb.ibuf_merged_deletes | RATE |
mysql.innodb.ibuf_merged_inserts | RATE |
mysql.innodb.ibuf_merges | RATE |
mysql.innodb.ibuf_segment_size | GAUGE |
mysql.innodb.ibuf_size | GAUGE |
mysql.innodb.lock_structs | GAUGE |
mysql.innodb.locked_tables | GAUGE |
mysql.innodb.locked_transactions | GAUGE |
mysql.innodb.log_waits | RATE |
mysql.innodb.log_write_requests | RATE |
mysql.innodb.log_writes | RATE |
mysql.innodb.lsn_current | RATE |
mysql.innodb.lsn_flushed | RATE |
mysql.innodb.lsn_last_checkpoint | RATE |
mysql.innodb.mem_adaptive_hash | GAUGE |
mysql.innodb.mem_additional_pool | GAUGE |
mysql.innodb.mem_dictionary | GAUGE |
mysql.innodb.mem_file_system | GAUGE |
mysql.innodb.mem_lock_system | GAUGE |
mysql.innodb.mem_page_hash | GAUGE |
mysql.innodb.mem_recovery_system | GAUGE |
mysql.innodb.mem_thread_hash | GAUGE |
mysql.innodb.mem_total | GAUGE |
mysql.innodb.os_file_fsyncs | RATE |
mysql.innodb.os_file_reads | RATE |
mysql.innodb.os_file_writes | RATE |
mysql.innodb.os_log_pending_fsyncs | GAUGE |
mysql.innodb.os_log_pending_writes | GAUGE |
mysql.innodb.os_log_written | RATE |
mysql.innodb.pages_created | RATE |
mysql.innodb.pages_read | RATE |
mysql.innodb.pages_written | RATE |
mysql.innodb.pending_aio_log_ios | GAUGE |
mysql.innodb.pending_aio_sync_ios | GAUGE |
mysql.innodb.pending_buffer_pool_flushes | GAUGE |
mysql.innodb.pending_checkpoint_writes | GAUGE |
mysql.innodb.pending_ibuf_aio_reads | GAUGE |
mysql.innodb.pending_log_flushes | GAUGE |
mysql.innodb.pending_log_writes | GAUGE |
mysql.innodb.pending_normal_aio_reads | GAUGE |
mysql.innodb.pending_normal_aio_writes | GAUGE |
mysql.innodb.queries_inside | GAUGE |
mysql.innodb.queries_queued | GAUGE |
mysql.innodb.read_views | GAUGE |
mysql.innodb.rows_deleted | RATE |
mysql.innodb.rows_inserted | RATE |
mysql.innodb.rows_read | RATE |
mysql.innodb.rows_updated | RATE |
mysql.innodb.s_lock_os_waits | RATE |
mysql.innodb.s_lock_spin_rounds | RATE |
mysql.innodb.s_lock_spin_waits | RATE |
mysql.innodb.semaphore_wait_time | GAUGE |
mysql.innodb.semaphore_waits | GAUGE |
mysql.innodb.tables_in_use | GAUGE |
mysql.innodb.x_lock_os_waits | RATE |
mysql.innodb.x_lock_spin_rounds | RATE |
mysql.innodb.x_lock_spin_waits | RATE |
extra_performance_metrics
は、次のメトリクスを追加します。
メトリクス名 | メトリクスタイプ |
---|
mysql.performance.query_run_time.avg | GAUGE |
mysql.performance.digest_95th_percentile.avg_us | GAUGE |
schema_size_metrics
は、次のメトリクスを追加します。
メトリクス名 | メトリクスタイプ |
---|
mysql.info.schema.size | GAUGE |
イベント
MySQL チェックには、イベントは含まれません。
サービスチェック
mysql.can_connect
Agent が監視対象の MySQL インスタンスに接続できない場合は、CRITICAL
を返します。それ以外の場合は、OK
を返します。
Statuses: ok, クリティカル
トラブルシューティング
その他の参考資料
お役に立つドキュメント、リンクや記事: