DataBase  /  PostgreSQL  /  レポート取得ガイド

pgBadger / pg_activity による取得とセクション定義

pgBadger は PostgreSQL のログファイルを解析し、Oracle AWR の HTML レポートに相当する インタラクティブなレポートを生成する外部ツールです。 pg_activitytop コマンド風のリアルタイム監視ツールです。 本記事ではインストール・設定・主要オプションと出力セクションの定義を解説します。

1. pgBadger のインストールと前提設定

bash — インストール
# RHEL / Rocky / AlmaLinux
sudo dnf install pgbadger

# Ubuntu / Debian
sudo apt install pgbadger

# Perl モジュールから手動インストール
sudo cpan install pgBadger

# バージョン確認
pgbadger --version
postgresql.conf — pgBadger が必要とする設定
# ログ収集を有効化
logging_collector = on
log_destination = 'stderr'         # または csvlog / jsonlog

# スロークエリのしきい値(pgBadger はスロークエリ統計が中心)
log_min_duration_statement = 0     # 全クエリ記録(テスト時)または 1000(1秒)

# pgBadger が解析に使用するプレフィックス形式(推奨)
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '

# その他 pgBadger が活用するログ設定
log_checkpoints = on               # チェックポイント情報をログに出力
log_connections = on               # 接続ログ
log_disconnections = on            # 切断ログ
log_lock_waits = on                # ロック待ちが deadlock_timeout を超えた場合に記録
log_temp_files = 0                 # 一時ファイルの作成をすべて記録
log_autovacuum_min_duration = 0    # 自動バキュームをすべてログに記録
⚠️ log_min_duration_statement = 0 は本番注意
全クエリをログに記録するとログファイルが急速に増大し、ディスク I/O に影響します。 本番環境では 1000〜5000ms 程度から始め、ログ量を確認しながら調整してください。

2. pgBadger の実行と主要オプション

bash — pgBadger の基本的な使い方
# 基本:ログファイルを解析して HTML レポートを生成
pgbadger /var/log/postgresql/postgresql-2026-05-29.log -o report.html

# 複数ログファイルの解析
pgbadger /var/log/postgresql/postgresql-*.log -o report.html

# ログ形式を明示的に指定
pgbadger --format stderr /var/log/postgresql/postgresql-2026-05-29.log -o report.html
pgbadger --format csv    /var/log/postgresql/postgresql-2026-05-29.csv  -o report.html

# 並列処理で高速化(CPU コア数を指定)
pgbadger -j 4 /var/log/postgresql/postgresql-*.log -o report.html

# スロークエリのしきい値(ms)を指定(ログ設定の上書き)
pgbadger --min-duration 500 /var/log/postgresql/postgresql-2026-05-29.log -o report.html

# 特定の時間帯のみ解析
pgbadger --begin "2026-05-29 10:00:00" --end "2026-05-29 12:00:00" \
    /var/log/postgresql/postgresql-2026-05-29.log -o report.html

# データベース・ユーザー・アプリで絞り込み
pgbadger --dbname mydb --dbuser appuser \
    /var/log/postgresql/postgresql-2026-05-29.log -o report.html

# JSON 形式で出力(他ツールとの連携向け)
pgbadger /var/log/postgresql/postgresql-2026-05-29.log -o report.json --format json

# 差分レポート(増分解析)
pgbadger --incremental -I /var/report/incremental/ \
    /var/log/postgresql/postgresql-2026-05-29.log
オプション説明
-o / --outfile 出力ファイルパス。拡張子で形式を自動判定(.html / .json / .txt)。
-j / --jobs 並列処理の CPU コア数。大きなログファイルの解析を高速化。
--format ログ形式の明示指定。stderr(デフォルト)/syslog/csv/jsonlog
--prefix log_line_prefix の値を指定。自動検出できない場合に使用。
--top 各セクションで表示するクエリ数(デフォルト:20)。
--incremental 増分解析モード。前回の解析結果からの差分のみを処理。定期実行に適する。

3. pgBadger レポートのセクション定義

セクション名説明Oracle AWR 対応
Overall statistics 解析期間・処理クエリ数・接続数・ログエントリ数などの全体サマリ。 Report Summary
Queries per second 時間帯別のクエリ数グラフ。ピーク時間帯の特定に使用。 Activity Statistics(時間帯別)
Slowest individual queries 個別の最も遅いクエリ(実行時間順)。実行計画と一緒に表示(auto_explain 有効時)。 SQL ordered by Elapsed Time
Queries that took up the most time 累積実行時間(合計)の多いクエリパターン上位。Oracle AWR SQL Statistics の最重要指標に相当。 SQL ordered by Elapsed Time(合計)
Most frequent queries 実行回数(頻度)が最も多いクエリパターン上位。 SQL ordered by Executions
Normalized slowest queries 正規化されたクエリパターン別の最大・平均実行時間。 SQL Statistics(正規化)
Histogram of query times クエリ実行時間の分布ヒストグラム(0-1ms / 1-5ms / 5-10ms など)。 SQL Elapsed Time Histogram
Connections per database / user / host データベース・ユーザー・クライアントホスト別の接続数。 Top Sessions
Lock information ロック待ち発生のクエリと待機時間。log_lock_waits = on が必要。 Lock Statistics
Temporary file statistics 一時ファイルの生成状況(サイズ・回数)。log_temp_files = 0 が必要。 Sort / Hash Work Area
Checkpoint statistics チェックポイントの実行頻度・所要時間。log_checkpoints = on が必要。
Autovacuum / Autoanalyze statistics 自動バキューム・自動アナライズの実行状況とテーブル別集計。
Connection errors 接続失敗・認証エラーの集計。
💡 pgBadger レポートは Oracle AWR HTML レポートに最も近い
pgBadger の HTML レポートは、グラフ・テーブル・クエリ一覧を含むインタラクティブなレポートで、 Oracle AWR の HTML レポートに機能的に最も近い PostgreSQL 用ツールです。 定期的に生成して Web サーバーで公開することで、継続的な性能モニタリングが可能です。

4. pgBadger の差分レポートと定期実行

bash — cron による日次差分レポート生成
#!/bin/bash
# /usr/local/bin/pgbadger-daily.sh

LOGDIR="/var/log/postgresql"
REPORTDIR="/var/www/html/pgbadger"
DATE=$(date +%Y-%m-%d)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

mkdir -p "$REPORTDIR/$DATE"

# 差分(増分)モードで日次レポートを生成
pgbadger \
    --incremental \
    --outdir "$REPORTDIR" \
    -j 4 \
    "$LOGDIR/postgresql-$YESTERDAY.log" \
    "$LOGDIR/postgresql-$DATE.log"

echo "pgBadger report generated: $REPORTDIR/index.html"
crontab — 毎朝6時に実行
0 6 * * * postgres /usr/local/bin/pgbadger-daily.sh >> /var/log/pgbadger-cron.log 2>&1

5. pg_activity のインストールと起動

pg_activitytop コマンドに似たターミナルベースの リアルタイム PostgreSQL 監視ツールです。現在実行中のクエリ・待機状態・ブロッキング関係を 対話的に確認できます。

bash — インストールと起動
# pip でインストール
pip install pg_activity

# または OS パッケージマネージャ
sudo apt install pg-activity          # Debian/Ubuntu
sudo dnf install pg_activity          # RHEL/Rocky

# 起動(ローカル接続)
pg_activity

# リモート接続
pg_activity -h 192.168.1.100 -p 5432 -U postgres -d mydb

# 更新間隔を変更(デフォルト:2秒)
pg_activity --interval 5

# クエリの最大表示文字数
pg_activity --query-length 200

# CPU / メモリ情報を含める(psutil が必要)
pg_activity --no-inst
キー操作動作
r応答時間(duration)でソート
cCPU 使用率でソート
mメモリ使用率でソート
R読み取り I/O でソート
W書き込み I/O でソート
tWaiting タブ(ロック待ちセッション)に切り替え
bBlocking タブ(ブロッキングセッション)に切り替え
k選択したバックエンドを終了(pg_terminate_backend)
qpg_activity を終了
Space画面を手動更新
+/-更新間隔を増減(デフォルト 2 秒)

6. pg_activity 画面のセクション定義

表示例 — pg_activity メイン画面
pg_activity 3.6.0 - https://github.com/dalibo/pg_activity
PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc 11.4.0
HOST: localhost:5432 - USER: postgres - DB: mydb  Ref.: 2s

  RUNNING QUERIES
PID    USER      DATABASE     APP               CLIENT   WAIT  CPU%  MEM%  READ/s WRITE/s   TIME      Query
12345  appuser   mydb         webapp            10.0.0.1   N    2.5%  0.8%   0 B    0 B    00:00:02   SELECT u.user_id, u.name, COUNT(o.ord
23456  appuser   mydb         webapp            10.0.0.2   N    0.1%  0.3%   0 B    0 B    00:00:00   INSERT INTO log_entries (event_type,
34567  postgres  mydb         psql              127.0.0.1  Y    0.0%  0.1%   0 B    0 B    00:00:05   VACUUM ANALYZE users

  DATABASE STATISTICS
NAME        TPS    SIZE     CACHE HIT    AUTOVACUUM
mydb        145    4.5 GB   98.7%        N

ヘッダーセクション

フィールド説明Oracle Enterprise Manager 対応
HOST / USER / DB 接続先ホスト・ユーザー・データベース名。 Target Database
Ref.: 画面更新間隔(秒)。

RUNNING QUERIES セクション

列名説明Oracle AWR 対応
PID バックエンドプロセス ID(pg_stat_activity.pid)。 SID
USER 接続ユーザー名。 Username
DATABASE 接続データベース名。
APP アプリケーション名(application_name)。 Program
CLIENT クライアントの IP アドレスまたはホスト名。 Machine
WAIT 待機中かどうか(Y/N)。Y の場合は wait_event_type / wait_event を確認。 Wait Class / Wait Event
CPU% このプロセスの CPU 使用率(%)。高い場合は CPU バウンドなクエリ。
MEM% このプロセスのメモリ使用率(%)。
READ/s このプロセスのディスク読み取りスループット(バイト/秒)。 Physical Reads
WRITE/s このプロセスのディスク書き込みスループット(バイト/秒)。 Physical Writes
TIME クエリの現在の経過時間(HH:MM:SS)。長い場合は要調査。 Elapsed Time
Query 実行中のクエリテキストの先頭部分(--query-length オプションで表示文字数変更可)。 SQL_TEXT

DATABASE STATISTICS セクション

列名説明Oracle AWR 対応
TPS 現在のトランザクション毎秒(コミット + ロールバック / 更新間隔)。 Transactions / sec
SIZE データベースの合計サイズ。
CACHE HIT 共有バッファのキャッシュヒット率(%)。pg_stat_database の blks_hit / (blks_hit + blks_read)。 Buffer Cache Hit Ratio
AUTOVACUUM 現在自動バキュームが実行中かどうか(Y/N)。
Waiting タブ・Blocking タブの活用
t キーで Waiting タブに切り替えると、現在ロック待ちになっているセッションを一覧表示できます。 b キーで Blocking タブに切り替えると、他のセッションをブロックしているセッションを確認できます。 Oracle の「Waiting Sessions / Blocking Sessions」に相当する、ロック問題の即時診断に使います。