これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド pt-stalkp です。
プログラム:
NAME
pt-stalk - 問題が発生したときに MySQL に関するフォレンジック データを収集します.
SYNOPSIS
使用法: pt-stalk [オプション]
pt-stalk は、トリガー条件が発生するのを待ってから、診断に役立つデータを収集します
問題。 このツールは、ルート権限を持つデーモンとして実行するように設計されているため、次のことができます。
直接観察できない断続的な問題を診断します。 また、それを使用することができます
カスタム コマンドを実行する、またはトリガーを待たずにオンデマンドでデータを収集する
発生します。
リスク
Percona Toolkit は成熟しており、現実世界で実証されており、十分にテストされていますが、すべてデータベースです
ツールはシステムやデータベース サーバーにリスクをもたらす可能性があります。 このツールを使用する前に、
お願いします:
・ツールのドキュメントを読む
・ツールの既知の「バグ」を確認します
· 非運用サーバーでツールをテストする
· 運用サーバーをバックアップし、バックアップを検証します。
DESCRIPTION
問題が発生する頻度が低く、短時間であるために、問題を確認する機会がない場合があります。
発生時のシステム。 断続的な MySQL の問題を解決できない場合、どのように解決しますか?
それらを観察しますか? それが pt-stalk が存在する理由です。 既知の場合に使用することに加えて、
サーバーに問題がある場合でも、常に pt-stalk を実行することをお勧めします。
何も悪くないと思います。 問題が発生したときに収集するデータに感謝します。
MySQL のロックアップやアクティビティの急増などの問題は、通常、証拠を残さないためです。
根本原因分析に使用します。
pt-stalk は XNUMX つのことを行います。MySQL サーバーを監視し、トリガー条件が発生するのを待ちます。
発生し、そのトリガーが発生したときに診断データを収集します。 誤検知を避けるために
短命の問題が原因の場合、トリガー条件は少なくとも「--cycles」で真でなければなりません
「--collect」がトリガーされる前に回。
pt-stalk を効果的に使用するには、適切なトリガーを定義する必要があります。 良いきっかけは
問題が発生したときに確実に起動できるほど感度が高いため、チャンスを逃すことはありません
問題を解決する。 一方、良いトリガーは誤検知を起こしにくいので、
サーバーが正常に機能しているときは、情報を収集しません。
MySQL の最も信頼できるトリガーは、サーバーへの接続数である傾向があります。
同時に実行されているクエリの数。 これらは、SHOW GLOBAL で入手できます。
Threads_connected および Threads_running としての STATUS コマンド。 時々 Threads_connected は
信頼できるトラブルの指標ではありませんが、Threads_running は通常そうです。 あなたの仕事は、
ツールのユーザーは、ツールの適切なトリガー条件を定義する必要があります。 選ぶ
結果の品質は、選択したトリガーによって異なるため、慎重に行ってください。
「--function」、「--variable」、「--threshold」、および「--cycles」でトリガーを定義します。
オプション。 これらのオプションのデフォルト値は妥当なトリガーを定義しますが、
特定のシステムとニーズに合わせて調整または変更します。
デフォルトでは、pt-stalk ツールはトリガーが発生するまで MySQL を永久に監視し、その後収集します
しばらくの間診断データを収集し、その後スリープして、データを繰り返し収集しないようにします。
トリガーは true のままです。 操作の一般的な順序は次のとおりです。
真実である間; 行う
if --variable from --function > --threshold; それから
サイクル_真++
cycle_true >= --cycles の場合。 それから
--メールで通知
場合 -- 収集します。 それから
--disk-bytes-free および --disk-pct-free OK の場合。 それから
( --run-time 秒の --collect ) &
fi
--dest の rm ファイルが --retention-time より古い
fi
反復++
cycle_true=0
fi
if iter < --iterations; それから
sleep --sleep 秒
ほかに
破る
fi
ほかに
if iter < --iterations; それから
sleep --interval 秒
ほかに
破る
fi
fi
行われ
rm old --dest --retention-time より古いファイル
--collect プロセスがまだ実行中の場合。 それから
--run-time * 3 秒まで待機
残りの --collect プロセスを強制終了します
fi
診断データは、名前がタイムスタンプで始まるファイルに書き込まれるため、
ツールがデータを複数回収集する場合に備えて、サンプルを互いに区別します。 の
pt-sift ツールは、結果のデータ サンプルを参照して分析できるように設計されています。
これは非常に単純に聞こえますが、実際には次のような多くの微妙な点があります。
ディスクがいっぱいになり始めていることを検出して、ツールがサーバーに問題を引き起こさないようにする
ディスク容量が不足します。 このツールは、このような潜在的な問題を処理します。
ゼロから何かを作成する代わりに、このツールを使用することをお勧めします。
このツールが回避するように設計されているいくつかの危険を経験しています。
構成
標準の Percona Toolkit 構成ファイルを使用して、コマンド ライン オプションを設定できます。
ツールをデーモンとして実行し、少なくとも
" - しきい値"。 より多い場合にトリガーするためのサンプル構成ファイルを次に示します。
一度に実行される 20 個のクエリ:
デーモン化する
しきい値=20
ツールをルートとして実行しない場合は、次のようないくつかのオプションを指定する必要があります。
「--pid」、「--log」、および「--dest」を使用しないと、ツールの起動に失敗する可能性があります。
OPTIONS
--ask-pass
MySQL に接続するときにパスワードの入力を求められます。
- 収集
デフォルト: はい; 否定可能: はい
トリガーが発生したときに診断データを収集します。 「--no-collect」を指定して、
ツールはシステムを監視しますが、データを収集しません。
「--stalk」も参照してください。
--collect-gdb
GDB スタックトレースを収集します。 これは、MySQL にアタッチしてスタックを印刷することで実現されます。
すべてのスレッドからのトレース。 これにより、サーバーが一定期間フリーズします。
大量のメモリと多数の非常にビジーなシステムでは、XNUMX 秒ほどからずっと長くなります。
サーバー内のスレッド。 このため、デフォルトでは無効になっています。 ただし、
サーバーのストールまたはロックアップを診断しようとしている場合、サーバーをフリーズすると問題が発生しません
追加の害があり、スタック トレースは診断に不可欠です。
サーバーがフリーズするだけでなく、サーバーがクラッシュしたり、クラッシュしたりするリスクもあります。
GDB がデタッチされた後、パフォーマンスが低下します。
--collect-oprofile
oprofile データを収集します。 これは、oprofile セッションを開始することで実現されます。
収集時に実行し、結果のプロファイル データを停止して保存する
システムのデフォルトの場所にあります。 システムの oprofile ドキュメントを読んでください。
これについてもっと学びましょう。
--コレクトレース
strace データを収集します。 これは strace をサーバーに接続することで実現されます。
strace がデタッチされるまで非常にゆっくり実行します。 注意事項は上記と同じ
--collect-gdb にリストされています。 このオプションを一緒に有効にしないでください
--collect-gdb、GDB と strace がサーバー プロセスにアタッチできないため
同時に。
--collect-tcpdump
tcpdump データを収集します。 このオプションにより、tcpdump はすべてのトラフィックをキャプチャします。
MySQL がリッスンしているポートのインターフェース。 後で pt-query- を使用できます
ダイジェストを使用して MySQL プロトコルをデコードし、そこからクエリ トラフィックのログを抽出します。
--config
タイプ:文字列
このコンマ区切りの構成ファイルのリストを読んでください。 指定する場合、これが最初である必要があります
コマンドラインのオプション。
--サイクル
タイプ:int; デフォルト:5
トリガーする前に、「--variable」が「--threshold」より大きくなければならない回数
" - 収集"。 これにより、誤検知が防止され、トリガー条件が少なくなります。
問題がすぐに回復したときに発生する可能性があります。
-デーモン化
ツールをデーモン化します。 これにより、ツールはバックグラウンドに分岐し、ログに記録します
--log で指定されたとおりに出力します。
--デフォルトファイル
短縮形: -F; タイプ: 文字列
指定されたファイルから mysql オプションのみを読み取ります。 絶対パス名を指定する必要があります。
-宛先
タイプ: 文字列; デフォルト: /var/lib/pt-stalk
「--collect」からの診断データを保存する場所。 ツールがデータを収集するたびに、
現在のシステムタイムスタンプで名前が付けられた新しいファイルセットに書き込みます。
--ディスクバイトフリー
タイプ: サイズ; デフォルト: 100M
ディスクの空き容量がこれより少ない場合は、「--collect」を実行しないでください。 これにより、
ツールが診断データでディスクをいっぱいにしないようにします。
「--dest」ディレクトリに以前にキャプチャされたデータのサンプルが含まれている場合、ツールは
そのサイズを測定し、それを収集される可能性のあるデータ量の推定値として使用します
今回も。 その後、さらに悲観的になり、収集を拒否します
ディスクにサンプルを保持するのに十分な空き容量があり、まだデータが残っている場合を除きます。
必要な空き容量。 たとえば、100MB の空き容量が必要な場合、
以前の診断サンプルが 100 MB を消費した場合、ツールはデータを収集しません。
ディスクには 200MB の空き容量があります。
有効なサイズ値のサフィックスは、k、M、G、および T です。
--ディスク PCT フリー
タイプ:int; デフォルト:5
ディスクの空き容量がこのパーセント未満の場合は、「--collect」を実行しないでください。 これにより、
ツールが診断データでディスクをいっぱいにするのを防ぎます。
このオプションは「--disk-bytes-free」と同様に機能しますが、パーセントのマージンを指定します
バイトの安全マージンではなく、安全のマージン。 ツールは両方のオプションを尊重し、
両方のマージンが満たされない限り、データを収集しません。
- 関数
タイプ: 文字列; デフォルト: ステータス
トリガーを監視する対象。 デフォルト値は「SHOW GLOBAL STATUS」を監視していますが、
「SHOW PROCESSLIST」を見て、独自のカスタム コードでファイルを指定することもできます。
この関数は「--variable」の値を提供し、それを比較します
トリガー条件が満たされているかどうかを確認するには、「--threshold」を使用します。 追加のオプションは
同様に必要です。 下記参照。 可能な値は次のとおりです。
・ スターテス
トリガーについては、「SHOW GLOBAL STATUS」を参照してください。 「--variable」の値
トリガーとなるステータス カウンターを定義します。
· プロセスリスト
トリガーについては、「SHOW FULL PROCESSLIST」を参照してください。 トリガー値は、
「--variable」列が「--match」オプションと一致するプロセス。 たとえば、
10 を超えるプロセスが「統計」状態にある場合、「--collect」をトリガーします。
特定:
--関数プロセスリスト\
--変数の状態\
--マッチ統計\
-- しきい値 10
さらに、カスタム トリガー関数を含むファイルを指定できます。
Unix シェルスクリプトで書かれています。 これは、任意のものを実行するラッパーにすることができます。
「--function」の引数がファイルの場合、ビルトインよりも優先されます
そのため、作業ディレクトリに「status」という名前のファイルがある場合、または
「processlist」の場合、有効な組み込み値であっても、ツールはそのファイルを使用します。
ファイルは「trg_plugin」と呼ばれる関数を提供することで機能し、ツールは単純に
ファイルをソースし、関数を実行します。 たとえば、ファイルには次のものが含まれる場合があります。
trg_plugin() {
mysql $EXT_ARGV -e "SHOW ENGINE INNODB STATUS" \
| | grep -c 「待っていました」
}
このスニペットは、InnoDB 内のミューテックス待機の数をカウントします。 それは
一般原則: 関数は数値を出力する必要があり、それは次に比較されます
いつものように「--しきい値」。 $EXT_ARGV 変数には、上記の MySQL オプションが含まれています
上記の「あらすじ」で。
このファイルは、ツールの既存のグローバル変数を変更してはなりません。 任意のファイルにプレフィックスを付けます-
「PLUGIN_」を使用して特定のグローバル変数を定義するか、それらをローカルにします。
- 助けて
ヘルプを印刷して終了します。
- ホスト
短い形式: -h; タイプ: 文字列
接続するホスト。
- 間隔
タイプ:int; デフォルト:1
if トリガーが true であることを確認する頻度 (秒単位)。
-反復
タイプ:int
診断データを「--collect」する回数。 デフォルトでは、ツールは無期限に実行され、
トリガーが発生するたびにデータを収集します。 「--iterations」を指定してデータを収集します
回数限定。 このオプションは、データを収集するために「--no-stalk」でも役立ちます
たとえば、一度終了します。
- ログ
タイプ: 文字列; デフォルト: /var/log/pt-stalk.log
デーモン化されたときに、すべての出力をこのファイルに出力します。
- マッチ
タイプ:文字列
SHOW PROCESSLIST を見るときに使用するパターン。 詳細については、「--関数」を参照してください。
--メールで通知
タイプ:文字列
「--collect」ごとにこれらのアドレスに電子メールを送信します。
- パスワード
短い形式: -p; タイプ: 文字列
接続時に使用するパスワード。 パスワードにカンマが含まれている場合はエスケープする必要があります
バックスラッシュ付き: "exam\,ple"
--pid
タイプ: 文字列; デフォルト: /var/run/pt-stalk.pid
指定された PID ファイルを作成します。 PID ファイルがすでに存在する場合、ツールは起動しません。
含まれているPIDは、現在のPIDとは異なります。 ただし、PIDファイルの場合
存在し、それに含まれる PID が実行されなくなった場合、ツールは PID を上書きします
現在の PID を持つファイル。 PID ファイルは、ツールが終了すると自動的に削除されます。
-プラグイン
タイプ:文字列
プラグインをロードしてツールにフックし、機能を拡張します。 指定したファイル
実行可能である必要はなく、最初の行がシバン行である必要もありません。 これ
これらの Bash 関数を XNUMX つ以上定義するだけで済みます。
before_stalk
ストーキング前に電話。
before_collect
トリガーが発生したときに、「--collect」サブプロセスを実行する前に呼び出されます。
背景。
収集後
コレクター プロセスの実行後に呼び出されます。 コレクタ プロセスの PID は
最初の引数として渡されます。 このフックは「after_collect_sleep」の前に呼び出されます。
睡眠後収集
コレクター プロセスが終了するまで、「--sleep」秒スリープした後に呼び出されます。 これ
フックは「after_collect」の後に呼び出されます。
after_interval_sleep
各トリガー チェックの後に "--interval" 秒スリープした後に呼び出されます。
アフターストーク
ストーキング後に電話。 pt-stalk はデフォルトで永久にストークするので、このフックは
「--iterations」が指定されている場合にのみ呼び出されます。
たとえば、「--collect」がトリガーされたときにファイルにアクセスする非常に単純なプラグイン:
before_collect() {
タッチ /tmp/foo
}
プラグインはツールの名前空間に完全にソース (インポート) されているため、
すでに存在する他の関数やグローバル変数を定義しないように注意してください
道具。 すべてのプラグイン固有の関数とグローバル変数にプレフィックスを付ける必要があります
「plugin_」または「PLUGIN_」。
プラグインはすべてのコマンド ライン オプションにアクセスできますが、それらを変更するべきではありません。 各
オプションは、「--dest」に対応する $OPT_DEST のようなグローバル変数です。 したがって、
各コマンド ライン オプションのグローバル変数は、「OPT_」にオプション名を加えたものです。
ハイフンをアンダースコアに置き換えた大文字。
プラグインは、グローバル変数「OKTORUN」を 1 に設定することでツールを停止できます。
この場合、グローバル変数「EXIT_REASON」も設定して、ツールが
止められました。
プラグイン作成者は、現在使用されているファイル宛先プレフィックスが
$OPT_PREFIX ではなく、$prefix 変数を介してアクセスする必要があります。
- 港
短縮形: -P; 型: int
接続に使用するポート番号。
--prefix
タイプ:文字列
診断サンプルのファイル名プレフィックス。 デフォルトでは、同じによって作成されたすべてのファイル
「--collect」インスタンスには、現在の現地時間に基づくタイムスタンプ プレフィックスがあります。
「2011_12_06_14_02_02」は、6 年 2011 月 14 日 02:02:XNUMX です。
--保持時間
タイプ:int; デフォルト:30
収集したサンプルを保持する日数。 古いサンプルはすべて
パージされました。
- ランタイム
タイプ:int; デフォルト:30
トリガーが発生したときに診断データを "--collect" する時間。 値は
秒であり、「--sleep」より長くすべきではありません。 通常は必要ありません。
これを変える; デフォルトの 30 秒では十分なデータが収集されない場合は、それより長く実行する必要があります。
システムまたは MySQL サーバーがビジー状態で応答できない可能性があるため、役に立たない可能性があります。
実際、多くの場合、より短い収集期間が適切です。
この値は他に XNUMX 回使用されます。 収集後、収集サブプロセスは
コマンドが終了するまでさらに「--run-time」秒待ちます。 一部のコマンドは実行できます
システムの実行速度が非常に遅い場合 (これは、
コレクションがトリガーされました)。 空のファイルが削除されるため、余分な待ち時間が発生します
コマンドは終了してデータを書き込む時間です。 値が再度使用される可能性があります
ツールが終了する直前に、収集サブプロセスが終了するのを再び待ちます。 の
ほとんどの場合、前述の余分な待機のため、これは発生しません。 それが起こった場合、
ツールは「サブプロセスが終了するまで最大 N 秒待機しています...」とログに記録します。ここで、N は
「--run-time」を XNUMX 回。 どちらの場合も、待機した後、ツールはそのすべてを強制終了します。
サブプロセス。
- 寝る
タイプ:int; デフォルト:300
「--collect」後のスリープ時間。 これにより、ツールがトリガーされなくなります
これは、収集プロセスが煩わしい場合に問題になる可能性があります。 これ
また、ディスクがいっぱいになったり、合理的に分析できないほど大量のデータが収集されたりするのを防ぎます。
--スリープコレクト
タイプ:int; デフォルト:1
コレクション ループ サイクル間のスリープ時間。 これは、"--no-stalk" で便利です。
長いコレクションを行います。 たとえば、XNUMX 時間ごとにデータを収集するには、次のように指定します。
"--no-stalk --run-time 360060 --sleep-collect XNUMX".
- ソケット
短縮形: -S; タイプ: 文字列
接続に使用するソケットファイル。
- 茎
デフォルト: はい; 否定可能: はい
サーバーを監視し、トリガーが発生するのを待ちます。 --no-stalk を指定して収集する
つまり、トリガーが発生するのを待たずに診断データをすぐに取得します。 君は
おそらく、「--interval」、「--iterations」、および「--sleep」の値も指定する必要があります。
たとえば、1 分間のデータをすぐに収集してから終了するには、次のように指定します。
--no-stalk --ランタイム 60 --反復数 1
「--cycles」、「--daemonize」、「--log」、および「--pid」は、「--no-stalk」では効果がありません。
「--disk-bytes-free」や「--disk-pct-free」などの保護オプションは引き続き
尊敬されています。
「--collect」も参照してください。
- しきい値
タイプ:int; デフォルト:25
「--variable」の最大許容値。 「--collect」は、
「--variable」の値が「--cycles」の「--threshold」より何度も大きくなっています。
現在、「--変数」をチェックするための下限しきい値を定義する方法はありません。
低すぎる値。
「--関数」も参照してください。
- ユーザー
短い形式: -u; タイプ: 文字列
現在のユーザーでない場合は、ログインするユーザー。
- 変数
タイプ: 文字列; デフォルト: Threads_running
「--threshold」と比較する変数。 「--関数」も参照してください。
-詳細
タイプ:int; デフォルト:2
実行中に多かれ少なかれ情報を出力します。 このツールは、
デフォルトの詳細レベルでは、最も重要な
情報。 ツールを対話的に実行する場合は、より高い
冗長レベル。
レベルプリント
===== ====================================
間違いはありません
1警告
2 マッチングトリガーとコレクション情報
3 一致しないトリガー
- バージョン
ツールのバージョンを出力して終了します。
ENVIRONMENT
このツールは、構成に環境変数を必要としませんが、
いくつかの変数によって異なる働きをするように影響を受けます。 これらは
ほとんどの場合、使用しないでください。
具体的には、設定できる変数は次のとおりです。
CMD_GDB
CMD_IOSTAT
CMD_MPSTAT
CMD_MYSQL
CMD_MYSQLADMIN
CMD_OPCONTROL
CMD_OPREPORT
CMD_PMAP
CMD_STRACE
CMD_SYSCTL
CMD_TCPDUMP
CMD_VMSTAT
たとえば、収集中に iostat が -dx 引数で呼び出されますが、
NFS パーティションの場合、そこには -n フラグも必要です。 ソースを編集する代わりに、次のことができます。
pt-stalkを次のように呼び出します
CMD_IOSTAT="iostat -n" pt-stalk ...
これはまさにあなたが必要とすることをします。 プラグイン フックと組み合わせると、
ツールの機能をきめ細かく制御します。
SYSTEM 募集要項
このツールには Bash v3 以降が必要です。 特定のオプションには、他のプログラムが必要です。
「--collect-gdb」には「gdb」が必要です
「--collect-oprofile」には「opcontrol」と「opreport」が必要です
「--collect-strace」には「strace」が必要です
「--collect-tcpdump」には「tcpdump」が必要です
onworks.net サービスを使用してオンラインで pt-stalkp を使用する