ログは、問題が発生したときに最後にチェックされるものですが、通常、何かが起こったときに助けを求めて叫ぶ最初のものです。ログを手動で調べて問題を探すことは役立ちますが、ログアナライザーを使用してレポートを自動的に生成し、問題が発生する前にデータベースに関する洞察を提供してみませんか?
PostgreSQLログアナライザ「pgBadger」は、実行中のPostgreSQLインスタンスからログ出力を取得してHTMLファイルに処理するPerlで記述されたオープンソースの「高速PostgreSQLログ分析レポート」プログラムです。生成されるレポートには、見つかったすべての情報がわかりやすく読みやすいレポート形式で表示されます。これらのレポートは、システムで発生しているエラー、チェックポイントの動作、バキュームの動作、傾向、およびPostgreSQLシステムに関するその他の基本的で重要な情報を明らかにするのに役立ちます。
PostgreSQLログ設定
pgBadgerを効果的に使用するには、PostgreSQLにログインして、pgBadgerにできるだけ多くの情報を提供するように設定する必要があります。いくつかのオプションを調整して、データベースシステムがpgBadgerの有用な情報をログに記録し、有用なレポートを生成できるようにすることができます。 PostgreSQL構成の完全なドキュメントは、pgBadger githubページにありますが、いくつかの基本的な情報は以下のとおりです。
実行すると、pgBadgerは、ログ行自体にプレフィックスに十分な情報がある限り、syslog、stderr、またはcsvlogのいずれであってもPostgreSQLからのログを処理します。
log_line_prefix値の例:
log_destination =‘syslog’
の場合log_line_prefix = 'user=%u,db=%d,app=%aclient=%h '
log_destination =‘stderr’
の場合log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
postgresql.confで設定する基本的な構成設定:
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_error_verbosity = default
log_statement = off
lc_messages='C'
Log_min_duration_statement = (see below)
pgBadgerのレポートで最も役立つ部分の1つは、log_min_duration_statement値を超えるデータベースログクエリに依存する低速クエリレポートです。この値はミリ秒単位で表され、それよりも長い時間で完了するクエリはすべてログに記録され、pgBadgerによって生成されたレポートが作成されます。これは、必要以上に時間がかかるクエリを見つけて分析するのに役立ちます。
この値を0に設定してすべてのクエリをログに記録すると、ほとんどの情報が提供されますが、非常に大きなログファイルが簡単に生成され、ログの書き込みが継続されるため、データベース自体のパフォーマンスに影響を与える可能性があります。より適切な値では完全なクエリ数は得られませんが、一般的に実行速度の遅いクエリにレポートを集中させることができます。数分実行されるクエリが「遅い」と見なされる場合は、値を1分に設定すると適切です。クエリが数秒以上実行されていると「遅い」と見なされる場合は、値を5秒などに設定することもできます。
ログの生成
ログの生成は、pgBadger実行可能ファイルを使用してコマンドラインから実行されます。多くのオプションがありますが、最も基本的な設定は、データベースが使用するログ行プレフィックス、ログファイル、および出力htmlファイルを提供することです。
./pgbadger --prefix '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ' postgresql.log -o postgresql.html
[========================>] Parsed 560607407 bytes of 560607407 (100.00%), queries: 2929645, events: 5
pgBadgerのさまざまなオプションの詳細については、ドキュメントを参照するか、-help入力パラメーターを使用してバイナリを実行してください。
高度なログ生成
ログに関するレポートの生成は単純なコマンドライン実行であるため、カスタムスクリプトとプログラムを設定して、レポートを自動的に生成したり、Webサーバーにステージングしたり、電子メールで送信したり、長期保存にアーカイブしたりできます。レポートの生成に利用できるさまざまなオプションを調べて、レポートの生成と配信のための自動化システムで創造性を発揮してください。
ログの確認
ログの確認は、楽しみの出番です。生成されたレポートをWebブラウザーで開いて、確認できるようになりました。
グローバル統計
グローバル統計セクションには、PostgreSQLログにある次のような基本情報が含まれています。
- クエリ:見つかったクエリの数、期間、正規化されたクエリの数など。
- イベント:イベントの総数、正規化されたイベントなど。
- バキューム:検出された自動バキュームと自動分析の総数。
- 一時ファイル:検出された一時ファイルの総数、最大サイズ、および平均サイズ。
- セッション:セッションの総数、ピークセッション時間、セッションの合計期間、セッションの平均期間、セッションごとに見つかったクエリの平均、セッションごとのクエリの平均期間。
- 接続:接続の総数、ピーク接続、および接続されているデータベースの総数。
注: log_min_duration_statementの値が0より大きい場合、クエリ、クエリカウント、またはクエリ期間を含む結果は不正確になります。
例:
pgBadgerグローバル統計の例接続
接続ページには、ログにある接続情報の詳細を示すグラフが表示されます。 log_connectionsとlog_disconnectionsの両方がオンになっている限り、ここでの値は正確になります。利用可能なチャートは次のとおりです。
- 確立された接続:時間の経過に伴う接続の最大数、最小数、平均数を表示します。
- データベースごとの接続:見つかった各データベースの接続数を示す円グラフと表のビュー。
- ユーザーあたりの接続数:見つかった各ユーザーの接続数を示す円グラフと表のビュー。
- ホストごとの接続:見つかった各ソースホストの接続数を示す円グラフと表のビュー。
例:
pgBadgerConnections円グラフの例セッション
セッションページは接続ページに似ていますが、セッション自体に関する詳細情報が含まれています。
- 同時セッション:時間の経過に伴うセッション数を示す折れ線グラフ。
- セッション時間のヒストグラム:セッション時間を示す棒グラフと表。
- データベースごとのセッション:見つかった各データベースのセッション数を示す円グラフと表のビュー。
- ユーザーあたりのセッション数:見つかった各ユーザーのセッション数を示す円グラフと表のビュー。
- ホストごとのセッション:見つかった各ソースホストのセッション数を示す円グラフと表のビュー。
- アプリケーションごとのセッション:アプリケーションごとに接続されたセッションの数。
チェックポイント
チェックポイントページには、書き込まれたバッファの数、WALファイル、その他の一般的な情報など、チェックポインタプロセスに関する情報が表示されます。
- チェックポイントバッファ:時間の経過とともにチェックポイントプロセスによって書き込まれたバッファの量を示す折れ線グラフ。
- チェックポイントWALファイル:チェックポインターによって時間の経過とともに追加、削除、またはリサイクルされたWALファイルの数を示す折れ線グラフ。
- チェックポイント距離:チェックポイントの距離と推定値を示す折れ線グラフ。
- チェックポイントアクティビティ:前の4つのデータポイントを表形式で示した表。
一時ファイル
一時ファイルページには、一時ファイルの情報が含まれています。一時ファイルは、クエリがwork_memを使い果たしたときに作成され、アプリケーションに返す前にディスクを使用して結果を並べ替えまたはフィルタリングする必要があります。これらのファイルは、クエリが完了すると自動的に削除されます。一時ファイルのアクティビティを知っていると、管理者はwork_memパラメータを調整するのに役立ちます。
- 一時ファイルのサイズ:一時ファイルが時間の経過とともに使用するスペースを示す折れ線グラフ。
- 一時ファイルの数:時間の経過とともに使用された一時ファイルの数を示す折れ線グラフ。
- 一時ファイルアクティビティ:前のグラフで提供された情報を表形式で示した表。
掃除機
このページには、データベースで発生するVACUUMとANALYZEに関する情報が表示されます。この情報は、自動真空プロセスが十分に機能しているかどうか、またはプロセスが停滞していてより多くのリソースが必要かどうかを知るのに役立ちます。
- Vacuums / Analyses Distribution:時間の経過に伴うVACUUMとANALYZE、およびCPU処理能力を最も消費したテーブルの情報を示す折れ線グラフ。
- テーブルごとの分析:最も多くの分析が行われたテーブルを示す円グラフとテーブル。これらのテーブルは変化の激しい状態にあることを示しています。
- テーブルごとのバキューム:円グラフと、バキュームが最も多いテーブルを示すテーブル。これらのテーブルが高い変化状態にあることを示しています。
- テーブルごとに削除されたタプル:テーブルの真空プロセスで削除されたタプルとページの数を示す円グラフとテーブル。
- テーブルごとに削除されたページ:テーブルの真空プロセスで削除されたページとタプルの数を示す円グラフと表。
- 自動バキュームアクティビティ:1時間あたりの時間の経過に伴うバキュームと分析を示す表。
ロック
ロックページにはほんの数個のデータが含まれていますが、他のクエリを長期間保留している可能性のあるプロセスがある場合に知っておくと便利な情報です。
- タイプ別のロック
- 最も頻繁に待機しているクエリ:待機していることが判明したクエリのリストで、最も頻繁にランク付けされたものから最も低いものにランク付けされています。
- 最も待機したクエリ:クエリのリストと待機時間。長いものから短いものの順に並べられています。
クエリ
[クエリ]ページは、アプリケーションやユーザーからのクエリの種類に関する情報を表示するため、最もエキサイティングな場合があります。この情報は、アプリケーションまたはユーザーがデータベースシステムにどのような種類のデータベースチャーンを配置するかを理解するのに役立ち、将来の調整に役立ちます。以前と同様に、これらの数値の精度はlog_min_duration_statementの値に依存します。これは、0を超える値はクエリをログに記録しないためです。
- タイプ別のクエリ:INSERT、UPDATE、DELETE、SELECTなどのさまざまなタイプのクエリの数を示す円グラフと表。
- データベースごとのクエリ:データベースごとに見つかったクエリの数を示す円グラフと表。
- アプリケーション別のクエリ:アプリケーションごとに見つかったクエリの数を示す円グラフと表。
- キャンセルされたクエリの数:キャンセルされたクエリに関する情報。
トップ
トップページには、クエリ時間、全体的に最も遅いクエリ、クエリ頻度などに関する情報があります。特定の問題のあるクエリは、ここで見つかる可能性があります:
- クエリ時間のヒストグラム:タイミングの各グループに分類されるクエリの数を表すヒストグラム。
- 最も遅い個々のクエリ:見つかった最も遅いクエリのリスト。長いものから短いものの順に並べられています。
- 時間のかかるクエリ:正規化されたクエリとその合計期間のリスト。消費時間が最も長いものから最も少ないものの順に並べられています。
- 最も頻繁なクエリ:正規化されたクエリのリストと、それらが実行された回数(多いものから低いものへの順序)。
- 正規化された最も遅いクエリ:正規化されたクエリとその平均期間のリスト。長いものから短いものの順に並べられています。
イベント
最後のページはイベントで、ログ自体に関する情報と、クエリ、バキューム、チェックポイント以外のものがすべて含まれています。
- ログレベル:CONTEXT、LOG、STATEMENT、HINT、WARNINGなど、さまざまなレベルのログが行ごとに表示されます。
- イベントの分布:PANIC、FATAL、ERROR、およびWARNINGイベントの経時的なイベントの線グラフ。
- 最も頻繁なエラー/イベント:イベントとその頻度のリスト。最も一般的なものから最も低いものの順に並べられています。
貢献
pgBadgerプロジェクトは無料で、PostgreSQLライセンスの下に存在します。現在、開発時にPostgreSQLの新しいバージョンで動作するように、適切に保守および更新されています。 pgBadgerを改善するためのアイデアがありますか?プロジェクトをフォークし、コミュニティに改善点を示します。
バグを送信するには、githubの問題ページにアクセスしてください。