Postgresql日誌收集

PG安裝完成後默認不會記錄日誌,必須修改對應的(${PGDATA}/postgresql.conf)配置才能夠,這裏只介紹經常使用的日誌配置。sql

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中。app

[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進程。post

[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}的相對路徑,即${PGDATA}/pg_log,也能夠改成絕對路徑this

默認爲${PGDATA}/pg_log,即集羣目錄下,可是日誌文件可能會很是多,建議將日誌重定向到其餘目錄或分區。spa

將此配置修改成/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下postgresql

[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 
相關文章
相關標籤/搜索