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

ログの収集を構成する

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)。このプロパティは、ログファイルのローテーションがデフォルトの間隔よりも速く、ロギングのスループットが高い場合に有用です。

ログの内容

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

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

フィールド タイプ 説明
jsonPayload.errorCode 文字列 ログに関連付けられた MySQL エラーコード
jsonPayload.level 文字列 ログエントリ レベル
jsonPayload.message 文字列 ログメッセージ
jsonPayload.tid 数値 ログの生成元のスレッド ID
jsonPayload.subsystem 文字列 ログが発生した MySQL サブシステム
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.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 time.Duration 値(例: 30s5m)。
endpoint localhost:3306 MySQL によって公開される URL。
password サーバーへの接続に使用するパスワード。
type 値は mysql を指定してください。
username root サーバーへの接続に使用するユーザー名。

モニタリング対象

次の表に、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 コンソールで、[ログ エクスプローラ] ページに移動します。

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

    検索バーを使用してこのページを検索する場合は、小見出しが [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] または [MQL] という名前のボタンを選択します。
  3. [MQL] 切り替えで [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 エージェントをインストールして、サードパーティ アプリケーションのトラブルシューティングを行うの動画をご覧ください。