Greenplum 日志管理


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 

      控制寫入日志等級,有效值有 

      DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORLOGFATAL, 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM