pgbadger 是一款使用 Perl 实现的轻量级日志分析工具。通过分析HALO的日志文件,以图表形式展示数据库的各项活动和状态信息。为了提高处理速度,它能高效地分析 HALO日志。作为一个小型的 Perl 脚本,它在性能上优于许多其他HALO日志分析工具。
开源地址:https://github.com/darold/pgbadger
使用样例:

安装
软件包下载链接 从 GitHub 下载 (https://github.com/darold/pgbadger):安装依赖包
yum install -y perl perl-devel php php-devel httpd httpd-devel解压编译安装
tar -zxvf pgbadger-12.4.tar.gzcd pgbadger-12.4/perl Makefile.PLmake && sudo make install
安装后的检查
[halo@liko pgbadger-12.4]$ which pgbadger/usr/local/bin/pgbadger[halo@liko pgbadger-12.4]$ pgbadger -VpgBadger version 12.4
安装后的检查
[halo@liko pgbadger-12.4]$ which pgbadger/usr/local/bin/pgbadger[halo@liko pgbadger-12.4]$ pgbadger -VpgBadger version 12.4
HALO配置
由于pgbadger读取HALO日志并获取信息,因此有必要对 Postgresql.Conf 文件进行一些更改,以便在 pgbadger 分析的内容足够
第一件也是最重要的事情是启用查询日志记录。在 Postgresql.Conf文件上相应地更改log_min_duration_statement参数值。值“0”表示将记录每个语句,这对于非常繁忙的服务器来说可能不理想。您可以根据您的要求相应地更改该值。假设您想要记录运行时间超过 2 秒的查询,然后将参数值(以毫秒为单位)设置为 2000 。
** 不要同时启用 log_min_duration_statement、log_duration 和 log_statement,这将导致错误的计数器值和过大的日志大小。
** 如果您不需要有关查询的所有详细信息,请将 log_min_duration_statement 设置为 -1 以禁用它并在postgresql.conf 文件中启用 log_duration。它只会报告查询的持续时间和数量。
log_min_duration_statement 应始终是首选(推荐)。
log_min_duration_statement = 0要查找的下一个重要参数是 log_line_prefix ,其值可以根据另一个参数 log_destination 的值来指定。log_destination 值告诉 HALO以指定的格式生成日志。默认情况下,HALO生成标准错误 (stderr) 格式的日志。在此格式中,每条日志消息都以参数 log_line_prefix 指定的信息为前缀。
对于 stderr 日志格式, log_line_prefix 必须至少具有时间转义序列 %t, %m or %n 和与进程相关的转义序列 %p or %c ,如图所示以下。
log_line_prefix = '%t [%p]: '它还允许您添加用户、数据库名称、应用程序名称和客户端 IP 地址,如下所示。
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '另一件要记住的事情是,您的日志消息应该是英语,无论是否支持区域设置。以下设置可确保:
lc_messages='en_US.UTF-8'pgBadger常见 postgresql.conf 配置如下所示:
log_min_duration_statement = 0log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h 'log_checkpoints = onlog_connections = onlog_disconnections = onlog_lock_waits = onlog_temp_files = 0log_autovacuum_min_duration = 0log_error_verbosity = defaultlc_messages='en_US.UTF-8'
完成这些更改后,您需要重新启动 Halo 数据库以使设置生效
pg_ctl restart为了测试 pgbadger 的分析功能,您可以使用 pgbench 工具在 Halo 数据库中创建模拟数据。
pgbench -i halo0rootpgbench -r -P 1 -c 5 -T 3 -j 5 halo0root
$ pgbadger <log file>例如:
sudo pgbadger /data/halo/diag/haloserver-2024-02-21_113810.log您还可以在指定日志名称时使用通配符 * 一次性分析所有日志文件。此外,您还可以通过指定适当的开关来指定输出目录和文件名,如下所示。
[halo@liko diag]$ pgbadger haloserver-2024-02-21_113810.log[========================>] Parsed 4275241 bytes of 4275241 (100.00%), queries: 13337, events: 0LOG: Ok, generating html report...[halo@liko diag]$

您可以设置定时任务,以定期生成 pgbadger 报告,从而持续监控 Halo 数据库的性能。这可以通过设置 cron作业来完成。例如,以下 cron作业将在每天凌晨 01:00 生成 pgbadger报告,并将保留期设置为一周。
$ crontab -e0 1 * * * /usr/local/bin/pgbadger --R 1 -I -q /data/halo/diag/haloserver-* -O /var/www/pgbadger/
您可以使用下面提到的帮助命令来获取 pgbadger中选项及其用法的完整列表。
$ pgbadger --help总结一下,pgbadger 是分析 Halo 数据库日志和识别性能问题的极佳工具,它提供的丰富的 HTML 报告和图表对数据库性能的监控和分享非常有帮助。




