您的位置:首页 > 数据库

postgresql 日志配置

2015-08-13 18:17 441 查看
PostgreSQL有3种日志,分别是pg_log(数据库运行日志)、pg_xlog(WAL 日志,即重做日志)、pg_clog(事务提交日志,记录的是事务的元数据)

pg_log默认是关闭的,需要设置参数启用此日志。pg_xlog和pg_clog都是强制打开的,无法关闭。

1.启用pg_log并配置日志参数

log_destination = 'csvlog'

logging_collector = on

log_directory = 'pg_log'

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

log_rotation_age = 1d

log_rotation_size = 100MB

log_min_messages = info

# 记录执行慢的SQL

log_min_duration_statement = 60

log_checkpoints = on

log_connections = on

log_disconnections = on

log_duration = on

log_line_prefix = '%m'

# 监控数据库中长时间的锁

log_lock_waits = on

# 记录DDL操作

log_statement = 'ddl'

2.重启PostgreSQL即可在$PGDATA/pg_log/ 下看到新生成的日志。
pg_ctl restart -m fast

--日志文件目录   
   日志的目录可以通过参数  log_directory 来设置,下面是我的参数设置。

   log_directory = '/var/applog/pg_log'  

    

[postgres@pg_log]$ ll /var/applog/pg_log    

-rw------- 1 postgres postgres 4.8M Mar 14 23:57 postgresql-2011-03-14_000000.csv

-rw------- 1 postgres postgres    0 Mar 14 00:00 postgresql-2011-03-14_000000.log

-rw------- 1 postgres postgres 294K Mar 15 15:10 postgresql-2011-03-15_000000.csv

-rw------- 1 postgres postgres    0 Mar 15 00:00 postgresql-2011-03-15_000000.log

--CSV日志文件内容
2011-03-15 00:07:03.513 CST,"wapportal","wapportal_216",4137,"172.16.3.43:59356",4d7e361f.1029,3,"idle",2011-03-14 23:37:03 CST,,0,LOG,00000,"disconnection: session time: 0:30:00.086 user=wapportal database=wapportal_216 host=172.16.3.43 port=59356",,,,,,,,,""

2011-03-15 00:07:03.514 CST,,,5173,"",4d7e3d27.1435,1,"",2011-03-15 00:07:03 CST,,0,LOG,00000,"connection received: host=172.16.3.43 port=51135",,,,,,,,,""

   上面两条是 postgresql-2011-03-15_000000.csv 日志文件的部分内容 ,由于日志文件的可读性

 较差,于是可以通过下面方法将CSV日志导入到数据库表里。详细如下

 
将CSV日志导入数据库表里   
1--调整参数
log_destination = 'csvlog'

logging_collector = on

    这两个参数修改后,PG SERVER 需要重启。

2--创建日志记录表
CREATE TABLE postgres_log

(

  log_time timestamp(3) with time zone,

  user_name text,

  database_name text,

  process_id integer,

  connection_from text,

  session_id text,

  session_line_num bigint,

  command_tag text,

  session_start_time timestamp with time zone,

  virtual_transaction_id text,

  transaction_id bigint,

  error_severity text,

  sql_state_code text,

  message text,

  detail text,

  hint text,

  internal_query text,

  internal_query_pos integer,

  context text,

  query text,

  query_pos integer,

  location text,

  application_name text,

  PRIMARY KEY (session_id, session_line_num)

);

NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "postgres_log_pkey" for table "postgres_log"

CREATE TABLE;

    备注:创建日志表 postgres_log 用来保存 CSV日志数据。

3--导入操作系统 csv 日志到表 postgres_log 表
skytf=# copy skytf.postgres_log from '/var/applog/pg_log/postgresql-2011-03-14_000000.csv' with csv;

COPY 26031

skytf=# copy skytf.postgres_log from '/var/applog/pg_log/postgresql-2011-03-15_000000.csv' with csv;

COPY 1297

      备注:文件形式导入导出数据需要以超级用户 postgres 连接到目标库。

4--常用日志分析sql
skytf=# select min(log_time),max(log_time) from skytf.postgres_log;

            min             |            max             

----------------------------+----------------------------

 2011-03-14 14:04:07.275+08 | 2011-03-16 05:04:34.427+08

(1 row)

skytf=> select log_time,database_name,user_name,application_name,message from postgres_log where message like '%duration%';

          log_time          | database_name | user_name | application_name |                                                    mess

age                                                    

----------------------------+---------------+-----------+------------------+--------------------------------------------------------

-------------------------------------------------------

 2011-03-15 00:23:38.957+08 | db_lbs        | lbs       |                  | duration: 1297.440 ms  execute <unnamed>:    SELECT cit

yname,province,the_geom as the_geom FROM china_city   

.......

    

       为了显示方便,上面只取一条记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  postgresql