Supported OS Linux Mac OS Windows

インテグレーションバージョン14.2.0

MySQL ダッシュボード

概要

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 用にこのチェックを構成する場合は、以下の手順に従ってください。コンテナ環境の場合は、DockerKubernetes、または ECS セクションを参照してください。

: 利用可能な構成オプションの完全なリストについては、mysql.d/conf.yaml のサンプルを参照してください。

ホスト

ホストで実行中の Agent に対してこのチェックを構成するには

MySQL のメトリクスログの収集を開始するには、Agent の構成ディレクトリのルートにある conf.d/ フォルダーの mysql.d/conf.yaml ファイルを編集します。

利用可能な構成オプションの完全なリストについては、mysql.d/conf.yaml のサンプルを参照してください。

メトリクスの収集
  • MySQL メトリクスを収集するには、mysql.d/conf.yaml に次の構成ブロックを追加します。

    init_config:
    
    instances:
      - host: 127.0.0.1
        username: datadog
        password: "<YOUR_CHOSEN_PASSWORD>" # from the CREATE USER step earlier
        port: "<YOUR_MYSQL_PORT>" # e.g. 3306
        options:
          replication: false
          galera_cluster: true
          extra_status_metrics: true
          extra_innodb_metrics: true
          schema_size_metrics: false
          disable_innodb_metrics: false
    

: パスワードに特殊文字が含まれる場合は、単一引用符で囲んでください。

extra_performance_metrics を収集するには、MySQL サーバーで performance_schema が有効になっている必要があります。それ以外の場合は、extra_performance_metricsfalse に設定します。performance_schema の詳細については、MySQL パフォーマンススキーマクイックスタートを参照してください。

: datadog ユーザーは、localhost ではなく host: 127.0.0.1 として MySQL インテグレーション構成内にセットアップされる必要があります。または、sock を使用することもできます。

Agent を再起動すると、Datadog への MySQL メトリクスの送信が開始されます。

ログ収集

Agent バージョン 6.0 以降で利用可能

  1. 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
        }
      
  2. Datadog Agent で、ログの収集はデフォルトで無効になっています。以下のように、datadog.yaml ファイルでこれを有効にします。

    logs_enabled: true
    
  3. 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 を参照してください。

  4. 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_useGAUGE
mysql.binlog.cache_useGAUGE
mysql.performance.handler_commitRATE
mysql.performance.handler_deleteRATE
mysql.performance.handler_prepareRATE
mysql.performance.handler_read_firstRATE
mysql.performance.handler_read_keyRATE
mysql.performance.handler_read_nextRATE
mysql.performance.handler_read_prevRATE
mysql.performance.handler_read_rndRATE
mysql.performance.handler_read_rnd_nextRATE
mysql.performance.handler_rollbackRATE
mysql.performance.handler_updateRATE
mysql.performance.handler_writeRATE
mysql.performance.opened_tablesRATE
mysql.performance.qcache_total_blocksGAUGE
mysql.performance.qcache_free_blocksGAUGE
mysql.performance.qcache_free_memoryGAUGE
mysql.performance.qcache_not_cachedRATE
mysql.performance.qcache_queries_in_cacheGAUGE
mysql.performance.select_full_joinRATE
mysql.performance.select_full_range_joinRATE
mysql.performance.select_rangeRATE
mysql.performance.select_range_checkRATE
mysql.performance.select_scanRATE
mysql.performance.sort_merge_passesRATE
mysql.performance.sort_rangeRATE
mysql.performance.sort_rowsRATE
mysql.performance.sort_scanRATE
mysql.performance.table_locks_immediateGAUGE
mysql.performance.table_locks_immediate.rateRATE
mysql.performance.threads_cachedGAUGE
mysql.performance.threads_created単調増加 (MONOTONIC)

extra_innodb_metrics は、次のメトリクスを追加します。

メトリクス名メトリクスタイプ
mysql.innodb.active_transactionsGAUGE
mysql.innodb.buffer_pool_dataGAUGE
mysql.innodb.buffer_pool_pages_dataGAUGE
mysql.innodb.buffer_pool_pages_dirtyGAUGE
mysql.innodb.buffer_pool_pages_flushedRATE
mysql.innodb.buffer_pool_pages_freeGAUGE
mysql.innodb.buffer_pool_pages_totalGAUGE
mysql.innodb.buffer_pool_read_aheadRATE
mysql.innodb.buffer_pool_read_ahead_evictedRATE
mysql.innodb.buffer_pool_read_ahead_rndGAUGE
mysql.innodb.buffer_pool_wait_free単調増加 (MONOTONIC)
mysql.innodb.buffer_pool_write_requestsRATE
mysql.innodb.checkpoint_ageGAUGE
mysql.innodb.current_transactionsGAUGE
mysql.innodb.data_fsyncsRATE
mysql.innodb.data_pending_fsyncsGAUGE
mysql.innodb.data_pending_readsGAUGE
mysql.innodb.data_pending_writesGAUGE
mysql.innodb.data_readRATE
mysql.innodb.data_writtenRATE
mysql.innodb.dblwr_pages_writtenRATE
mysql.innodb.dblwr_writesRATE
mysql.innodb.hash_index_cells_totalGAUGE
mysql.innodb.hash_index_cells_usedGAUGE
mysql.innodb.history_list_lengthGAUGE
mysql.innodb.ibuf_free_listGAUGE
mysql.innodb.ibuf_mergedRATE
mysql.innodb.ibuf_merged_delete_marksRATE
mysql.innodb.ibuf_merged_deletesRATE
mysql.innodb.ibuf_merged_insertsRATE
mysql.innodb.ibuf_mergesRATE
mysql.innodb.ibuf_segment_sizeGAUGE
mysql.innodb.ibuf_sizeGAUGE
mysql.innodb.lock_structsGAUGE
mysql.innodb.locked_tablesGAUGE
mysql.innodb.locked_transactionsGAUGE
mysql.innodb.log_waitsRATE
mysql.innodb.log_write_requestsRATE
mysql.innodb.log_writesRATE
mysql.innodb.lsn_currentRATE
mysql.innodb.lsn_flushedRATE
mysql.innodb.lsn_last_checkpointRATE
mysql.innodb.mem_adaptive_hashGAUGE
mysql.innodb.mem_additional_poolGAUGE
mysql.innodb.mem_dictionaryGAUGE
mysql.innodb.mem_file_systemGAUGE
mysql.innodb.mem_lock_systemGAUGE
mysql.innodb.mem_page_hashGAUGE
mysql.innodb.mem_recovery_systemGAUGE
mysql.innodb.mem_thread_hashGAUGE
mysql.innodb.mem_totalGAUGE
mysql.innodb.os_file_fsyncsRATE
mysql.innodb.os_file_readsRATE
mysql.innodb.os_file_writesRATE
mysql.innodb.os_log_pending_fsyncsGAUGE
mysql.innodb.os_log_pending_writesGAUGE
mysql.innodb.os_log_writtenRATE
mysql.innodb.pages_createdRATE
mysql.innodb.pages_readRATE
mysql.innodb.pages_writtenRATE
mysql.innodb.pending_aio_log_iosGAUGE
mysql.innodb.pending_aio_sync_iosGAUGE
mysql.innodb.pending_buffer_pool_flushesGAUGE
mysql.innodb.pending_checkpoint_writesGAUGE
mysql.innodb.pending_ibuf_aio_readsGAUGE
mysql.innodb.pending_log_flushesGAUGE
mysql.innodb.pending_log_writesGAUGE
mysql.innodb.pending_normal_aio_readsGAUGE
mysql.innodb.pending_normal_aio_writesGAUGE
mysql.innodb.queries_insideGAUGE
mysql.innodb.queries_queuedGAUGE
mysql.innodb.read_viewsGAUGE
mysql.innodb.rows_deletedRATE
mysql.innodb.rows_insertedRATE
mysql.innodb.rows_readRATE
mysql.innodb.rows_updatedRATE
mysql.innodb.s_lock_os_waitsRATE
mysql.innodb.s_lock_spin_roundsRATE
mysql.innodb.s_lock_spin_waitsRATE
mysql.innodb.semaphore_wait_timeGAUGE
mysql.innodb.semaphore_waitsGAUGE
mysql.innodb.tables_in_useGAUGE
mysql.innodb.x_lock_os_waitsRATE
mysql.innodb.x_lock_spin_roundsRATE
mysql.innodb.x_lock_spin_waitsRATE

extra_performance_metrics は、次のメトリクスを追加します。

メトリクス名メトリクスタイプ
mysql.performance.query_run_time.avgGAUGE
mysql.performance.digest_95th_percentile.avg_usGAUGE

schema_size_metrics は、次のメトリクスを追加します。

メトリクス名メトリクスタイプ
mysql.info.schema.sizeGAUGE

イベント

MySQL チェックには、イベントは含まれません。

サービスチェック

mysql.can_connect
Agent が監視対象の MySQL インスタンスに接続できない場合は、CRITICAL を返します。それ以外の場合は、OK を返します。
Statuses: ok, クリティカル

トラブルシューティング

その他の参考資料

お役に立つドキュメント、リンクや記事:

PREVIEWING: may/embedded-workflows