PostgreSQL日志配置记录

日志审计 sql

审计是值记录用户的登录退出以及登录后在数据库里的行为操做,能够根据安全等级不同设置不同级别的审计, 数据库

此处涉及的参数文件有:安全

 

logging_collector      --是否开启日志收集开关,默认off,开启要重启DB网络

log_destination    --日志记录类型,默认是stderr,只记录错误输出session

log_directory      --日志路径,默认是$PGDATA/pg_log, 这个目录最好不要和数据文件的目录放在一块儿, 目录须要给启动postgres的操做系统用户写权限.post

log_filename       --日志名称,默认是postgresql-%Y-%m-%d_%H%M%S.log性能

log_file_mode   --日志文件类型,默认为0600spa

log_truncate_on_rotation  --默认为off,设置为on的话,若是新建了一个同名的日志文件,则会清空原来的文件,再写入日志,而不是在后面附加。操作系统

log_rotation_age   --保留单个文件的最大时长,默认是1d,也有1h,1min,1s,我的以为不实用插件

log_rotation_size  --保留单个文件的最大尺寸,默认是10MB

log_error_verbosity --默认为default,verbose表示冗长的

log_connections    --用户session登录时是否写入日志,默认off

log_disconnections --用户session退出时是否写入日志,默认off

 

 

【推荐的日志配置】

logging_collector = on
log_destination = 'csvlog'
log_truncate_on_rotation = on
log_connections = off
log_disconnections = off
log_error_verbosity = verbose
log_statement = ddl
log_min_duration_statement = 60s
log_checkpoints = on
log_lock_waits = on
deadlock_timeout = 1s

 

1.记录级别

记录用户登录数据库后的各类操做,postgres日志里分红了3类,经过参数pg_statement来控制,默认的pg_statement参数值是none,即不记录,能够设置ddl(记录create,drop和alter)、mod(记录ddl+insert,delete,update和truncate)和all(mod+select)。

 

log_statement = ddl

 

通常的OLTP系统审计级别设置为ddl就够了,由于记录输出各类SQL对性能的影响仍是蛮大的,安全级别高一点的也能够设置mod模式,有条件也能够不在数据库层面作,而是购买设备放在网络层监控解析。

 

若是这里设置为none,在 log_min_duration_statement设置为60s,那么log_min_duration_statement也会生效,将执行时间超过60s的SQL打印到日志。

 

按不一样状况进行配置审计级别:

1)审计用户hm连到数据库hm 的全部SQL.

alter role hm in database hm set log_statement='all';

2) 审计用户hm 的全部SQL.

alter role hm set log_statement='all';

3) 审计任何用户链接到数据库hm 的全部SQL.

 alter database hm set log_statement='all';

 

 

2.定位慢查询SQL 

能够设置必定时长的参数(log_min_duration_statement),来记录超过该时长的全部SQL,对找出当前数据库的慢查询颇有效。 好比log_min_duration_statement = 2s,记录超过2秒的SQL,改完须要reload 

 

log_min_duration_statement = 2s

 

3.监控数据库的checkpoint 

当数据库进行一项大更新操做时,若是参数设置不当,会在日志里留下大量的告警信息,频繁的作checkpoint会致使系统变慢,不用设置都会有。

可是不会记录系统正常的checkpoint,若是你想看系统一天之类发生了多少次checkpoint,以及每次checkpoint的一些详细信息,好比buffer,sync等,就能够经过设置log_checkpoints,该参数默认值是off。

 

log_checkpoints = on 

 

4.监控数据库的锁 

数据库的锁一般能够在pg_locks这个系统表里找,但这只是当前的锁表/行信息,若是你想看一天内有多少个超过死锁时间的锁发生,能够在日志里设置并查看,log_lock_waits 默认是off,能够设置开启。这个能够区分SQL慢是资源紧张仍是锁等待的问题。

log_lock_waits=on

deadlock_timeout=1

还有一些Debug功能,适合修改源码调试,通常的的系统上并不须要,暂时比较关注的就这些。

 

5.能够在表上设置触发器,来审计

 

6.可使用插件pg_log_userqueries 来作,没有必要

 

【注意事项】

1. 超级用户能够修改这些配置项, 因此被审计的用户最好是普通用户. 不然用户连上来能够修改这些审计项.

2. 程序用的数据库帐号和我的用的数据库帐号分开, 对于程序用的数据库帐号能够只审计DDL操做, 而对于我的使用的数据库帐号, 建议审计全部的SQL.

3. 变量优先级(事务>会话>database/role>启动参数>配置文件) 

某些全局变量能够动态修改,例如本文提到的log_statement。修改后reload以后,全部会话都会读到最新的变量

相关文章
相关标签/搜索