Sign inSign up

dennisxkimo/pgbadger

By dennisxkimo

Updated over 5 years ago

Image
0

287

dennisxkimo/pgbadger repository overview

主程式封裝來源

https://github.com/darold/pgbadger.git

這套基本功能就是將postgresql的log檔案,有系統的整理,預設值是產生html格式的好看報表。

報表資料來源還是來自於讀取的log檔案,可說是一個協助分析的工具。

History

2020/10/14 push 11.3
2021/06/17 push 11.5

建議事項

postgresql 資料庫建議設置好 auto_explain與pg_stat_statements
產生的postgresql.log 透過pgbadger分析後比較好看的報表,
找問題時會更有參考價值更有效率。

例如:
auto_explain 有設,比較能找性能問題時,挑出效能不佳的SQL。
在報表中的 top頁下的slowest individua queries 就有整理好的Explain plan輸出的紀錄。

超過10秒的sql將被記錄到postgresql.log

# postgresql.conf
session_preload_libraries = 'auto_explain'
auto_explain.log_min_duration = '10s'

或者設置在 shared_preload_libraries = 'auto_explain'
shared_preload_libraries 與 session_preload_libraries有點差異可以自行找資料比較。

pg_stat_statements的部分如果auto_explain也是設在shared_preload_libraries
請用逗號區隔

shared_preload_libraries = 'auto_explain,pg_stat_statements'

這不是全域性可用,請在需要的database建立執行

CREATE EXTENSION pg_stat_statements;

快速使用
建立目錄,包含子目錄pglog

mkdir -p pgbadger/pglog

切換目錄到 pgbadger

cd pgbadger

將postgresql.log複製到pglog目錄內

(log檔案在哪裡就從哪裡copy到pglog目錄內的意思)
copy postgresql.log pglog/

一次性執行

由於掛載目前目錄下的pglog,所以請確認自己正在pgbadger目錄下執行
如果要指定特定目錄掛載,請自行更改$PWD路徑

docker run --rm -v $PWD/pglog/:/pglog/ dennisxkimo/pgbadger pgbadger /pglog/postgresql.log -O /pglog/

分析完成後pglog目錄內會產生out.html

進階應用

透過cron的排程與簡單設計script執行,將產生的內容輸出到網頁伺服器目錄,就得到一個定期更新的分析工具網頁。

pgbadger建議的若要收集完整訊息,建議的postgresql.conf參數(部分非預設值不一定是最佳 斟酌使用或是視情境開啟)

#0 代表收集全部SQL explain紀錄 視情況斟酌設置)
log_min_duration_statement = 0

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


Web瀏覽

這裡我postgresql log目錄是/var/lib/pgsql/13/data/log/

建立一個nginx 掛載 report 到 html,掛載 postgresql log目錄 到 container下 pglog

mkdir -p pgbadger-nginx/report
cd pgbadger-nginx
docker run -d --name pgbadger-nginx -v $PWD/report:/usr/share/nginx/html/ -v /var/lib/pgsql/13/data/log/:/pglog/ -p 8888:80 -d nginx

之後更新內容(假設我要分析/var/lib/pgsql/13/data/log/postgresql-Tue.log)
docker run --rm --volumes-from pgbadger-nginx dennisxkimo/pgbadger pgbadger /pglog/postgresql-Tue.log -O /pglog/
docker exec -it pgbadger-nginx cp /pglog/out.html /usr/share/nginx/html/

瀏覽 http://SERVER_IP:8888/out.html

Tag summary

Content type

Image

Digest

Size

157.5 MB

Last updated

over 5 years ago

docker pull dennisxkimo/pgbadger