Postgresql日志收集

PG安装完成后默认不会记录日志,必须修改对应的(${PGDATA}/postgresql.conf)配置才可以,这里只介绍常用的日志配置。

1.logging_collector = on/off  ----  是否将日志重定向至文件中,默认是off(该配置修改后,需要重启DB服务)

DB安装完成,启动的服务进程如下

[root@localhost ~]# ps -elf | grep postgres
0 S postgres  2385     1  0  80   0 - 66829 poll_s 12:41 ?        00:00:00 /opt/pg9.6/bin/postgres -D /mnt/pgdata
1 S postgres  2387  2385  0  80   0 - 66829 ep_pol 12:41 ?        00:00:00 postgres: checkpointer process
1 S postgres  2388  2385  0  80   0 - 66829 ep_pol 12:41 ?        00:00:00 postgres: writer process
1 S postgres  2389  2385  0  80   0 - 66870 ep_pol 12:41 ?        00:00:00 postgres: wal writer process
1 S postgres  2390  2385  0  80   0 - 66952 ep_pol 12:41 ?        00:00:00 postgres: autovacuum launcher process
1 S postgres  2391  2385  0  80   0 - 29643 ep_pol 12:41 ?        00:00:00 postgres: stats collector process

将此配置修改为on,并重启DB服务,DB启动过程中会提示将日志重定向${PGDATA}/pg_log中。

[root@localhost ~]# su -l postgres -c '/opt/pg9.6/bin/pg_ctl -D /mnt/pgdata start'
server starting
LOG:  redirecting log output to logging collector process
HINT:  Future log output will appear in directory "pg_log".

此时在运行的进程如下,与之前相比,多了一个logger进程。

[root@localhost ~]# ps -elf | grep postgres
0 S postgres  2448     1  0  80   0 - 66830 poll_s 12:50 ?        00:00:00 /opt/pg9.6/bin/postgres -D /mnt/pgdata
1 S postgres  2449  2448  0  80   0 - 29645 ep_pol 12:50 ?        00:00:00 postgres: logger process
1 S postgres  2451  2448  0  80   0 - 66830 ep_pol 12:50 ?        00:00:00 postgres: checkpointer process
1 S postgres  2452  2448  0  80   0 - 66830 ep_pol 12:50 ?        00:00:00 postgres: writer process
1 S postgres  2453  2448  0  80   0 - 66871 ep_pol 12:50 ?        00:00:00 postgres: wal writer process
1 S postgres  2454  2448  0  80   0 - 66953 ep_pol 12:50 ?        00:00:00 postgres: autovacuum launcher process
1 S postgres  2455  2448  0  80   0 - 29644 ep_pol 12:50 ?        00:00:00 postgres: stats collector process

以下配置修改不需要重启服务,只需重载配置

[root@localhost ~]# su -l postgres -c '/opt/pg9.6/bin/pg_ctl -D /mnt/pgdata reload'

2.log_directory = 'pg_log' ---- 日志文件目录,默认是PGDATA的相对路径,即" role="presentation" style="position: relative;">PGDATA的相对路径,即PGDATA的相对路径,即{PGDATA}/pg_log,也可以改为绝对路径

默认为${PGDATA}/pg_log,即集群目录下,但是日志文件可能会非常多,建议将日志重定向到其他目录或分区。

将此配置修改为/var/log/pg_log下,必须先创建此目录,并修改权限,如

[root@localhost ~]# mkdir -p /var/log/pg_log
[root@localhost ~]# chown postgres:postgres /var/log/pg_log/
[root@localhost ~]# chmod 700 /var/log/pg_log/

重启DB服务后,日志将重定向至/var/log/pg_log下

[root@localhost ~]# su -l postgres -c '/opt/pg9.6/bin/pg_ctl -D /mnt/pgdata start'
server starting
LOG:  redirecting log output to logging collector process
HINT:  Future log output will appear in directory "/var/log/pg_log".

[root@localhost ~]# ls /var/log/pg_log/
postgresql-2016-06-18_130611.log

3.log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' ---- 日志文件命名形式,使用默认即可

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

5. log_rotation_size = 10MB  ---- 单个日志文件的大小,如果时间没有超过log_rotation_age,一个日志文件最大只能到10M,否则将新生成一个日志文件。

6.log_truncate_on_rotation = off ---- 当日志文件已存在时,该配置如果为off,新生成的日志将在文件尾部追加,如果为on,则会覆盖原来的日志。

7.log_lock_waits = off ---- 控制当一个会话等待时间超过deadlock_timeout而被锁时是否产生一个日志信息。在判断一个锁等待是否会影响性能时是有用的,缺省是off。

8.log_statement = 'none' # none, ddl, mod, all ---- 控制记录哪些SQL语句。none不记录,ddl记录所有数据定义命令,比如CREATE,ALTER,和DROP 语句。mod记录所有ddl语句,加上数据修改语句INSERT,UPDATE等,all记录所有执行的语句,将此配置设置为all可跟踪整个数据库执行的SQL语句。

9.log_duration = off ---- 记录每条SQL语句执行完成消耗的时间,将此配置设置为on,用于统计哪些SQL语句耗时较长。

10.log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements and their durations, > 0 logs only statements running at least this number of milliseconds

-1表示不可用,0将记录所有SQL语句和它们的耗时,>0只记录那些耗时超过(或等于)这个值(ms)的SQL语句。个人更喜欢使用该配置来跟踪那些耗时较长,可能存在性能问题的SQL语句。虽然使用log_statement和log_duration也能够统计SQL语句及耗时,但是SQL语句和耗时统计结果可能相差很多行,或在不同的文件中,但是log_min_duration_statement会将SQL语句和耗时在同一行记录,更方便阅读。

11.log_connections = off ----是否记录连接日志

12.log_disconnections = off ---- 是否记录连接断开日志

13.log_line_prefix = '%m %p %u %d %r ' ---- 日志输出格式(%m,%p实际意义配置文件中有解释),可根据自己需要设置(能够记录时间,用户名称,数据库名称,客户端IP和端口,方便定位问题)

14.log_timezone = 'Asia/Shanghai' ---- 日志时区,最好和服务器设置同一个时区,方便问题定位

服务器时区设置

[root@localhost ~]# cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(0)

相关推荐

  • PostgreSQL用户登录失败自动锁定的解决办法

    墨墨导读:PostgreSQL使用session_exec插件实现用户密码验证失败几次后自动锁定,本文介绍一种处理方案. 一.插件session_exec安装配置篇 下载插件并编译安装. https: ...

  • Mysql访问日志记录

    假设这么一个情况,你是某公司mysql-DBA,某日突然公司数据库中的所有被人为删了. 尽管有数据备份,但是因服务停止而造成的损失上千万,现在公司需要查出那个做删除操作的人. 但是拥有数据库操作权限的 ...

  • 号称下一代日志收集系统!来看看它有多强

    后面随着架构的优化与演进,又引入另一个轻量级的组件 Filebeat,Filebeat和Logstash一样属于日志收集处理工具,基于原先 Logstash-fowarder 的源码改造出来的.与Lo ...

  • ES 慢查询日志收集实战总结

    前言 在执行elasticsearch查询的时候,有些查询会占用大量的资源导致响应很慢,这个时候就需要ES对慢查询进行监控.找到那些响应很慢的请求.ES的请求主要分为搜索和索引,ES也分别提供了这两种 ...

  • Go实现海量日志收集系统(二)

    51Reboot 将在 2020.1.16日 21:00 为您带来分享主题<大佬教你如何从 ES 初学者到 ES专家>直播链接(提前报名):https://ke.qq.com/course ...

  • K8s~为pod添加sidecar进行日志收集

    我们在k8s部署服务时,一般来说一个服务会对应一类pod,而pod通过rs实现副本集,而这些pod的日志一般有控制台stdout和文件的,一般会把这些日志最终输出到elasticsearch里,再通过 ...

  • java 执行shell命令及日志收集避坑指南

    有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用.涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的. 废话不多说,java如何执行shell ...

  • 广华日志漫笔99977(97)

    刚开始做流量的时候,不要想着我每天怎么搞个100个200个,就想着我每天怎么能搞到10个精准,我怎么能每天搞到10个精准流量,当你真的做到了这一点,当你真正做到了这一点,那你就超越了大部分人. 等人啊 ...

  • 广华日志漫笔99977(96)

    当一个人一单变成了讲台,当一个人一单穿着西装打着领带站上了演讲台,这就说明什么,说明他一辈子也不会再说一句实话了,说明他一辈子再也不会说一句实话了. 改变命运最快的方法就是做推广,改变命运最快的方法就 ...

  • 广华日志漫笔99977(95)

    为什么很多兄弟姐妹她迷恋于做视频,因为她的流量90%都是通过视频来的,为什么很多兄弟姐妹她迷恋于做音频,因为它的流量很多都是通过做音频来的,那为什么有很多兄弟姐妹迷恋于做文章,因为它的流量都是通过文章 ...

  • 广华日志漫笔99977(94)

    别人为什么会在我们这里买的?因为他刷音频的时候看到的是你的音频,他刷视频的时候看到的是你的视频,他刷文章的时候刷到的是你的文章,这样子的话他们干的几率是不是就会大一些? 我理解的赚钱就是把项目卖给需要 ...