TrueWatch ワークショップ:TrueWatchでMySQLを監視する:エンドツーエンド構築ガイド(ステップバイステップ)

2026年9月21日By Admin

参考: MySQLインテグレーションの詳細なフィールド定義については、TrueWatch MySQL Integration Docs をご覧ください。

このガイドで達成できること

このステップバイステップガイドに従うことで、以下が可能になります:

  • TrueWatch DataKit をインストール・設定し、MySQL に接続する
  • セキュアな最小権限の監視用ユーザーを作成する
  • 必要に応じて MySQL の一般ログ/スロークエリログを有効化し収集する
  • TrueWatch で実用的な MySQL 監視ダッシュボードを構築する

対象読者: エンタープライズグレードの MySQL 監視を迅速に導入したいバックエンドエンジニア、SRE、DBA。


前提条件

  • 到達可能な MySQL 5.7+ / 8.0+ インスタンス(クラウド RDS でも可)
  • 推奨: performance_schema を完全にカバーする MySQL 8.0
  • ユーザー作成および権限付与を行う権限
  • TrueWatch DataKit をデプロイできる環境(Docker またはホストインストール)

アーキテクチャ概要

MySQL  ← (監視用ユーザー, performance_schema)

DataKit (コンテナまたはホスト) → メトリクス / ログ / スロークエリを TrueWatch に送信

eBPF/ホストレベルのテレメトリが必要な場合は、ホストインストールを推奨します。DBのみの監視であれば、コンテナで十分です。


Step 1: performance_schema の確認と有効化

多くのデータベースメトリクスは MySQL の performance_schema から取得されます。有効になっているか確認してください:

SHOW VARIABLES LIKE 'performance_schema';

Value = OFF の場合は、環境に応じて有効化してください:

  • my.cnf にて:
[mysqld]
performance_schema=ON

MySQL を再起動し、ON になっていることを確認してください。

マネージドサービス(例: Aliyun RDS)では、performance_schema が無効または制限されている場合、一部の測定項目(例: mysql_user_status)が制限されることがあります。詳細な FAQ と対処法は TrueWatch MySQL Integration Docs をご覧ください。


Step 2: 最小権限の監視用ユーザーを作成する

セキュリティとオブザーバビリティのため、専用の読み取り専用ユーザーを作成してください(ユーザー名/パスワードは適宜変更してください):

CREATE USER 'datakit'@'%' IDENTIFIED WITH caching_sha2_password BY 'datakit_password';
GRANT PROCESS ON *.* TO 'datakit'@'%';
GRANT SELECT ON *.* TO 'datakit'@'%';
GRANT SELECT ON performance_schema.* TO 'datakit'@'%';
GRANT SELECT ON mysql.user TO 'datakit'@'%';
GRANT REPLICATION CLIENT ON *.* TO 'datakit'@'%';
FLUSH PRIVILEGES;

これらの権限が必要な理由:

  • PROCESS: 実行中のクエリと接続を確認する
  • SELECT (performance_schema を含む): パフォーマンスと統計データを読み取る
  • REPLICATION CLIENT: レプリケーションステータスを読み取る(該当する場合)

Step 3: DataKit のインストールと起動(いずれかを選択)

DataKit をコンテナまたはホストにインストールします(公式ガイドから簡略化したコマンドです):

3A. Docker(クイックスタート)

datakit-install-docker.png

#1) TrueWatch コンソール → DataKit → Docker で、DataWay を選択し、生成されたコマンド/トークンをコピーします。 #2) 対象ホストで以下を実行します:

docker run -d --name datakit \
  --hostname "$(hostname)" \
  -p 9529:9529 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(pwd)/conf.d:/usr/local/datakit/conf.d \
  -e ENV_DATAWAY="https://<your-openway-host>?token=<your_token>" \
  -e ENV_HTTP_LISTEN="0.0.0.0:9529" \
  pubrepo.truewatch.com/truewatch/datakit:1.80.1

#3) 次のステップで作成する mysql.conf を、マウントした conf.d/ ディレクトリ(できれば conf.d/db/)に配置してください。DataKit が自動的に読み込みます。

その他の環境変数や高度なオプション(プロキシ、リソース制限、ロギングなど)については、公式ドキュメントをご覧ください: DataKit Installation Docs

3B. ホストインストール(eBPF/ホストメトリクスに推奨)

datakit-install-host.png

#1) TrueWatch コンソール → DataKit → Linux で DataWay を選択し、トークン付きコマンドをコピーします。

#2) 対象ホストで以下を実行します(DataKit をインストールして起動します):

DK_DATAWAY="https://<your-openway-host>?token=<your_token>" bash -c "$(curl -L https://static.truewatch.com/datakit/install.sh)"

#3) mysql.conf を DataKit の conf.d/db/ に配置し、サービスを再起動します:

sudo systemctl restart datakit

DK_INSTALL_ONLY、プロキシ、アップグレードなどの追加オプションについては、公式ドキュメントをご確認ください: DataKit Installation Docs


Step 4: DataKit の MySQL 入力を設定する(inputs.mysql)

DataKit の conf.d/db ディレクトリに mysql.conf を作成または編集します:

[[inputs.mysql]]
  host = "db"              # または MySQL のアドレス(FQDN/IP)
  user = "datakit"         # 監視用ユーザー
  pass = "datakit_password"
  port = 3306
  interval = "10s"
  innodb = true             # 主要な InnoDB メトリクスを収集
  dbm = true                # Database Monitoring(クエリ分析)を有効化
  election = true           # 複数の DataKit が存在する場合、単一のリーダーが収集を行う

フィールドの意味とチューニングのヒント: TrueWatch MySQL Integration Docs をご覧ください。

DataKit を再起動(またはホットリロード)すると、メトリクスの送信が開始されます。


Step 5(オプション): MySQL の一般ログ/スロークエリログを収集する

TrueWatch は MySQL の一般ログとスロークエリログを取り込み、高レイテンシの SQL を特定できます。

5A. スロークエリログを有効化する(MySQL)

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL log_queries_not_using_indexes = 'ON';  -- オプション: インデックスを使用していないクエリにフラグを付ける
-- 推奨設定(my.cnf に永続化):
SET GLOBAL long_query_time = 1;                   -- スロークエリのしきい値(秒)

設定を永続化するには、my.cnf に以下を追加します(例):

[mysqld]
slow_query_log=ON
long_query_time=1
log_queries_not_using_indexes=ON
log_output=FILE
slow_query_log_file=/var/log/mysql/slow.log

5B. DataKit によるログ収集(ホストインストールで一般的)

conf.d/mysql.conf に追記します(または新しいセクションを作成します):

[inputs.mysql.log]
  files = ["/var/log/mysql/*.log"]  # 実際の絶対パスに合わせて調整してください

ログフィールドの詳細なマッピング(通常/スロー)については、TrueWatch MySQL Integration Docs をご覧ください。


Step 6: データ取り込みを確認する

#1) DataKit のステータスページ(デフォルトポート 9529)を確認し、入力の状態を確認します #2) TrueWatch Explorer で mysqlmysql_replication_log などのメジャーメントを検索します #3) connectionsquery_timelock_timerows_examinedrows_sent などのフィールドを確認します

特定のメジャーメント(例: mysql_user_status)が見つからない場合は、performance_schema が有効になっているか確認するか、RDS の制限を確認してください。詳細は TrueWatch MySQL Integration Docs の FAQ をご覧ください。


Step 7: 実用的な MySQL ダッシュボードを構築する

A. テンプレートダッシュボードを使用する(推奨)

#1) 左側の Scenes → 上部の DashboardsCreate をクリックします。

create-dashboard.png

#2) System Views の中で mysql を検索し、Mysql Monitor View(またはクラウド固有の MySQL テンプレート)を選択します。

mysql-template-dashboard.png

#3) このテンプレートには、接続数、クエリレイテンシ、InnoDB、レプリケーションに関する一般的なチャートが含まれています。必要に応じてカスタマイズしてください。

テンプレートのソースとフィールドの参照先: TrueWatch MySQL Integration Docs

B. 独自のウィジェットを構築する(柔軟性重視)

ダッシュボードプレビュー

mysql-view-1.png

mysql-view-2.png

ウィジェット設定例(QPS / TPS)

  • QPS: メトリクス mysqlQuestionsnon_negative_derivative を適用して、1秒あたりのクエリ数を取得します。

QPS.png

  • TPS: A+B 式を使って Handler_commitHandler_rollback を合計し、それぞれに non_negative_derivative を適用して、1秒あたりのトランザクション数を取得します。

TPS.png

以下は、一般的な DB 監視ニーズに対応する実証済みのウィジェットです。Simple/Expression/DQL クエリを適宜使用して、TrueWatch ダッシュボードに追加してください。

フィールドの例は mysqlmysql_replication_log などのメジャーメントを参照しています。フィールドの有無は Explorer で確認してください。

A. 概要

  • 時系列(接続数)

    • ソース: mysql.connections
    • ディメンション: server(host:port)
    • 目的: 同時実行数とスパイクを監視する
  • 単一値/トレンド(p95 クエリ時間)

    • ソース: mysql.query_time
    • 集計: 5分間の p95
    • 目的: テールレイテンシを一目で確認する
  • 単一値/トレンド(ロック待機時間)

    • ソース: mysql.lock_time
    • 集計: 5分間の平均値(または p95)
    • 目的: ロック競合とブロッキングを検出する
  • 単一値(1分あたりのスロークエリ数)

    • ソース: スロークエリログ(inputs.mysql.log)
    • 方法: db_slow_statement が存在するイベントをカウントする
    • 目的: スロークエリの急増を捕捉する

B. InnoDB とスループット

  • 時系列(Rows Examined / Rows Sent)

    • ソース: mysql.rows_examinedmysql.rows_sent
    • 集計: 合計またはレート
    • 目的: 読み取り量と返却された行数を理解し、効率を推測する
  • テーブル(トップホットテーブル/インデックス)

    • ソース: mysql.index_namemysql.object_namemysql.object_schema
    • 集計: query_signature または object_name でグループ化し、平均 query_time とカウントを表示する
    • 目的: ホットテーブル/インデックスと低速な操作を特定する

C. トップNの問題クエリ(ログ/イベント)

  • テーブル(平均実行時間によるトップスロークエリ)

    • ソース: スロークエリログまたは mysql イベント
    • 列: query_signaturesql_text(または正規化された message)
    • メトリクス: avg(query_time)、count()
  • テーブル(トップ待機イベント)

    • ソース: mysql.wait_eventevent_name
    • メトリクス: sum(event_timer_wait)

D. レプリケーション(該当する場合)

  • 単一値/テーブル(Master / Executed GTID Set サマリー)
    • ソース: mysql_replication_log.Executed_Gtid_SetMaster_HostMaster_Port
    • 目的: マスター関係と GTID の進行状況を確認する

ヒント: 利用可能であれば、レプリケーション遅延の単一値/時系列として Seconds_Behind_Master を追加してください。


ベストプラクティスとセキュリティ

  • アプリケーションアカウントとは別に、専用の最小権限監視用ユーザーを使用する
  • ステージング環境では収集頻度を高く(例: interval = "10s")しても問題ありません。本番環境ではコストとパフォーマンスに応じて調整してください
  • long_query_timelog_queries_not_using_indexes を調整し、ノイズと有効な情報のバランスを取る
  • コンテナ環境では、機密性の高いパスの共有を避けるため、ファイルマウントよりも標準出力/ログドライバーを優先する
  • 認証情報はファイルにコミットせず、シークレットや環境変数に保存する

FAQ とトラブルシューティング

Q: mysql_user_status メジャーメントが表示されません。

A: performance_schemaON になっていることを確認してください:

SHOW VARIABLES LIKE 'performance_schema';

OFF の場合は、DB/RDS プロバイダーに応じて有効化してください。一部の RDS 製品では制限されている場合があります。詳細は TrueWatch MySQL Integration Docs をご覧ください。

Q: DataKit は動作していますが、データが届きません。

  • mysql.conf の接続情報(host/user/pass/port)を確認してください
  • セキュリティグループ/ファイアウォールが DataKit から MySQL への接続を許可していることを確認してください
  • DataKit のステータスページ/ログで接続エラーや権限エラーを確認してください

Q: スロークエリが表示されません。

  • slow_query_log が有効になっていることを確認してください
  • コンテナからファイルを収集している場合は、絶対パスが読み取り可能であることを確認してください(標準出力/サイドカーの方が簡単な場合が多いです)
  • Explorer でログインデックスを検索し、マーカー(例: [MYSQL_QUERY])またはスローログフィールドを確認してください

参考資料

  • 公式インテグレーションドキュメントとフィールド定義: TrueWatch MySQL Integration Docs
  • 私たちのインテグレーションの経緯と根拠(監視用ユーザー、DataKit 入力、サイドカー): demo-project/INTEGRATION_GUIDE.md

これらの手順により、MySQL を TrueWatch と統合し、実用的なダッシュボードを構築できました。次は、アラート(Monitors)、定期レポート、サービス間の相関分析を追加して、エンドツーエンドで本番運用に耐えるデータベースオブザーバビリティを実現しましょう。

Get in touch background

TrueWatchで、オブザーバビリティのその先へ。