スマートスタイル TECH BLOG

データベース&クラウド技術情報

pt-secure-collectの使い方

はじめに

弊社は長年サポート業務を続けていますが、お客様からよく以下のような質問を頂きます。

「MySQLでトラブルが発生した時、どのような情報を収集すればいいか分からない」

もちろん、発生している事象によって必要な情報は変わってきますが、どんなケースでも最初に取るべき情報が決まっていれば、トラブル時にも慌てず対応することができます。

本記事では、その一つの選択肢として「pt-secure-collect」というツールをご紹介します。

pt-secure-collect とは?

pt-secure-collect は、Percona Toolkit に含まれるツールの一つです。
ちなみに、2018年4月にリリースされた Ver 3.0.9 で追加された比較的新しいツールでもあります。

※ Percona Toolkitについては弊社ホームページでも解説しています

pt-secure-collect を使用すると、以下のような操作を行うことができます。

  • pt-summary, pt-mysql-summary, pt-stalk の情報を収集(詳しくは後述)
  • 収集したデータの暗号化および複合
  • 収集したデータのサニタイズ(≒ マスキング)
  • 任意の追加コマンド、ファイルの収集

同ツールは、デフォルトで以下3つのコマンドを内部的に実行しています。これらは全て Percona Toolkit に含まれています。

pt-summary

公式リファレンス
スマートスタイル説明ページ

コマンドを実行したサーバの主要な情報を収集する。具体的には以下のような情報が含まれます。

  • CPU情報(製品名、クロック数、コア数)
  • メモリ情報(全容量、使用容量、スワップ)
  • ディスク情報(ファイルシステム、I/Oスケジューラ、パーティション)
  • ネットワーク情報(接続数、アダプタ)

pt-mysql-summary

公式リファレンス
スマートスタイル説明ページ

MySQLに関する主要な情報を収集する。具体的には以下のような情報が含まれます。

  • 接続情報(接続数、processlist)
  • ステータス情報(status変数、バイナリログ)
  • InnoDB情報(バッファプール、トランザクション)
  • my.cnf

pt-stalk

公式リファレンス
スマートスタイル説明ページ

サーバおよびMySQLの負荷状況をモニタリングするための情報を収集する。
また、収集するタイミングを任意に指定することができる(1分おき、接続数が一定数を超えた時、等)

使い方

1. Percona Toolkit のインストール

上記の通り、pt-secure-collect コマンドは内部的に他のToolkitのコマンドを実行しています。そのため、Percona Toolkitをまとめてインストールしてしまうのが一番楽な方法です。

※ 個別にコマンドをダウンロード・インストールすることもできます

また、pt-stalkは iostat / mpstat コマンドを使用しているため、もし未インストールであれば sysstat パッケージもインストールします。

2. 情報を収集する

情報を収集したい場合は、collect句を付けます。あわせてMySQLのユーザ名なども指定します。

その他にも、以下のようなオプションが用意されています。

オプション デフォルト 説明
–bin-dir $PATH pt-summaryなどのコマンドが格納されたディレクトリ
各コマンドを個別にダウンロードした場合は配置先を指定します
–temp-dir ${HOME}/data_collection_{timestamp} 収集したデータを保存するディレクトリ
–include-dir サニタイズされた.tarファイルに含めるディレクトリ
–config-file ~/.my.cnf 設定ファイルのパス
–mysql-host 127.0.0.1 MySQLのホスト
–mysql-port 3306 MySQLのポート
–mysql-user MySQLのユーザ
–mysql-password 上記ユーザのパスワード
–ask-mysql-pass MySQLユーザのパスワードを対話式で指定
–extra-cmd データ収集時に合わせて任意のコマンドを実行できる
複数のコマンドを指定することも可能
–encrypt-password 暗号化する時のパスワードを設定
–no-collect データを収集しない(テスト実行などに使用)
–no-sanitize サニタイズを実行しない
–no-encrypt 収集したデータの暗号化を行わない
–no-sanitize-hostnames ホストネームをサニタイズしない
–no-sanitize-queries クエリをサニタイズしない
–no-remove-temp-files 収集する時の一時ファイルを削除しない

3. 収集データを復号する

暗号化されたデータを復号したい時は、decrypt句をつけます。

4. 収集データを確認する

収集データは .tar.gz で圧縮されているため、展開して中身を確認します。

5. 収集データを暗号化/サニタイズする

収集データは後から暗号化、もしくはサニタイズすることもできます。
その場合、encrypt句 or sanitize句を付けます。

動作検証

ケース1:MySQL5.7 / 8.0

まずは dbdeployer でシングル構成のMySQL5.7を構築し、そこに対してpt-secure-collect を実行してみましたが、こちらは問題なくデータ収集できました。

※ 暗号化のパスワードを “空文字” にするとデータは取れないようです(バグレポート

つぎはMySQL8.0に対して実行してみます。こちらも問題なく実行できました。

ケース2:非同期レプリケーション

残念ながら、pt-secure-collect にはレプリケーション向けのオプションなどは用意されていません。ただ、pt-stalkが収集する情報の中には「***-slave-status」のようにスレーブ情報も含まれているので、問題発生時の調査にも有益な情報です。

そこで、マスタ・スレーブに対して同時に pt-secure-collect を実行します。
この時、収集データ名を指定してどれが該当サーバの情報かどうか判別できるようにすると良いです。また、パスワード入力部分をスキップするため、–encrypt-passwordオプションを指定してください。

ケース3:グループレプリケーション

次に、MySQLにおける新たなレプリケーション形式である Group Replication ですが、残念ながら pt-secure-collect が収集する情報には、同レプリケーション関連の主要な情報は含まれていません(Feature Request)。
そのため、Group Replication の監視情報を、–extra-cmdオプションを追加して収集します。

まずは、Group Replication情報を収集するシェルスクリプトを用意します。
今回は Performance_schema の replication_group_member_stats / replication_group_members テーブルから情報を取得します。

pt-secure-collect を実行する時に、–extra-cmdオプションでこのシェルを指定すればGroup Replication情報を一緒に収集できます。

ケース4:MariaDB

次に、MySQLフォークであるMariaDBでも動作するか確認します。
最新GAバージョンの 10.4 で試してみます。

問題なく実行できました。

ケース5:Percona製品

pt-secure-collectはPercona社が開発・サポートを行っています。
そのため、同社の製品である Percona Server for MySQL および Percona XtraDB Cluster に対して問題なく実行できます。

また、Percona XtraDB Cluster(= Galera Cluster)のレプリケーション情報は pt-stalk が収集するデータに含まれているため、追加で収集する情報はございません。

補足:pt-stalkで取得する情報の解説

pt-secure-collectが収集する情報の大半は pt-stalk コマンドによって取得されたものです。そこで、どのような情報が含まれているのか簡単に説明します。

※ 詳細はGitHubのページを参考にしています

ファイル名 説明 コマンド
df ディスクの使用状況 df -k
disk-space ディスクの空き容量 check_disk_space()
diskstats I/O統計 cat /proc/diskstats
hostname ホストネーム hostname
innodbstatus1 InnoDBの統計情報 mysql -e ‘SHOW ENGINE INNODB STATUS’
innodbstatus2 同上 同上
interrupts 割り込み情報 cat /proc/interrupts
iostat iostat実行結果 iostat -dx $OPT_SLEEP_COLLECT $cnt
iostat-overall iostat実行結果(累積) iostat -dx $OPT_RUN_TIME 2
log_error MySQLエラーログ tail -f “$mysql_error_log”
lsof mysqlプロセスが開いてるファイル lsof $mysqld_pid
meminfo メモリ情報 cat /proc/meminfo
mpstat mpstat実行結果 mpstat -P ALL $OPT_SLEEP_COLLECT $cnt
mpstat-overall mpstat実行結果(累積) mpstat -P ALL $OPT_RUN_TIME 1
mysqladmin MySQLステータス情報 mysqladmin extended-status
netstat ネットワーク情報 netstat -antp
netstat_s プロトコルの統計 netstat -s
opentables1 テーブル統計 mysql -e ‘SHOW OPEN TABLES’
opentables2 同上 同上
output ツール実行中の標準出力
pmap mysqlプロセスのpmap pmap -x $mysqld_pid
processlist プロセスリスト mysql -e “SHOW FULL PROCESSLIST\G”
procstat システムの統計 cat /proc/stat
procvmstat vmstatの内容 cat /proc/vmstat
ps プロセス情報 ps -eaF
ps-locks-transactions Performance_schemaのロック情報 ps_locks_transactions()
slave-status スレーブ情報 slave_status()
sysctl システム変数 sysctl -a
top topコマンド top -bn${OPT_RUN_TIME}
trigger pt-stalkのトリガ記録
variables MySQL変数情報 SHOW GLOBAL VARIABLES
vmstat vmstat vmstat $OPT_SLEEP_COLLECT $cnt
vmstat-overall vmstat(累積) vmstat $OPT_RUN_TIME 2

おわりに

以上、pt-secure-collect について説明しました。
何か問題が発生した時に手軽に取得できる情報として、とても便利なため是非使ってみてください。

MySQL
Return Top