Greenplum 日志管理
日志路徑
-
$GPADMIN_HOME 是操作系統用戶gpadmin的家目錄路徑。
-
$MASTER_DATA_DIRECTORY是Greenplum數據庫master主機的數據目錄。
-
$GPDATA_DIR是Greenplum數據庫segment主機的數據目錄。
-
host表示segment主機的主機名。
-
segprefix是segment前綴。
-
N是segment實例數量。
-
date是YYYYMMDD格式的日期。
日志參數
Greenplum的日志參數基本沿用了postgres的日志參數,主要包括以下三個部分:
-
何處寫日志
-
log_destination
日志位置可以輸出到stderr, csvlog, syslog
-
logging_collector
使用日志收集器,其是一個收集發送到stderr日志的后台進程,收集日志后該進程會將日志重定向到日志文件
-
log_directory
日志路徑,需要logging_collector開啟
-
log_filename
日志名字/模式,需要logging_collector開啟,采用strftime模式設置
-
log_file_mode
日志文件權限,需要logging_collector開啟,采用八進制,默認0600,代表服務擁有者擁有讀寫權限,
-
log_rotation_age
日志切換間隔,需要logging_collector開啟,確認單個日志文件的時間長度,單位分鍾,默認是24小時
-
log_rotation_size
日志切換大小,需要logging_collector開啟,確認單個日志文件的最大大小,單位kb,默認10M
-
log_truncate_on_rotation
使能同名日志的truncate/overwrite, 需要logging_collector開啟,注意:truncate只會基於時間的日志切換,由文件大小或者數據庫重啟導致的日志切換不會觸發日志truncate
設置七日日志輪轉:log_filename: server_log.%a
log_rotation_age:1440
log_truncate_on_rotation: on
-
-
何時寫日志
-
log_min_messages
控制寫入日志等級,有效值有
DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC,默認值為warning,注意其和客戶端等級client_min_messages略有區別
-
log_min_error_statement
控制觸發服務器日志記錄的sql statement,等級和log_min_message相同,但是默認值為ERROR,即當sql statement造成了error或以上級別的錯誤后,該sql將被記錄
-
log_min_duration_statement
當一條statement持續時間超過該參數后,此條statement將被記錄,可用於控制慢查詢日志的記錄,默認單位微秒
-
log_min_duration_sample
和log_min_duration_statement差不多,但是一個采樣子集,主要用在traffic過高的情況下
-
log_statement_sample_rate
顧名思義,采樣率,范圍0-1,默認為1
-
log_transaction_sample_rate
以事務為視角的采樣率,它對於事務采樣幫助比較大
-
-
記錄什么日志
-
application_name
連接數據庫的應用名
-
debug_print_parse
-
debug_print_rewritten
-
debug_print_plan
使能不同的調試輸入,parse輸出解析樹,重寫輸出以及執行計划,這些消息位於LOG層
-
debug_pretty_print
故名思意,增加縮進,打印的更好看
-
log_checkpoints
記錄checkpoint點,同時包含寫入的緩沖數據以及寫入時間等
-
log_connections
記錄每一次對服務器的嘗試連接
-
log_disconnections
記錄連接斷開時間和持續時間
-
log_duration
記錄每一個完成的statement的持續時間
-
log_error_verbosity
日志的詳細等級,VERBOSE甚至會打印源代碼文件名,函數名和行號
-
log_hostname
記錄客戶端主機的主機名
-
log_line_prefix
日志行前綴
-
log_lock_waits
當一個session等待超過deadlock-time后,將會產生一條鎖等待日志,這個參數對於診斷鎖等待造成的性能問題很有用
-
log_parameter_max_length
確定非錯誤statement的綁定參數的可打印長度
-
log_parameter_max_length_on_error
確定錯誤statement的綁定參數的可打印長度
-
log_statement
控制記錄哪種類型的SQL,ddl記錄所有數據定義語句,mod記錄所有ddl+dml
-
log_replication_commands
記錄每一個replication命令
-
log_temp_files
記錄臨時文件名和尺寸,只記錄大小大於該參數的臨時文件
-
log_timezone
設置服務器日志記錄的時區
-
日志視圖
gp_toolkit是greenplum的一個管理schema,我們可以使用其中的幾個視圖查看數據庫日志,gp_toolkit不在默認的搜索路徑中,需要手動添加。
-
gp_log_command_timings
該視圖使用外部表讀取master主機上的日志文件以報告sql命令的執行時間,該視圖需要超級用戶權限,有一點不方便的是,它不能查看具體是哪一條sql語句。
-
gp_log_database
該視圖使用外部表讀取主機日志(master,segments,mirrors)並列出和當前數據庫相關的日志條目,該視圖需要超級用戶權限,需要查詢segment日志可以使用該視圖
- gp_log_master_concise
該視圖是master日志文件的子集,信息比較簡明:
-
gp_log_system
該視圖是最全面的一個日志視圖,包括整個系統的所有日志條目,日志條目通過session id和logsession的組合主鍵進行唯一區分,列和gp_log_database差不多,區別是gp_log_database顯示當前連接庫的日志,而gp_log_system顯示所有庫的日志信息
日志清理
默認情況下pg_clog文件夾下日志會逐漸增加,日志參數log_truncate_on_rotation
只適用於基於時間的日志切換,在沒有日志歸檔的情況,如果在基於時間切換日志模式下,某時間段內日志膨脹,則可能導致磁盤耗盡,因此需要使用日志歸檔或者啟用linux定時任務。
-
設置log_rotation_age=1d,log_rotation_size=100M(大小可根據磁盤百分比適配)
-
不啟用log_truncate_on_rotation,而設置root用戶的crontab配置文件:
echo '* * * * * /root/gp_log_clean.sh' >> /var/spool/cron/root 開啟定時清理任務
gp_log_clean.sh:
#!/bin/sh
logDir=/data/master/gpseg-1/pg_log
declare -i fileNumber=$(ls ${logDir}/*csv | wc -l)
echo "fileNumber = $fileNumber"
if [ ${fileNumber} -gt 7 ]; then
echo "now do log clean"
echo $(ls -t ${logDir}/*csv | tail -n 1)
rm -f $(ls -t ${logDir}/*csv | tail -n 1)
fi