Skip to content

1.介绍

pgBadger是一款开源的快速分析PostgreSQL日志的工具,它使用perl语言编写。对日志进行分析之后输出成HTML文件。它生成的报告易于阅读。可以帮助我们查看错误日志、连接数、检查点、临时文件、VACUUM、Locks等信息。

官方地址:

https://pgbadger.darold.net/

要求

数据库端开启日志,可使用syslog、stderr、csvlog或jsonlog等多种格式

log_destination = 'csvlog'
logging_collector = on
log_rotation_age = 1d
log_rotation_size = 10240

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_min_duration_statement = '0'
log_destination = 'csvlog'
logging_collector = on
log_rotation_age = 1d
log_rotation_size = 10240

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_min_duration_statement = '0'
  • syslog
log_line_prefix='user =%u,db=%d,app=%a,client=%h'
log_line_prefix='user =%u,db=%d,app=%a,client=%h'
  • log_destination = ‘stderr’
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '

执行

pgbadger --prefix '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ' postgresql.log -o postgresql.html
pgbadger --prefix '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ' postgresql.log -o postgresql.html

2.安装

下载

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

wget https://github.com/darold/pgbadger/archive/v12.2.tar.gz
https://github.com/darold/pgbadger/releases

wget https://github.com/darold/pgbadger/archive/v12.2.tar.gz

编译

#如果没有perl 环境,需要执行以下
yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
yum -y install perl-CPAN perl-JSON-XS  perl-Text-CSV_XS perl-ExtUtils-MakeMaker

#cpan Text::CSV
#cpan JSON::XS




perl Makefile.PL (生成config)
make && make install

#查看版本
[root@pg_beta pgbadger-10.0]# pgbadger -V
pgBadger version 10.0
#如果没有perl 环境,需要执行以下
yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
yum -y install perl-CPAN perl-JSON-XS  perl-Text-CSV_XS perl-ExtUtils-MakeMaker

#cpan Text::CSV
#cpan JSON::XS




perl Makefile.PL (生成config)
make && make install

#查看版本
[root@pg_beta pgbadger-10.0]# pgbadger -V
pgBadger version 10.0

3.语法使用

pgbadger [options] logfile […]

常用参数

参数说明
-f,–format logtype指定输出的格式syslog, syslog2, stderr, jsonlog,cvs, pgbouncer, logplex, rds and redshift
-d,–dbname database分析指定的数据库
-b,–begin datetime解析指定时间日志,开始时间或日期
-e,–end datetime解析指定时间日志,结束时间或日期
-o指定输入的文件
-C,–nocomment移除查询中的备注信息
–exclude-query regex排除符合正则表达式的内容不需要分析
-a,–average minutes图表时间间隔,默认5min
-A,–histo-average构建直方图的分钟数的查询,默认60min
-c,–dbclient host解析执行ip访问的日志信息
-j,–jobs number并行解析的进程数量
-J,–Jobs number并行执行解析的日志文件数量
-u,–dbuser username解析指定的用户
-t,–top number存储或显示查询数量,默认20
-S,–select-only只输出select查询报告
-v,–verbose详细显示信息
-q,–quiet不打印进程信息
-w,–watch-mode只显示错误报告
-I增量产生

日志输出参数格式选项:

%t:表示时间戳
%p:表示进程号
%r:表示客户端的主机和端口
%d:表示数据库名
%u:表示用户名
%t:表示时间戳
%p:表示进程号
%r:表示客户端的主机和端口
%d:表示数据库名
%u:表示用户名
  • Examples:

##标准文本格式输出日志
pgbadger -f stderr --prefix=’%t:%r:%u@%d:[%p]:’ -o /data/pgbadger.html

##单个分析
pgbadger /var/log/postgresql.log

##批量分析
pgbadger /var/log/postgresql/postgresql-2021-09-*

##分析日志文件可以是多种格式的,如:压缩格式或者文本格式
pgbadger /var/log/postgres.log.2.gz /var/log/postgres.log.1.gz /var/log/postgres.log

##指定排除分析
pgbadger --exclude-query="^(COPY|COMMIT)" /var/log/postgresql.log

##分析执行时间段的日志信息
pgbadger -b “2012-06-25 10:56:11” -e “2012-06-25 10:59:11” /var/log/postgresql.log

#指定使用的CPU数据进行解析
pgbadger -j 8 /pglog/postgresql-10.1-main.log

##下载aws上postgresql_instance的日志信息
aws rds download-db-log-file-portion --region $region --db-instance-identifier $postgresql_instance --log-file-name error/postgresql.log --starting-token 0 --output text > aa.log

##标准文本格式输出日志
pgbadger -f stderr --prefix=’%t:%r:%u@%d:[%p]:’ -o /data/pgbadger.html

##单个分析
pgbadger /var/log/postgresql.log

##批量分析
pgbadger /var/log/postgresql/postgresql-2021-09-*

##分析日志文件可以是多种格式的,如:压缩格式或者文本格式
pgbadger /var/log/postgres.log.2.gz /var/log/postgres.log.1.gz /var/log/postgres.log

##指定排除分析
pgbadger --exclude-query="^(COPY|COMMIT)" /var/log/postgresql.log

##分析执行时间段的日志信息
pgbadger -b “2012-06-25 10:56:11” -e “2012-06-25 10:59:11” /var/log/postgresql.log

#指定使用的CPU数据进行解析
pgbadger -j 8 /pglog/postgresql-10.1-main.log

##下载aws上postgresql_instance的日志信息
aws rds download-db-log-file-portion --region $region --db-instance-identifier $postgresql_instance --log-file-name error/postgresql.log --starting-token 0 --output text > aa.log

每小时

每小时
pgbadger -q /xxx_log/*.log  -o /xxx.html
每小时
pgbadger -q /xxx_log/*.log  -o /xxx.html

增量

每天每周
pgbadger  -I -q /xxx_log/*.log  -O /reports/ -f stderr

这种模式下,pgbadger 将在输出目录中创建一个自动增量文件,这意味可以在每周的日志文件上进行pgbadger,并且不会对日志条目计数两次,用cron 定时运行

#月
if [[ $(date +%d) == 1 ]]; then
    PRE_MONTH=$(date -d '1 months ago' +%Y-%m)
    ${PGBADGER_CMD}  -q -I  --month-report ${PRE_MONTH}  ${PGBADGER_REPORT_PATH}
    echo "月报完成:`date`"
fi
每天每周
pgbadger  -I -q /xxx_log/*.log  -O /reports/ -f stderr

这种模式下,pgbadger 将在输出目录中创建一个自动增量文件,这意味可以在每周的日志文件上进行pgbadger,并且不会对日志条目计数两次,用cron 定时运行

#月
if [[ $(date +%d) == 1 ]]; then
    PRE_MONTH=$(date -d '1 months ago' +%Y-%m)
    ${PGBADGER_CMD}  -q -I  --month-report ${PRE_MONTH}  ${PGBADGER_REPORT_PATH}
    echo "月报完成:`date`"
fi