postgres:日志监控

使用一款开源工具pgbadger可以自动分析pgsql日志。

具体使用:

1.下载pgbadger-10.0.tar.gz

2.解压,执行perl Makefile.PL,再执行 make && make install。默认安装在/usr/local/bin/pgbadger

3.配置psql配置文件,配置文件在/path/pgsql/data/postgres.conf,修改内容包括以下:

 1 log_destination = 'stderr'
 2 # 日志记录类型,默认是stderr,只记录错误输出
 3 log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
 4 # log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
 5 log_checkpoints = on
 6 # 系统一天之类发生了多少次checkpoint,以及每次checkpoint的一些详细信息,频繁的checkpoint影响系统性能
 7 log_connections = on
 8 # log_connections    --用户session登陆时是否写入日志,默认off
 9 log_disconnections = on
10 # 用户session退出时是否写入日志,默认off
11 log_lock_waits = on
12 # 一天内有多少个超过死锁时间的锁发生,默认是off,可以设置开启。这个可以区分SQL慢是资源紧张还是锁等待的问题
13 log_temp_files = 0
14 log_autovacuum_min_duration = 0
15 log_error_verbosity = default
16 log_statement = off
17 lc_messages='C'
18 Log_min_duration_statement = 1000
19 # 单位ms,超过1s为慢查询
20 # 其他日志
21 logging_collector      --是否开启日志收集开关,默认off,开启要重启DB
22 log_directory      --日志路径,默认是$PGDATA/pg_log
23 log_filename       --日志名称,默认是postgresql-%Y-%m-%d_%H%M%S.log
24 log_rotation_age   --保留单个文件的最大时长,默认是1d,也有1h,1min,1s,个人觉得不实用
25 log_rotation_size  --保留单个文件的最大尺寸,默认是10MB
26 pg_statement  = log_statement
27 # 参数值是none,即不记录,可以设置ddl(记录create,drop和alter)、mod(记录ddl+insert,delete,update和truncate)和all(mod+select)

4.执行一条命令试一下:/usr/local/bin/badger /path/pg_log/xxx.log -o /path/xx.html -f stderr

>>>生成一个.html的报告文件,打开即可看到数据库的日志分析信息

5.自动化执行:

先写一个shell脚本(xx.sh)如下:

 1 #!/bin/bash
 2 CURRDATE=`date +%Y-%m-%d`
 3 PGDATA=/var/log/imoslog/pg_log
 4 REPTDIR=/home/yxb/pgtool/rep
 5 
 6 if [ -d $REPTDIR ]; then
 7     mkdir -p $REPTDIR
 8 fi
 9 
10 /usr/local/bin/pgbadger -q $PGDATA/postgresql-$CURRDATE_* -o $REPTDIR/reports_$CURRDATE.html -j 8 -f stderr
11 
12 find $REPTDIR -name reports_*.html -mtime +8 -exec rm -rf {} \;

再添加一个定时任务:

crontab -e

00 03 * * * sh xx.sh,保存后通过crontab -l查看

 

posted @ 2020-11-10 15:48  _titleInfo  阅读(433)  评论(0编辑  收藏  举报
//雪花飘落效果