PostgreSQL日志分析

前端之家收集整理的这篇文章主要介绍了PostgreSQL日志分析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

像其它数据库一样,Postgresql也有自己的日志系统,postgresql 日志方面有非常全面的设置参数,这篇不准备仔细的介绍 PG的日志参数,只介绍日志分析的一种方法,即可以将日志文件内容导入到数据库表里,便于分析日志。@H_502_1@ @H_502_1@ --日志文件目录 @H_502_1@ 日志的目录可以通过参数 log_directory 来设置,下面是我的参数设置。@H_502_1@ log_directory = '/var/applog/pg_log' @H_502_1@ @H_502_1@ [postgres@pg_log]$ ll /var/applog/pg_log @H_502_1@ -rw------- 1 postgres postgres 4.8M Mar 14 23:57 postgresql-2011-03-14_000000.csv@H_502_1@ -rw------- 1 postgres postgres 0 Mar 14 00:00 postgresql-2011-03-14_000000.log@H_502_1@ -rw------- 1 postgres postgres 294K Mar 15 15:10 postgresql-2011-03-15_000000.csv@H_502_1@ -rw------- 1 postgres postgres 0 Mar 15 00:00 postgresql-2011-03-15_000000.log

--CSV日志文件内容@H_502_1@ 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,LOG,00000,"disconnection: session time: 0:30:00.086 user=wapportal database=wapportal_216 host=172.16.3.43 port=59356",""@H_502_1@ 2011-03-15 00:07:03.514 CST,5173,"",4d7e3d27.1435,1,2011-03-15 00:07:03 CST,"connection received: host=172.16.3.43 port=51135",""

上面两条是 postgresql-2011-03-15_000000.csv 日志文件的部分内容,由于日志文件的可读性@H_502_1@ 较差,于是可以通过下面方法将CSV日志导入到数据库表里。详细如下

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

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

2--创建日志记录表@H_502_1@ CREATE TABLE postgres_log@H_502_1@ (@H_502_1@ log_time timestamp(3) with time zone,@H_502_1@ user_name text,@H_502_1@ database_name text,@H_502_1@ process_id integer,@H_502_1@ connection_from text,@H_502_1@ session_id text,@H_502_1@ session_line_num bigint,@H_502_1@ command_tag text,@H_502_1@ session_start_time timestamp with time zone,@H_502_1@ virtual_transaction_id text,@H_502_1@ transaction_id bigint,@H_502_1@ error_severity text,@H_502_1@ sql_state_code text,@H_502_1@ message text,@H_502_1@ detail text,@H_502_1@ hint text,@H_502_1@ internal_query text,@H_502_1@ internal_query_pos integer,@H_502_1@ context text,@H_502_1@ query text,@H_502_1@ query_pos integer,@H_502_1@ location text,@H_502_1@ application_name text,@H_502_1@ PRIMARY KEY (session_id,session_line_num)@H_502_1@ );

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

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

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

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

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

4--常用日志分析sql@H_502_1@ skytf=# select min(log_time),max(log_time) from skytf.postgres_log;@H_502_1@ min | max @H_502_1@ ----------------------------+----------------------------@H_502_1@ 2011-03-14 14:04:07.275+08 | 2011-03-16 05:04:34.427+08@H_502_1@ (1 row)

skytf=> select log_time,database_name,user_name,application_name,message from postgres_log where message like '%duration%';@H_502_1@ log_time | database_name | user_name | application_name | mess@H_502_1@ age @H_502_1@ ----------------------------+---------------+-----------+------------------+--------------------------------------------------------@H_502_1@ -------------------------------------------------------@H_502_1@ 2011-03-15 00:23:38.957+08 | db_lbs | lbs | | duration: 1297.440 ms execute <unnamed>: SELECT cit@H_502_1@ yname,province,the_geom as the_geom FROM china_city @H_502_1@ .......@H_502_1@ @H_502_1@ 为了显示方便,上面只取一条记录。

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

猜你在找的Postgre SQL相关文章