数据库日志看看,是不是有什么问题?
VI打开密密麻麻的一片。还是用grep之类的命令过滤吧。
怎么这么多warning啊,严重影响看正常的日志。在用grep把这些warning屏蔽掉。
早在xxxx点都出问题了,日志已经有显示了,我们一直到现在才发现。
相信很多DBA同学遇到过类似的困扰,今天我们就介绍一下pgBadger,帮助我们分析日志的好工具。
[pgBadger使用]pgBadger是一款开源的快速分析PostgreSQL日志的工具,它使用perl语言编写。对日志进行分析之后输出成HTML文件。它生成的报告易于阅读。可以帮助我们查看错误日志、连接数、检查点、临时文件、VACUUM、Locks等信息。
到网站https://pgbadger.darold.net/上下载最新安装包,然后解压到指定目录。
在运行pgbadger之前,我们需要对PostgreSQL先进行配置。
1.打开SQL日志记录
log_min_duration_statement=0
如果执行的SQL语句超过了这个参数设置的值,就会记录到日志里面,类似于MySQL中的慢查询日志。默认值为-1,不记录到日志。当前我们系统设置的是1000ms,也就是大于1s的SQL语句将被记录到日志。
2.设置日志的前缀信息
这个分两种情况。和log_destination参数有关系。
如果是“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'
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
log_statement=none
这里不要log_statement不要启用,因为pgBadger不会解析它的日志格式。
4.设置字符集
最后一个是设置字符集。要确保自己的语言环境是英文的。
lc_messages='en_US.UTF- 8’
lc_messages='C'
以上参数设置完成之后,进入到pgbadger目录运行,指定日志文件输出成html格式。
. ./pgbadger--prefix '%t [%p]: user=%u,db=%d,app=%a,client=%h '/pg_data1/pg12/logs/postgresql-2020-11-26_093001.log -o11-26_093001.html
查看报告
接下来我们就可以查看报告了。
报告有以下信息:
查询、事件、Vacuum、临时文件、会话数、连接数。
接下来我们来看下我们需要关注的一些点。首先是TOPSQL语句。
这里有一个图表。显示了SQL语句的执行时间所在的数量,比如1-10s,有43个查询。大于10秒是11个查询。SQL执行的SQL语句都会列出来。
其次可以看看出现的错误,通过图标可以迅速发现16点是一个错误频发期。一共出现了11次错误。可以进一步查看具体报的什么错。
会话数,通过图形判断是否在某个时间点出现大量的连接。
查看各个数据库占用的会话数。
检查点这里提供了检查点过程的信息,包括写入的缓冲区数,WAL文件以及其他常规信息。
有了pgBadger工具,我们在查看错误日志的时候更加的得心应手。通过生成的图表可以有助于我们提前发现一些性能问题。同时它是开源和免费使用的,它的Licence在PostgreSQL下面。
同时我们可以搞一些高级的玩法,比如写一个crontab定期的分析html,还有远程分析html、增量分析等等。