pgBadger
功能描述
pgBadger是一个快速、简便的日志分析工具。
pgBadger能够基于Vastbase数据库的日志文件输出HTML页面,通过动态图的形式进行展示,利于阅读。pgBadger是了解Vastbase服务器的行为并确定需要优化哪些SQL查询的便捷工具。
使用方法
在使用pgBadger之前,需要在postgresql.conf中配置Vastbase的日志记录行为。参考重设参数表1对以下GUC参数进行设置:
步骤1: 启用SQL日志记录:log_min_duration_statement
log_min_duration_statement=0
参数值设置为0时,每个语句都将被记录。在繁忙的服务器上,调高此参数的值可以实现仅记录持续时间较长的查询。
请勿启用log_statement,因为pgBadger无法解析它的日志格式。如果将log_statement设置为'all',则不会通过log_min_duration_statement指令记录任何内容。
步骤2: 设置日志的前缀信息
pgBadger支持在postgresql.conf文件的log_line_prefix指令中设置的任何自定义格式,前提是log_line_prefix至少指定了一个时间转义序列(%t, %m或%n)和进程相关的转义序列(%p或%c)。
日志格式由参数log_destination控制,有效值为stderr、csvlog、syslog。
例如,对于“stderr”日志格式,log_line_prefix必须至少为:
log_line_prefix = '%t [%p]: '
日志行前缀可以添加用户、数据库名称、应用程序名称和客户端ip地址,如下所示:
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
stderr输出的日志行前缀也可以是:
log_line_prefix = '%t [%p]: db=%d,user=%u,app=%a,client=%h '
对于“syslog”日志文件格式,log_line_prefix可以是:
log_line_prefix = 'user=%u,db=%d,app=%a,client=%h '
或者:
log_line_prefix = 'db=%d,user=%u,app=%a,client=%h '
步骤3: 开启其它日志记录
需要开启一些基础记录功能,以便pgBadger能够从日志文件中获取更多信息:
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
步骤4: 设置字符集
确保Vastbase的日志消息应该是英文,设置语言环境:
lc_messages='en_US.UTF-8'
lc_messages='C'
pgBadger解析器不支持其他语言环境,例如 'fr_FR.UTF-8' 。
附:更多日志相关参数配置说明
关于log_min_duration_statement、log_duration和log_statement配置的注意事项:
如果希望查询统计信息包含实际的查询字符串,则必须将log_min_duration_statement设置为0或更多毫秒。
如果只需要查看报告查询的持续时间和数量,而不想要查询的所有细节,将log_min_duration_statement设置为-1以禁用它,并在postgresql.conf文件中启用log_duration。如果要添加最常见的请求报告,可以选择将log_min_duration_statement设置为更高的值,或者选择启用log_statement。
启用log_min_duration_statement将添加关于最慢查询和占用时间最多的查询的报告。注意,如果将log_statement设置为'all',则不会使用log_min_duration_statement记录任何内容。
不要同时启用log_min_duration_statement、log_duration和log_statement,这将导致错误的计数器值。注意,这也会大大增加日志的大小。应该始终优先选择Log_min_duration_statement。
步骤5: 构建报告
使用pgBadger查看报告的前提是Vastbase中执行了SQL并生成了相应日志文件。
执行类似如下的操作系统命令即可构建pgBadger报告,更多用法示例请参考后文样例,各选项介绍详见参数说明:
pgbadger -f stderr $OM_GAUSSLOG/postgresql-20xx-xx-xxxxx.log
步骤6: 查看报告
为指定日志文件生成的HTML报告默认存放在当前登录用户的用户主文件夹下。
cd ~
ll
查看用户目录下的文件列表,其中out.html
即为pgBadger生成的详细日志报告。
参数说明
pgBadger提供了大量参数,用于控制报告生成的效果。
Vastbase暂不支持以下未介绍的参数。
-f | --format logtype
指定数据库日志的输出格式,可能的取值为:syslog、stderr、csv。
-o | --outfile filename
指定输出的文件名称。
默认值取决于输出模式:out.html、out.txt、out.csv、或 out.json。此选项可多次使用以输出多种格式。
如果使用 json 格式输出,则必须安装 Perl 模块 JSON::XS。
-a | --average minutes
构建查询和连接的平均图所需的分钟数。默认为5分钟。
-A | --histo-average min
构建查询直方图的分钟数。默认为60分钟。
-b | --begin datetime
要在日志中解析的数据的开始日期/时间(timestamp或者time)。
-c | --dbclient host
仅报告指定客户端主机的记录。
-C | --nocomment
从查询SQL中移除形如
/* ... */
的注释内容。-d | --dbname database
分析指定的数据库。
-D | --dns-resolv
将客户端IP地址替换为其DNS名称。
指定此选项会降低pgBadger的速度。
-e | --end datetime
要在日志中解析的数据的结束日期/时间。
-E | --explode
通过为每个数据库生成一个报表来扩展主报告。与数据库无关的全局信息将被添加到postgres库的报告中。
-G | --nograph
在HTML输出中禁用图表。默认启用图表。
-h | --help
展示帮助信息并退出。
-H | --html-outdir path
在增量模式下写入 HTML 报告的目录路径,二进制文件保留在用
-O, --outdir
选项定义的目录中。-I | --incremental
使用增量模式,报告将按天生成,必须设置--outdir。
-j | --jobs number
并行解析日志的进程数量。
默认情况下为单并发。
-J | --Jobs number
并行执行解析的日志文件数量。
默认情况下为单并发。
-L | --logfile-list file
在文件中包含待解析的日志文件列表。
-m | --maxlength size
查询的最大长度,超过指定长度将被截断。
默认截断长度为 100000。
-M | --no-multiline
不收集多行语句,以避免出现垃圾信息。
对于会产生大量错误的报告非常有用。
-N | --appname name
只报告指定应用程序名称的记录。
-O | --outdir path
指定输出文件保存的目录。
-q | --quiet
不向 stdout 打印任何内容,包括进度条。
-Q | --query-numbering
在输出中添加查询编号。
-S | --select-only
报告中只分析SELECT查询。
-t | --top number
要存储/显示的查询次数。
默认值:20。
-T | --title string
指定 HTML 报告页面的标题。
-u | --dbuser username
只分析给定用户的记录。
-U | --exclude-user username
排除指定用户的记录。
-V | --version
显示pgBadger版本号并退出。
-w | --watch-mode
只显示错误报告。
-x | --extension
输出格式。可能的值:txt,html,csv 或 json。
默认值:html
--disable-type
不按类型、数据库或用户生成查询报告。
--disable-query
不生成查询报告(最慢查询、最频繁查询、按用户查询、按数据库查询……)。
--disable-session
不生成会话报告。
--disable-connection
不生成连接报告。
--disable-lock
不生成锁报告。
--disable-temporary
不生成临时报告。
--disable-checkpoint
不生成检查点报告。
--disable-autovacuum
不展示自动清理报告。
--csv-separator
用于设置 CSV 字段分隔符,默认为:
,
。--exclude-db name
从报告中排除指定数据库的记录。
可多次使用此选项。
--exclude-appname name
从报告中排除指定数据库的记录。
可以多次使用此选项。
--exclude-client name
排除指定客户端 IP 的日志记录。
可多次使用此选项。
构建语句样例
指定并发数,快速高效地分析10GB大文件:
pgbadger -j 8 /pglog/postgresql-10.1-main.log
指定输出文件:
pgbadger postgresql-2022-04-13_000000.csv -o p.html
分析多个日志文件:
pgbadger /var/log/postgresql/postgresql-2012-05-*
分析多个文件、多种格式:
pgbadger /var/log/postgres.log.2.gz /var/log/postgres.log.1.gz /var/log/postgres.log
分析时段:
pgbadger -b "2012-06-25 10:56:11" -e "2012-06-25 10:59:11" /var/log/postgresql.log
分析前排除程序vb_dump:
pgbadger --exclude-appname "vb_dump" postgresql.log
每周报告错误:
30 23 * * 1 /usr/bin/pgbadger -q -w /var/log/postgresql.log -o /var/reports/pg_errors.html
每周使用增量行为生成报告:
0 4 * * 1 /usr/bin/pgbadger -q `find /var/log/ -mtime -7 -name "postgresql.log*"` -o /var/reports/pg_errors-`date +\%F`.html -l /var/reports/pgbadger_incremental_file.dat
自动产生增量报告:
0 4 * * * /usr/bin/pgbadger -I -q /var/log/postgresql/postgresql.log.1 -O /var/www/pg_reports/
示例
此处给出一个简单的示例,指导用户快速使用pgBadger构建一份日志报告。
使用数据库安装用户执行以下操作。
1、设置必要的日志相关GUC参数。
echo "log_statement = 'all'
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
log_destination='stderr'
log_min_duration_statement=0
log_duration = on
log_connections = on
log_disconnections = on" >>$PGDATA/postgresql.conf
2、重启数据库使设置生效。
vb_ctl restart
3、执行若干SQL,确保$OM_GAUSSLOG目录中存在用于日志分析的日志文件。
4、执行如下命令构建日志分析报告。其中postgresql-20xx-xx-xxxxx.log
是数据库日志文件的名称。
pgbadger -f stderr $OM_GAUSSLOG/postgresql-20xx-xx-xxxxx.log
报告构建成功的显示信息如下:
[========================>] Parsed 217879 bytes of 217879 (100.00%), queries: 358, events: 35
LOG: Ok, generating html report...