参考: 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=ONMySQL を再起動し、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(クイックスタート)

#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/ホストメトリクスに推奨)

#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.log5B. 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 で mysql、mysql_replication_log などのメジャーメントを検索します
#3) connections、query_time、lock_time、rows_examined、rows_sent などのフィールドを確認します
特定のメジャーメント(例: mysql_user_status)が見つからない場合は、performance_schema が有効になっているか確認するか、RDS の制限を確認してください。詳細は TrueWatch MySQL Integration Docs の FAQ をご覧ください。
Step 7: 実用的な MySQL ダッシュボードを構築する
A. テンプレートダッシュボードを使用する(推奨)
#1) 左側の Scenes → 上部の Dashboards → Create をクリックします。

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

#3) このテンプレートには、接続数、クエリレイテンシ、InnoDB、レプリケーションに関する一般的なチャートが含まれています。必要に応じてカスタマイズしてください。
テンプレートのソースとフィールドの参照先: TrueWatch MySQL Integration Docs
B. 独自のウィジェットを構築する(柔軟性重視)
ダッシュボードプレビュー


ウィジェット設定例(QPS / TPS)
- QPS: メトリクス
mysqlのQuestionsにnon_negative_derivativeを適用して、1秒あたりのクエリ数を取得します。

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

以下は、一般的な DB 監視ニーズに対応する実証済みのウィジェットです。Simple/Expression/DQL クエリを適宜使用して、TrueWatch ダッシュボードに追加してください。
フィールドの例は
mysqlやmysql_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_examined、mysql.rows_sent - 集計: 合計またはレート
- 目的: 読み取り量と返却された行数を理解し、効率を推測する
- ソース:
-
テーブル(トップホットテーブル/インデックス)
- ソース:
mysql.index_name、mysql.object_name、mysql.object_schema - 集計:
query_signatureまたはobject_nameでグループ化し、平均query_timeとカウントを表示する - 目的: ホットテーブル/インデックスと低速な操作を特定する
- ソース:
C. トップNの問題クエリ(ログ/イベント)
-
テーブル(平均実行時間によるトップスロークエリ)
- ソース: スロークエリログまたは
mysqlイベント - 列:
query_signature、sql_text(または正規化されたmessage) - メトリクス: avg(
query_time)、count()
- ソース: スロークエリログまたは
-
テーブル(トップ待機イベント)
- ソース:
mysql.wait_event、event_name - メトリクス: sum(
event_timer_wait)
- ソース:
D. レプリケーション(該当する場合)
- 単一値/テーブル(Master / Executed GTID Set サマリー)
- ソース:
mysql_replication_log.Executed_Gtid_Set、Master_Host、Master_Port - 目的: マスター関係と GTID の進行状況を確認する
- ソース:
ヒント: 利用可能であれば、レプリケーション遅延の単一値/時系列として
Seconds_Behind_Masterを追加してください。
ベストプラクティスとセキュリティ
- アプリケーションアカウントとは別に、専用の最小権限監視用ユーザーを使用する
- ステージング環境では収集頻度を高く(例:
interval = "10s")しても問題ありません。本番環境ではコストとパフォーマンスに応じて調整してください long_query_timeとlog_queries_not_using_indexesを調整し、ノイズと有効な情報のバランスを取る- コンテナ環境では、機密性の高いパスの共有を避けるため、ファイルマウントよりも標準出力/ログドライバーを優先する
- 認証情報はファイルにコミットせず、シークレットや環境変数に保存する
FAQ とトラブルシューティング
Q: mysql_user_status メジャーメントが表示されません。
A:
performance_schemaがONになっていることを確認してください:
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)、定期レポート、サービス間の相関分析を追加して、エンドツーエンドで本番運用に耐えるデータベースオブザーバビリティを実現しましょう。

