PostgreSQL的日志系统

像其它数据库一样,PostgreSQL也有自己的日志系统,postgresql 日志方面有非常全面的设置参数,这篇不准备仔细的介绍PG的日志参数,只介绍日志分析的一种方法,即可以将日志文件内容导入到数据库表里,便于分析日志。

--日志文件目录  
   日志的目录可以通过参数  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  
.......
   
       为了显示方便,上面只取一条记录。

5--总结
        当数据库出现异常需要详细分析日志文件时,上面的方法提供了一个非常有效的方式,
将数据库日志导入到表里,能够更准确,方便地分析数据库日 志。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值