postgresql9.5.9相关的日志文件介绍

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:

一.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 = warning


参数解释:

log_directory = '/data/pgsql086/log'

这个参数只能在postgresql.conf文件中被设置。它决定存放数据库运行日志文件的目录。默认值是pg_log。可以是绝对路径,也可是相对路径(相对于数据库文件所在的路径)。


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

它决定数据库运行日志文件的名称。默认值是postgresql-%Y-%m-%d_%H%M%S.log。它的值可以包含%Y、%m、%d、%H、%M和%S这样的字符串,分别表示年、月、日、小时、分和秒。 如果参数的值中没有指定时间信息(没有出现%Y、%m、%d、%H、%M和%S中的任何一个),系统会自动在log_filename值的末尾加上文件创建的时间作为文件名,例如,如果log_filename的值是 server_log,那么在Sun Aug 29 19:02:33 2004 MST被创建的日志文件的名称将是server_log.1093827753,1093827753是Sun Aug 29 19:02:33 2004 MST在数据库内部的表示形式。这个参数只能在postgresql.conf文件中被设置。


log_rotation_age = 1d

单个日志文件的生存期,默认1天,在日志文件大小没有达到log_rotation_size时,一天只生成一个日志文件


log_rotation_size = 10MB 

这个参数只能在postgresql.conf文件中被设置。单个日志文件的大小,如果时间没有超过log_rotation_age,一个日志文件最大只能到10M,否则将新生成一个日志文件。


log_min_messages = warning  默认是warning ,

控制写到数据库日志文件中的消息的级别。合法的取值是DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、INFO、NOTICE、WARNING、ERROR、 LOG、FATAL和PANIC,每个级别都包含排在它后面的所有级别中的信息。级别越高,数据库运行日志中记录的消息就越多。


重启postgresql服务:

[postgres@cacti log]$ pg_ctl status

pg_ctl: no server running

[postgres@cacti log]$ pg_ctl start

server starting

[postgres@cacti log]$ LOG:  redirecting log output to logging collector process

HINT:  Future log output will appear in directory "/data/pgsql086/log".


[postgres@cacti log]$ ll /data/pgsql086/log/*

-rw-------. 1 postgres postgres 30477 Nov  2 12:01 /data/pgsql086/log/postgres.log

-rw-------. 1 postgres postgres   794 Nov  2 15:14 /data/pgsql086/log/postgresql-2017-11-02_151410.csv

-rw-------. 1 postgres postgres    96 Nov  2 15:14 /data/pgsql086/log/postgresql-2017-11-02_151410.log

[postgres@cacti log]$ tailf /data/pgsql086/log/postgresql-2017-11-02_151410.csv

2017-11-02 15:14:10.385 CST,,,21315,,59fac5c2.5343,1,,2017-11-02 15:14:10 CST,,0,LOG,00000,"ending log output to stderr",,"Future log output will go to log destination ""csvlog"".",,,,,,,""

2017-11-02 15:14:10.387 CST,,,21317,,59fac5c2.5345,1,,2017-11-02 15:14:10 CST,,0,LOG,00000,"database system was shut down at 2017-11-02 15:13:29 CST",,,,,,,,,""

2017-11-02 15:14:10.389 CST,,,21317,,59fac5c2.5345,2,,2017-11-02 15:14:10 CST,,0,LOG,00000,"MultiXact member wraparound protections are now enabled",,,,,,,,,""

2017-11-02 15:14:10.392 CST,,,21321,,59fac5c2.5349,1,,2017-11-02 15:14:10 CST,,0,LOG,00000,"autovacuum launcher started",,,,,,,,,""

2017-11-02 15:14:10.392 CST,,,21315,,59fac5c2.5343,2,,2017-11-02 15:14:10 CST,,0,LOG,00000,"database system is ready to accept connections",,,,,,,,,""

2017-11-02 15:14:43.211 CST,,,21338,"127.0.0.1:33506",59fac5e3.535a,1,"",2017-11-02 15:14:43 CST,,0,LOG,00000,"connection received: host=127.0.0.1 port=33506",,,,,,,,,""

2017-11-02 15:14:43.212 CST,"postgres","postgres",21338,"127.0.0.1:33506",59fac5e3.535a,2,"authentication",2017-11-02 15:14:43 CST,2/5,0,LOG,00000,"connection authorized: user=postgres database=postgres",,,,,,,,,""

2017-11-02 15:14:55.416 CST,,,21339,"127.0.0.1:33507",59fac5ef.535b,1,"",2017-11-02 15:14:55 CST,,0,LOG,00000,"connection received: host=127.0.0.1 port=33507",,,,,,,,,""

2017-11-02 15:14:55.417 CST,"postgres","testdb03",21339,"127.0.0.1:33507",59fac5ef.535b,2,"authentication",2017-11-02 15:14:55 CST,3/1,0,LOG,00000,"connection authorized: user=postgres database=testdb03",,,,,,,,,""

2017-11-02 15:15:26.873 CST,"postgres","testdb03",21339,"127.0.0.1:33507",59fac5ef.535b,3,"SELECT",2017-11-02 15:14:55 CST,3/4,0,ERROR,42P01,"relation ""weather1"" does not exist",,,,,,"select * from weather1;",15,,"psql.bin"

上面两条是 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运行日志文件,同时postgresql-2017-11-02_151410.csv只记录错误日志

[postgres@cacti log]$ pg_ctl stop

waiting for server to shut down.... done

server stopped

[postgres@cacti log]$ pg_ctl start

server starting

[postgres@cacti log]$ LOG:  redirecting log output to logging collector process

HINT:  Future log output will appear in directory "/data/pgsql086/log".


[postgres@cacti log]$ ll /data/pgsql086/log/

total 56

-rw-------. 1 postgres postgres 30477 Nov  2 12:01 postgres.log

-rw-------. 1 postgres postgres  4971 Nov  2 15:37 postgresql-2017-11-02_151410.csv

-rw-------. 1 postgres postgres    96 Nov  2 15:14 postgresql-2017-11-02_151410.log

-rw-------. 1 postgres postgres   794 Nov  2 15:37 postgresql-2017-11-02_153751.csv

-rw-------. 1 postgres postgres    96 Nov  2 15:37 postgresql-2017-11-02_153751.log



2.记录执行慢的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'


参考博文:

http://www.cnblogs.com/alianbog/p/5596921.html

http://blog.csdn.net/shanzhizi/article/details/47616645



 本文转自 wjw555 51CTO博客,原文链接:http://blog.51cto.com/wujianwei/1978449

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
23天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
77 1
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo日志文件输出到指定目录 如何定义?
Dubbo日志文件输出到指定目录 如何定义?
|
1月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
29 0
|
1月前
|
Linux 应用服务中间件 nginx
【PUSDN】centos查看日志文件内容,包含某个关键字的前后5行日志内容,centos查看日志的几种方法
【PUSDN】centos查看日志文件内容,包含某个关键字的前后5行日志内容,centos查看日志的几种方法
47 0
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
49 0
|
3月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
200 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo日志文件输出到指定目录 如何定义?
Dubbo日志文件输出到指定目录 如何定义?
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo日志文件输出到指定目录 如何定义?
Dubbo日志文件输出到指定目录 如何定义?
|
5天前
|
运维 Oracle 关系型数据库
Oracle日志文件:数据王国的“记事本”
【4月更文挑战第19天】Oracle日志文件是数据库稳定运行的关键,记录数据变更历史,用于恢复和故障处理。它们协调并发操作,确保数据一致性和完整性。日志文件实时写入操作信息并定期刷新到磁盘,便于数据恢复。然而,日志文件需备份和归档以保证安全性,防止数据丢失。日志文件,数据王国的“记事本”,默默守护数据安全。
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 实时监控日志文件 swatch命令 使用指南
【Shell 命令集合 系统管理 】Linux 实时监控日志文件 swatch命令 使用指南
34 1