はじめに
Percona Monitoring and Management(以下PMM)では様々なメトリクスが収集されます。
どのようなメトリクスが収集されるのかを全ては把握せずに使用している方も多いのではないでしょうか。
今回は、PMMが収集するMySQLのメトリクスをいくつか紹介します。
前提
今回は、検証にPMM2.36.0及びMySQL8.0.33を使用しております。
バージョンが異なる場合や、MySQL以外の製品(MariaDBやPercona Server for MySQLなど)の場合、収集されるメトリクスが異なる場合があります。
用語説明
本記事で使用する用語について説明します。
- エクスポーター(exporter)
エクスポーターは、メトリクスを取得するアプリケーションと一緒に実行されるバイナリです。
PMMにおいては、PMM Clientのコンポーネントの一部です。データベースなどから情報を収集します。MySQLの情報収集を行うのはmysqld_exporterです。
引用元 : Percona Monitoring and Management | Architecture
- コレクター
コレクターは、メトリクスのセットを表すエクスポーターの一部です。 - メトリクス
コレクターが収集したデータです。mysqld_exporterが収集したメトリクスの名前はmysql_
というプレフィックスがつきます。
PMMではこのメトリクスをMetricsQLでクエリしてグラフにしています。
例えば以下のMySQL Questionsグラフで使用されているメトリクスを確認します。
このグラフの式は以下の通りです。mysql_global_status_questions
メトリクスが使用されていることがわかります。
1 2 |
avg by (service_name) (rate(mysql_global_status_questions{service_name=~"mysql-1"}[5s]) or irate(mysql_global_status_questions{service_name=~"mysql-1"}[5m])) |
PMMが収集するメトリクス
PMMは、収集するメトリクスをコレクター単位で制御できます。
MySQLのメトリクスを収集するmysqld_exporterで、使用できる各コレクターの説明はmysqld_exporterのCollector Flagsで説明されています。
また、コレクターの無効化方法については過去の記事でも取り上げています。
collect.global_status
SHOW GLOBAL STATUSの結果(ステータス変数)を収集します。
収集されたメトリクスはmysql_global_status_{ステータス変数名}
という名前になります。
PMMでは様々なグラフでこれらのメトリクスが使用されています。日々の監視や障害発生時の調査でも非常に重要になるメトリクスです。
グラフ化されていないメトリクスもExploreを使用することで確認できます。Exploreの使用方法は後述のメトリクスを確認するで説明しています。
collect.global_variables
SHOW GLOBAL VARIABLESの結果(システム変数)を収集します。収集されたメトリクスはmysql_global_variables_{システム変数名}
という名前になります。
collect.info_schema.innodb_metrics
information_schema.innodb_metricsから情報を収集します。収集されたメトリクスはmysql_info_schema_innodb_metrics_{subsystem}_{name}
という名前になります。
information_schema.innodb_metricsは様々なInnoDBパフォーマンス情報を確認できます。
例えば、ロック待ちによるタイムアウトの回数(mysql_info_schema_innodb_metrics_lock_lock_timeouts_total
)やデッドロックの発生回数(mysql_info_schema_innodb_metrics_lock_lock_deadlocks_total
)、ロールバックの回数(mysql_info_schema_innodb_metrics_transaction_trx_rollbacks_total
)などがあります。
なお、収集時に実行されるクエリは以下となっていて、STATUSがenabledの項目のみを収集します。
1 2 3 4 5 6 |
SELECT name, subsystem, type, comment, count FROM information_schema.innodb_metrics WHERE 'status' = 'enabled' |
各カウンタの有効・無効化の方法については公式ドキュメントをご参照ください。
収集できる情報の詳細は、以下のようにinformation_schema.innodb_metricsのCOMMENTをご確認ください。
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql> SELECT NAME,COMMENT FROM information_schema.innodb_metrics limit 8; +--------------------------------+---------------------------------------------------------------------------------------------+ | NAME | COMMENT | +--------------------------------+---------------------------------------------------------------------------------------------+ | metadata_table_handles_opened | Number of table handles opened | | metadata_table_handles_closed | Number of table handles closed | | metadata_table_reference_count | Table reference counter | | lock_deadlocks | Number of deadlocks | | lock_deadlock_false_positives | Number of times a heuristic found a spurious candidate deadlock cycle in the wait-for graph | | lock_deadlock_rounds | Number of times a wait-for graph was scanned in search for deadlocks | ... (略) |
collect.info_schema.tables
information_schema.tables
から情報を収集します。テーブルの行数などの情報が確認できる一方で、テーブル数が多い環境では収集時に負荷が大きくなる可能性があり、公式ドキュメントでも説明されています。
--disable-tablestats
を使用すると、この値を含めた一部のメトリクスが収集されなくなります。
サービス登録時にTable statistics collection disabled (always).
というメッセージが出力されます。
1 2 3 4 5 6 |
$ pmm-admin add mysql --username=pmm --password=Password1! --disable-tablestats MySQL Service added. Service ID : /service_id/4df928fc-facf-4f90-9fe0-2c1f3b9eb8e1 Service name: instance-1-mysql Table statistics collection disabled (always). |
無効にした場合MySQL Table DetailsダッシュボードやMySQL InnoDB Detailsの一部のグラフが利用できなくなります。
サーバーのリソースと監視の必要性を鑑みて--disable-tablestats
の使用を決定する必要があります。
collect.slave_status
SHOW SLAVE STATUSから情報を収集します。収集されたメトリクスはmysql_slave_status_<項目名>
という名前になります。Slave_IO_RunningやSlave_SQL_Running、Seconds_Behind_Masterなどの情報が収集されます。
information_schemaから収集するその他のコレクター
コレクタ名 | 収集元テーブル | メトリクス名のプレフィックス |
---|---|---|
info_schema.innodb_cmp | innodb_cmp | mysql_info_schema_innodbcmp |
info_schema.innodb_cmpmem | innodb_cmpmem | mysql_info_schema_innodbcmpmem |
info_schema.innodb_tablespaces | innodb_tablespaces | mysql_info_schema_innodbtablespace |
info_schema.processlist | processlist | mysql_info_schema_threads |
performance_schemaから収集するその他のコレクター
コレクタ名 | 収集元テーブル | メトリクス名のプレフィックス |
---|---|---|
perf_schema.eventsstatements | events_statements_summary_by_digest | mysql_perf_schema_eventsstatements |
perf_schema.eventswaits | events_waits_summary_global_by_event_name | mysql_perf_schema_eventswaits |
perf_schema.file_events | file_summary_by_event_name | mysql_perf_schema_fileevents |
perf_schema.file_instances | file_summary_by_instance | mysql_perf_schema_fileinstances |
perf_schema.indexiowaits | table_io_waits_summary_by_index_usage | mysql_perf_schema_index_iowaits |
perf_schema.tableiowaits | table_io_waits_summary_by_table | mysql_perf_schema_table_iowaits |
perf_schema.tablelocks | table_lock_waits_summary_by_table | mysql_perf_schema_external_lockwaitsまたはmysql_perf_schema_sql_lockwaits |
メトリクスを確認する
収集されたメトリクスはPMMのExploreから確認ができます。Metricにメトリクス名を入力するとグラフが下に表示されます。
Metricは入力に対して、部分一致したメトリクスをサジェストしてくれるので、正式名称を覚えていなくても利用できます。
また、Label filtersにはラベル名と値がドロップダウンリストから選択できるようになっています。
まとめ
PMMがMySQLから収集しているメトリクスを紹介しました。普段は注視していないメトリクスも障害発生時やパフォーマンス改善などの際には役立つことが多くあります。様々なメトリクスを監視できるPMMについて、ぜひ導入を検討してみてください。