MySQL

MySQL 統合では、InnoDB、バッファプール、その他のさまざまなオペレーションに関連するパフォーマンス指標を収集します。また、一般ログ、エラーログ、スロークエリ ログを収集して解析し、JSON ペイロードを生成します。エラーログは、エラーコードとサブシステムに対して解析されます。スロークエリ ログを解析して、クエリ時間や検査された行など、クエリのパフォーマンスを表す Key-Value ペアを生成します。

MySQL の詳細については、MySQL のドキュメントをご覧ください。

前提条件

MySQL テレメトリーを収集するには、Ops エージェントをインストールする必要があります。

  • 指標の場合は、バージョン 2.32.0 以降をインストールします。
  • ログの場合は、バージョン 2.5.0 以降をインストールします。

この統合は MySQL バージョン 5.7 と 8.0 をサポートしています。

MySQL インスタンスを構成する

mysql レシーバは、root ユーザーとして Unix ソケットと Unix 認証を使用し、デフォルトでローカルの MySQL サーバーに接続します。

MySQL 用の Ops エージェントを構成する

Ops エージェントの構成のガイドに従って、MySQL インスタンスからテレメトリーを収集するために必要な要素を追加し、エージェントを再起動します。

構成の例

次のコマンドは、MySQL のテレメトリーを収集して取り込み、Ops エージェントを再起動するための構成を作成します。

# Configures Ops Agent to collect telemetry from the app and restart Ops Agent.

set -e

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Configure the Ops Agent.
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    mysql:
      type: mysql
      username: root
      password: Ss123%321
  service:
    pipelines:
      mysql:
        receivers:
        - mysql
logging:
  receivers:
    mysql_error:
      type: mysql_error
    mysql_general:
      type: mysql_general
    mysql_slow:
      type: mysql_slow
  service:
    pipelines:
      mysql:
        receivers:
          - mysql_error
          - mysql_general
          - mysql_slow
EOF

sudo service google-cloud-ops-agent restart
sleep 60

ログの収集を構成する

MySQL からログを取り込むには、MySQL が生成するログのレシーバーを作成してから、新しいレシーバー用のパイプラインを作成する必要があります。

mysql_error ログのレシーバーを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
exclude_paths include_paths の照合で除外するファイルシステム パスのパターンのリスト。
include_paths [/var/log/mysqld.log, /var/log/mysql/mysqld.log, /var/log/mysql/error.log] 各ファイルのテーリングで読み込むファイルシステムのパスのリスト。パスには、/var/log/mysql/*.log のように、ワイルドカード(*)を使用できます。
record_log_file_path false true に設定すると、ログレコードの取得元のファイルのパスが agent.googleapis.com/log_file_path ラベルの値として出力ログエントリに表示されます。ワイルドカードを使用する場合、レコードを取得したファイルのパスのみが記録されます。
type この値は、mysql_error にする必要があります。
wildcard_refresh_interval 60s include_paths のワイルドカード ファイルのパスの更新間隔。期間を指定します(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトの間隔よりも速く、ロギングのスループットが高い場合に有用です。

mysql_general ログのレシーバーを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
exclude_paths include_paths の照合で除外するファイルシステム パスのパターンのリスト。
include_paths [/var/lib/mysql/${HOSTNAME}.log] 各ファイルのテーリングで読み込むファイルシステムのパスのリスト。パスにはワイルドカード(*)を使用できます。
record_log_file_path false true に設定すると、ログレコードの取得元のファイルのパスが agent.googleapis.com/log_file_path ラベルの値として出力ログエントリに表示されます。ワイルドカードを使用する場合、レコードを取得したファイルのパスのみが記録されます。
type この値は、mysql_general にする必要があります。
wildcard_refresh_interval 60s include_paths のワイルドカード ファイルのパスの更新間隔。期間を指定します(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトの間隔よりも速く、ロギングのスループットが高い場合に有用です。

mysql_slow ログのレシーバーを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
exclude_paths include_paths の照合で除外するファイルシステム パスのパターンのリスト。
include_paths [/var/lib/mysql/${HOSTNAME}-slow.log] 各ファイルのテーリングで読み込むファイルシステムのパスのリスト。パスにはワイルドカード(*)を使用できます。
record_log_file_path false true に設定すると、ログレコードの取得元のファイルのパスが agent.googleapis.com/log_file_path ラベルの値として出力ログエントリに表示されます。ワイルドカードを使用する場合、レコードを取得したファイルのパスのみが記録されます。
type この値は、mysql_slow にする必要があります。
wildcard_refresh_interval 60s include_paths のワイルドカード ファイルのパスの更新間隔。期間を指定します(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトの間隔よりも速く、ロギングのスループットが高い場合に有用です。

ログの内容

logName は、構成で指定されたレシーバ ID から取得されます。LogEntry 内の詳細なフィールドは、次のとおりです。

mysql_error ログの LogEntry には次のフィールドが含まれます。

フィールド タイプ 説明
jsonPayload.errorCode 文字列 ログに関連付けられた MySQL エラーコード
jsonPayload.level 文字列 ログエントリ レベル
jsonPayload.message 文字列 ログメッセージ
jsonPayload.subsystem 文字列 ログが発生した MySQL サブシステム
jsonPayload.tid 数値 ログの生成元のスレッド ID
severity 文字列(LogSeverity ログエントリ レベル(変換済み)。

mysql_general ログの LogEntry には次のフィールドが含まれます。

フィールド タイプ 説明
jsonPayload.command 文字列 ログに記録されるデータベース アクションの種類
jsonPayload.message 文字列 データベース アクションのログ
jsonPayload.tid 数値 ログの生成元のスレッド ID
severity 文字列(LogSeverity ログエントリ レベル(変換済み)。

mysql_slow ログの LogEntry には次のフィールドが含まれます。

フィールド タイプ 説明
jsonPayload.bytesReceived   数値 すべてのクライアントから受信したバイト数
jsonPayload.bytesSent   数値 すべてのクライアントに送信されたバイト数
jsonPayload.createdTmpDiskTables   数値 サーバーによって作成された内部ディスク上の一時テーブルの数
jsonPayload.createdTmpTables   数値 サーバーによって作成された内部一時テーブルの数
jsonPayload.database 文字列 クエリが実行されたデータベース
jsonPayload.endTime   文字列 ステートメントの実行終了時間
jsonPayload.errorNumber   数値 ステートメントのエラー番号。エラーが発生した場合は 0
jsonPayload.host 文字列 データベース インスタンスのホスト
jsonPayload.ipAddress 文字列 データベース インスタンスのアドレス
jsonPayload.killed   数値 ステートメントが終了した場合は、理由を示すエラー番号。ステートメントが正常に終了した場合は 0
jsonPayload.level 文字列 ログエントリ レベル
jsonPayload.lockTime 数値 ロックを取得するまでの時間(秒)
jsonPayload.message 文字列 クエリの全文
jsonPayload.queryTime 数値 ステートメントの実行時間(秒)
jsonPayload.readFirst   数値 インデックスの最初のエントリが読み取られた回数
jsonPayload.readKey   数値 キーに基づく行の読み取りリクエストの数
jsonPayload.readLast   数値 インデックスの最後のキーを読み取るリクエストの数
jsonPayload.readNext   数値 キー順で次の行を読み取るリクエストの数
jsonPayload.readPrev   数値 キー順の前の行を読み取るリクエストの数
jsonPayload.readRnd   数値 固定位置に基づく行の読み取りリクエストの数
jsonPayload.readRndNext   数値 データファイルの次の行を読み取るリクエストの数
jsonPayload.rowsExamined 数値 サーバーレイヤによって検査される行数
jsonPayload.rowsSent 数値 クライアントに送信された行数
jsonPayload.sortMergePasses   数値 並べ替えアルゴリズムで行う必要があったマージパスの数
jsonPayload.sortRangeCount   数値 範囲を使用して行われた並べ替えの数
jsonPayload.sortRows   数値 並べ替えられた行数
jsonPayload.sortScanCount   数値 テーブルをスキャンして行われた並べ替えの数。
jsonPayload.startTime   文字列 ステートメントの実行開始時間
jsonPayload.tid 数値 クエリがログに記録されたスレッド ID
jsonPayload.user 文字列 クエリを実行したユーザー
severity 文字列(LogSeverity ログエントリ レベル(変換済み)。

これらのフィールドは、log_slow_extra システム変数が 'ON' に設定されている場合にのみ提供されます。この変数は、MySQL 8.0.14 以降で使用できます。

これらのフィールドの詳細については、MySQL のドキュメントをご覧ください。

指標の収集を構成する

MySQL から指標を取り込むには、MySQL が生成する指標のレシーバーを作成してから、新しいレシーバー用のパイプラインを作成する必要があります。

このレシーバーでは、複数のエンドポイントのモニタリングなど、構成で複数のインスタンスを使用することはできません。このようなインスタンスはすべて同じ時系列に書き込まれるため、Cloud Monitoring ではインスタンスを区別できません。

mysql 指標のレシーバーを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
collection_interval 60s 期間の値(例: 30s5m)。
endpoint /var/run/mysqld/mysqld.sock MySQL サーバーへの接続に使用される hostname:port または / で始まる Unix ソケットパス。
password サーバーへの接続に使用するパスワード。
type 値は、mysql にする必要があります。
username root サーバーへの接続に使用するユーザー名。

モニタリング対象

次の表に、Ops エージェントが MySQL インスタンスから収集する指標の一覧を示します。

指標タイプ
種類、タイプ
モニタリング対象リソース
ラベル
workload.googleapis.com/mysql.buffer_pool_data_pages
GAUGEINT64
gce_instance
status
workload.googleapis.com/mysql.buffer_pool_limit
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.buffer_pool_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.buffer_pool_page_flushes
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/mysql.buffer_pool_pages
GAUGEDOUBLE
gce_instance
kind
workload.googleapis.com/mysql.buffer_pool_size
GAUGEDOUBLE
gce_instance
kind
workload.googleapis.com/mysql.commands
CUMULATIVEINT64
gce_instance
command
workload.googleapis.com/mysql.double_writes
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.handlers
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.locks
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.log_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.page_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.replica.sql_delay
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.replica.time_behind_source
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.row_locks
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.row_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.sorts
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.threads
GAUGEDOUBLE
gce_instance
kind

構成を確認する

このセクションでは、MySQL レシーバーが正しく構成されていることを確認する方法について説明します。Ops エージェントがテレメトリーの収集を開始するまでに 1~2 分かかる場合があります。

MySQL ログが Cloud Logging に送信されていることを確認するには、次のようにします。

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが「Logging」の結果を選択します。

  2. エディタに次のクエリを入力し、[クエリを実行] をクリックします。
    resource.type="gce_instance"
    (log_id("mysql_error") OR log_id("mysql_general") OR log_id("mysql_slow"))
    

MySQL 指標が Cloud Monitoring に送信されていることを確認するには、次のようにします。

  1. Google Cloud コンソールで、[Metrics Explorer] ページに移動します。

    Metrics Explorer に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。

  2. クエリビルダー ペインのツールバーで、[MQL] または [PROMQL] という名前のボタンを選択します。
  3. [言語] で [MQL] が選択されていることを確認します。言語切り替えボタンは、クエリの書式設定と同じツールバーにあります。
  4. エディタに次のクエリを入力し、[クエリを実行] をクリックします。
    fetch gce_instance
    | metric 'workload.googleapis.com/mysql.threads'
    | every 1m
    

ダッシュボードを表示する

MySQL 指標を表示するには、グラフまたはダッシュボードが構成されている必要があります。MySQL インテグレーションには 1 つ以上のダッシュボードが含まれています。インテグレーションを構成して Ops エージェントが指標データの収集を開始すると、ダッシュボードは自動的にインストールされます。

インテグレーションをインストールすることなく、ダッシュボードの静的プレビューを表示することもできます。

インストールされているダッシュボードを表示する手順は次のとおりです。

  1. Google Cloud コンソールで [ダッシュボード] ページに移動します。

    [ダッシュボード] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。

  2. [ダッシュボード リスト] タブを選択し、[統合] カテゴリを選択します。
  3. 表示するダッシュボードの名前をクリックします。

インテグレーションを構成してもダッシュボードがインストールされていない場合は、Ops エージェントが実行されていることを確認します。ダッシュボードにグラフの指標データがない場合、ダッシュボードのインストールは失敗します。Ops エージェントが指標の収集を開始した後に、ダッシュボードがインストールされます。

ダッシュボードの静的プレビューを表示する手順は次のとおりです。

  1. Google Cloud コンソールで [インテグレーション] ページに移動します。

    [インテグレーション] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。

  2. デプロイメント プラットフォーム フィルタの [Compute Engine] をクリックします。
  3. MySQL のエントリを見つけて [詳細を表示] をクリックします。
  4. [ダッシュボード] タブを選択すると、静的プレビューが表示されます。ダッシュボードがインストールされている場合は、[ダッシュボードを表示] をクリックして移動できます。

Cloud Monitoring のダッシュボードについて詳しくは、ダッシュボードとグラフをご覧ください。

[インテグレーション] ページの使用方法については、インテグレーションを管理するをご覧ください。

アラート ポリシーをインストールする

アラート ポリシーは、指定した条件が成立した際に通知するように Cloud Monitoring に指示します。MySQL インテグレーションには、使用するアラート ポリシーが 1 つ以上含まれています。これらのアラート ポリシーは、Monitoring の [インテグレーション] ページで表示してインストールできます。

使用可能なアラート ポリシーの説明を表示してインストールする手順は次のとおりです。

  1. Google Cloud コンソールで [統合] ページに移動します。

    [インテグレーション] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。

  2. MySQL のエントリを見つけて [詳細を表示] をクリックします。
  3. [アラート] タブを選択します。このタブには、利用可能なアラート ポリシーの説明と、それらをインストールするためのインターフェースが表示されます。
  4. アラート ポリシーをインストールします。アラート ポリシーでは、アラートがトリガーされた通知の送信先を特定する必要があるため、インストール環境の情報が必要になります。アラート ポリシーをインストールする手順は次のとおりです。
    1. 利用可能なアラート ポリシーのリストから、インストールするアラート ポリシーを選択します。
    2. [通知の構成] セクションで、1 つ以上の通知チャンネルを選択します。通知チャンネルの使用を無効にすることもできますが、無効にすると、アラート ポリシーは通知なく起動します。Monitoring でステータスを確認できますが、通知は受信しません。

      通知チャンネルの詳細については、通知チャンネルを管理するをご覧ください。

    3. [ポリシーの作成] をクリックします。

Cloud Monitoring のアラート ポリシーの詳細については、アラートの概要をご覧ください。

[インテグレーション] ページの使用方法については、インテグレーションを管理するをご覧ください。

次のステップ

Ansible を使用して Ops エージェントをインストールし、サードパーティ アプリケーションを構成してサンプル ダッシュボードをインストールする方法についてのチュートリアルは、Ops エージェントをインストールして、サードパーティ アプリケーションのトラブルシューティングを行うの動画をご覧ください。