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查看