1.介绍
pgBadger是一款开源的快速分析PostgreSQL日志的工具,它使用perl语言编写。对日志进行分析之后输出成HTML文件。它生成的报告易于阅读。可以帮助我们查看错误日志、连接数、检查点、临时文件、VACUUM、Locks等信息。
官方地址:
要求
数据库端开启日志,可使用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:
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 ' /data/pgdata/data/log/*.csv -o /root/out.html
##标准文本格式输出日志
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
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 ' /data/pgdata/data/log/*.csv -o /root/out.html
##标准文本格式输出日志
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