一,简介:
pgBadger(日志分析器)类似于 oracle 的 AWR 报告(基于 1 小时,一天,一周,一月的报告),以图形化的方式帮助 DBA 更方便的找到隐含问题。
pgbadger 是为了提高速度而构建的,具有来自 pg 日志文件的完整报告,他是一个小型的 Perl 脚本(linux 需要安装 perl),性能优于任何其他 pg 日志分析器。
pgBadger 可以自动检测日志文件格式 (syslog、 stderr、 csvlog 或 jsonlog)。它被设计用来解析巨大的日志文件和压缩文件。支持的压缩格式有 gzip、bzip2、lz4、xz、zip 和 zstd。
还可以使用命令行选项将 pg Badger 限制为仅报告错误或删除报告(可以自定义)的任何部分。
pgbadger 支持在 postgresql. conf 文件中通过 log_ line_ prefix 自定义的任何格式, 只要它至少指定 %t 和 %p 模式。
pgbadger 允许通过使用指定 CPU 数量的 j 选项并行处理单个日志文件或多个文件。
如果要保存系统性能, 也可以使用 log_ duration 替代 ogmin duration_statement 来仅报告持续时间和查询数。
二,特性




三,报告模式
小时一个报告
每天一个报告
每周一个累积报告的增量报告
每月一个报告
多个进程处理一个日志
多个进程处理多个日志
(oracle 使用 workload 那个包也可以进行 AWR 报告收集调整,但工作原理不同,oracle 是基于 MMON 收集的 AWR 快照,PG 则是分析日志但生成的都是 html 类型的文件)。
四,部署
下载地址: Releases · darold/pgbadger · GitHub
编译与安装(root 用户)
解压后进入该安装目录


编译与安装:
perl Makefile.PL
这个时候可能报一个错:

缺少 perl-ExtUtils-MakeMaker 软件包我们使用 yum 安装上后就可以继续安装了
yum -y install perl-ExtUtils-MakeMaker
再次执行 perl Makefile.PL

make && make install

五,配置 postgresql.conf 配置
-- 目的只要是为了让 pg 主动收集日志,PG 中的日志分为三种,log,clog,xlog,运行日志 log 默认不打开。






这个参数默认 - 1 不记录,改成 0,把所有 sql 语句记下来,如果改成 30,则把慢于 30ms 的 sql 记下来,与慢 sql 原理相同。
根据提示修改后重启 pg。


可以看到 data 目录下已经有了 pg_log。
六,如何产生报告
方式一:当有许多小的日志文件和许多 CPU 时, 一次将一个内核专用于ー个日志文件会更快要启用此行为, 必须改用 - N 选项。对于每个 10MB 的 200 个日志文件,-J 选项的使用开始变得非常有效, 有 8 个内核。使用此方法, 您将确保不会丢失报表中的任何查询。个在服务器上完成的基准测试, 有 8 个 CPU 和 9.5GB 的单个文件。

可以看到,并行可以大量缩短产生分析日志时间。
方式二:产生大量日志,通过阐述 logrotationsize 参数控制,刚才在配置文件中已经配置过,意思就是到了 10M 就重新生成一个文件。

两种方式各有优缺点,我选用第二种方法,日志记录在我们自己定义的目录 pg_log 下。

每次登录和执行 sql 语句都会被记下来(和 oracle 种的 enableddllogging 感觉差不多)

产生报告:
产生一个小时的报告(可以选中不同日志产生不同时间段内的报告)
pgbadger -q /usr/local/pgsql/data/pg_log/postgresql-2024-06-16_05*.log \-o /home/postgres/www/pg_reports/day-06-16-05.html
产生每日和每周的日志报告:
pgbader -I -q /usr/local/pgsql/data/pg_log/* \-O home/postgres/www/pg_reports/ \-f stderr
在这种模式下, pgbadger将在输出目录中创建一个自动增量文件。这意味着可以在每周旋转的日志文上每天以这种模式运行 pgbadger,并且它不会对日志条目计数两次可以使用 crontab进行定时运行。



也可以给他指定并行,加快分析流程:
给 8 个 cpu 并行分析:
pgbadger -j 8 -q /usr/local/pgsql/data/pg_log/postgresql-2024-06-16_05*.log \-o /home/postgres/www/pg_reports/day-06-16-05.html

看一下界面:这个数据库并没有用过,所以生成是空的

写几个语句再看看





