MySQL

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

MySQL の詳細については、mysql.com をご覧ください。

前提条件

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

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

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

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

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

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

構成の例

次のコマンドは、MySQL のログと指標を収集して取り込み、Linux で 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

TCP 接続でユーザー名とパスワードを使用して MySQL インスタンスに接続するには、指標レシーバーでユーザー名とパスワードを指定します。次に例を示します。

metrics:
  receivers:
    mysql:
      type: mysql
      endpoint: localhost:3306
      password: pwd
      username: usr
  service:
    pipelines:
      mysql:
        receivers:
          - mysql

ログの収集を構成する

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

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

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


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

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


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

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

ログの内容

mysql_errormysql_generalmysql_slow ログの logName は、構成で指定されたレシーバ ID から取得されます。

MySQL のバージョンによっては、mysql_error ログの LogEntry 内に次のフィールドが含まれる場合があります。

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

空白または欠落しているフィールドはログエントリに存在しません。


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

フィールド タイプ 説明
jsonPayload.tid 数値 ログの生成元のスレッド ID
jsonPayload.command 文字列 ログに記録されるデータベース アクションの種類
jsonPayload.message 文字列 データベース アクションのログ
timestamp 文字列(Timestamp エントリがログに記録された時刻


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

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

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

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

指標の収集を構成する

MySQL から指標を収集するには、MySQL 指標を表示するレシーバーを作成し、新しいレシーバー用のパイプラインを作成する必要があります。

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

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

フィールド デフォルト 説明
type 値は mysql を指定してください。
endpoint localhost:3306 MySQL によって公開される URL。
collection_interval 60s time.Duration 値(例: 30s5m)。
username root サーバーへの接続に使用するユーザー名。
password サーバーへの接続に使用するパスワード。

モニタリング対象

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

指標タイプ
種類、タイプ
モニタリング対象リソース
ラベル
workload.googleapis.com/mysql.buffer_pool_operations
CUMULATIVEINT64
gce_instance
operation
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.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 コンソールのナビゲーション パネルで、[ロギング] を選択してから、[ログ エクスプローラ] を選択します。

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

  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 コンソールのナビゲーション パネルで [Monitoring] を選択し、次に [ Metrics Explorer] を選択します。

    Metrics Explorer に移動

  2. クエリビルダー ペインのツールバーで、名前が [MQL] または  [PromQL] のボタンを選択します。
  3. [言語] 切り替えで [MQL] が選択されていることを確認します。言語切り替えボタンは、クエリの書式設定を行うのと同じツールバーにあります。
  4. エディタに次のクエリを入力し、[クエリを実行] をクリックします。
    fetch gce_instance
    | metric 'workload.googleapis.com/mysql.commands'
    | align rate(1m)
    | 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 エージェントをインストールして、サードパーティ アプリケーションのトラブルシューティングを行うの動画をご覧ください。