原創文章,轉載須註明出處。訪問我的Github(地址:https://guobo507.github.io)查看最新文章列表。
pgBadger是一個基於Perl編寫的PostgreSQL日誌分析腳本。
pgBadger通過分析PG的日誌文件,以圖表的形式展現數據庫的各項活動和狀態信息,其願景是:“Make your reports in seconds!”。
pgBadger的特性:
- 圖表輸出:輸出的圖表可單獨下載爲PNG文件,這個功能對於DBA來說,用於數據庫巡檢截圖會比較管用。
- 並行分析:使用-j或-J可以指定日誌分析的並行度。
- 壓縮文件:可支持gzip壓縮的日誌文件分析。
- 增量報告:支持增量模式,比如按天分析,最後可以疊加爲按周/月分析。
此外,它不僅收集SQL,還收集服務器日誌中的錯誤日誌等。
詳細的Features列表請參見官網(http://pgbadger.darold.net/)。
安裝pgBadger
pgBadger提供了源代碼可以用於編譯安裝。在PGDG倉庫中也已經包含了pgBadger的rpm安裝包,針對Ubuntu系列系統,pgBadger也有對應的倉庫可以使用。詳細信息請看官方頁面:http://pgbadger.darold.net/#download。
推薦採用從軟件倉庫安裝的方式來安裝pgBadger。
從倉庫安裝pgBadger比較簡單,以Redhat Linux爲例,只需先配置好PGDG倉庫,然後使用yum命令在線安裝即可。Ubuntu系列Linux與此類似。
你也可以參考官方文檔的說明來安裝,地址是:http://pgbadger.darold.net/documentation.html。
PostgreSQL參數配置
使用pgBadger來分析PostgreSQL系統日誌需要對postgresql.conf參數文件做相應的配置,具體如下所示:
log_destination = 'csvlog' # 可選
logging_collector = on
log_min_duration_statement = 0
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
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
lc_messages='C'
log_filename = 'postgresql-%Y%m%d_%H%M%S.log' # 定義日誌文件的名稱
log_file_mode = 0600
注意不要同時啓用log_min_duration_statement
,log_duration
和log_statement
,這將導致錯誤的計數器值,也會大大增加日誌的大小。log_min_duration_statement
是首選啓用的參數。
另外,請考慮爲log_min_messages
參數設置一個合理的值,默認爲warning,設置不當可能導致日誌信息膨脹或日誌信息不足。
pgBadger的使用實例
我在項目中實際使用pgBadger時,利用crontab做了計劃任務,日常會每天晚上23:55自動調用pgBadger分析當天的日誌並生成報告,第二天來查看檢查數據庫的使用情況。
我的腳本內容如下:
#!/bin/bash
CURRDATE=`date +%Y%m%d`
PGDATA=/u01/pgdata/11
REPTDIR=/home/postgres/pgbadger_reports
if [ -d $REPTDIR ]; then
mkdir -p $REPTDIR
fi
/bin/pgbadger -q $PGDATA/log/postgresql-$CURRDATE*.csv -o $REPTDIR/reports_$CURRDATE.html -j 8 -f stderr
find $REPTDIR -name reports_*.html -mtime +8 -exec rm -rf {} \;
腳本還會自動刪除8天之前的報告文件。
然後,我們就可以按時從服務器的/home/postgres/pgbadger_reports
目錄獲取報告進行查看和分析了。