1. 配置文件参数修改
pgBadger 支持任何自定义格式设置为 postgresql.conf 文件中的 log_line_prefix 指令,只要它至少指定了一个时间转义序列(%t、%m 或 %n)和进程相关的转义序列(%p 或 %c)。
例如,对于 ‘stderr’ 日志格式,log_line_prefix 必须至少为:
log_line_prefix = '%t [%p]: '
日志行前缀可以添加用户、数据库名称、应用程序名称和客户端 IP 地址,例如:
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
对于 syslog 日志文件格式,log_line_prefix 可以为:
log_line_prefix = '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 = 'db=%d,user=%u,app=%a,client=%h '
要从日志文件中获取更多信息,需要在 postgresql.conf 中启用其他参数:
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_statement,因为它的日志格式将不会被 pgBadger 解析。
当然,您的日志消息应该是以英文为基础的,可以有或没有区域设置:
lc_messages='en_US.UTF-8'
lc_messages='C'
2. 拉取pgbadger镜像
docker pull allen226/pgbadger
3. 在本机存储pglog的path(该例子为/data/pg_data/pg_log)下新建一个output目录以存放输出的html文件
mkdir /data/pg_data/pg_log/output
4. 创建docker-compose.yaml文件
version: '2'
services:
pgbadger:
image: allen226/pgbadger
restart: always
entrypoint: ["/usr/bin/tail"]
volumes:
- /data/pg_data/pg_log:/original_log_files # /data/pg_data/pg_log替换为本机存储pglog的path
- /data/pg_data/pg_log/output:/results_html_files # /data/pg_data/pg_log替换为本机存储pglog的path
command: ["-F", "anything"]
将/data/pg_data/pg_log替换为宿主机存储pg log的path
5. 在docker-compose.yaml文件目录下启动容器
docker-compose up -d
6. 使容器时间和宿主机同步,以保证生成的html图表时间准确
# 在宿主机上操作
docker cp /etc/localtime 容器ID:/etc/
7. 使用pgbadger生成html报告
docker-compose -f 替换为存放docker-compose.yaml文件的目录/docker-compose.yaml exec pgbadger bash -c "pgbadger -f csv 日志文件(支持通配符) -o 输出html报告的path,例如/data/out.html -Z Asia/Shanghai -j 1"
# -f后跟log格式:syslog, syslog2, stderr, jsonlog,csv, pgbouncer, logplex, rds and redshift(我的log格式为csv,所以此处使用csv作为例子)
# -Z后跟时区
# -j后跟处理日志文件的线程数
具体参数解释:https://pgbadger.darold.net/documentation.html#POSTGRESQL-CONFIGURATION
8. 在…/output下找到html文件,可以使用sz传到本地在浏览器中查看,也可以使用httpd直接放到网上查看
html文件在浏览器中打开的样式图:
可见,有非常多的指标可以查看