W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
把數(shù)據(jù)庫服務(wù)器的日志輸出保存在一個地方是個好主意, 而不是僅僅通過/dev/null
丟棄它們。 在進行問題診斷的時候,日志輸出是非常寶貴的。不過,日志輸出可能很龐大(特別是在比較高的調(diào)試級別上), 因此你不會希望無休止地保存它們。你需要輪轉(zhuǎn)日志文件, 這樣在一段合理的時間后會開始新的日志文件并且移除舊的。
如果你簡單地把postgres
的stderr定向到一個文件中,你會得到日志輸出,但是截斷該日志文件的唯一方法是停止并重起服務(wù)器。這樣做對于開發(fā)環(huán)境中使用的PostgreSQL可能是可接受的,但是你肯定不想在生產(chǎn)環(huán)境上這么干。
一個更好的辦法是把服務(wù)器的stderr輸出發(fā)送到某種日志輪轉(zhuǎn)程序里。我們有一個內(nèi)建的日志輪轉(zhuǎn)程序,你可以通過在 postgresql.conf
里設(shè)置配置參數(shù)logging_collector
為true
的辦法啟用它。該程序的控制參數(shù)在 第 19.8.1 節(jié)里描述。你也可以使用這種方法把日志數(shù)據(jù)捕捉成機器可讀的CSV(逗號分隔值)格式。
另外,如果在你已經(jīng)使用的其他服務(wù)器軟件中有一個外部日志輪轉(zhuǎn)程序,你可能更喜歡使用它。 比如,包含在Apache發(fā)布里的rotatelogs工具就可以用于PostgreSQL。要做到這一點,方法之一是把服務(wù)器的stderr用管道重定向到要用的程序。
如果你用pg_ctl
啟動服務(wù)器,那么stderr已經(jīng)重定向到stdout, 因此你只需要一個管道命令,比如:
pg_ctl start | rotatelogs /var/log/pgsql_log 86400
您可以通過設(shè)置logrotate來收集由PostgreSQL內(nèi)置日志收集器生成的日志文件來組合這些方法。在這種情況下,日志收集器定義日志文件的名稱和位置,而logrotate 則定期歸檔這些文件。啟動日志輪轉(zhuǎn)時,logrotate必須確保應(yīng)用程序?qū)⑦M一步的輸出發(fā)送到新文件。這通常是通過
postrotate
腳本完成的,該腳本向應(yīng)用程序發(fā)送SIGHUP
信號,使其重新打開日志文件。在PostgreSQL中,您可以使用logrotate
選項運行pg_ctl
。服務(wù)器收到此命令后,服務(wù)器將切換到新的日志文件或重新打開現(xiàn)有文件,具體取決于日志記錄配置(請參見
第 19.8.1 節(jié))。
使用靜態(tài)日志文件名時,如果達到最大打開文件數(shù)限制或發(fā)生文件表溢出,則服務(wù)器可能無法重新打開日志文件。 在這種情況下,日志消息將發(fā)送到舊的日志文件,直到成功進行日志輪轉(zhuǎn)為止。 如果將logrotate配置為壓縮日志文件并將其刪除,則服務(wù)器可能會丟失此時間范圍內(nèi)記錄的消息。 為避免此問題,可以將日志收集器配置為動態(tài)分配日志文件名,并使用prerotate
腳本忽略打開的日志文件。
另外一種生產(chǎn)級的管理日志輸出的方法就是把它們發(fā)送給syslog,讓syslog處理文件輪轉(zhuǎn)。 要利用這個工具,我們需要設(shè)置postgresql.conf
里的log_destination
配置參數(shù)設(shè)置為syslog
(記錄
syslog
日志)。然后在你想強迫syslog守護進程開始寫入一個新日志文件的時候, 你就可以發(fā)送一個 SIGHUP
信號給它。 如果你想自動進行日志輪轉(zhuǎn),可以配置logrotate程序處理 來自syslog的日志文件。
不過,在很多系統(tǒng)上,syslog不是非常可靠,特別是在面對大量日志消息的情況下; 它可能在你最需要那些消息的時候截斷或者丟棄它們。另外,在Linux,syslog會把每個消息刷寫到磁盤上, 這將導致很差的性能(你可以在syslog配置文件里面的文件名開頭使用一個
“-
”來禁用這種行為)。
請注意上面描述的所有解決方案關(guān)注的是在可配置的間隔上開始一個新的日志文件, 但它們并沒有處理對舊的、不再需要的日志文件的刪除。你可能還需要設(shè)置一個批處理任務(wù)來定期地刪除舊日志文件。 另一種可能的方法是配置日志輪轉(zhuǎn)程序,讓它循環(huán)地覆蓋舊的日志文件。
pgBadger是一個外部項目,它可以進行日志文件的深度分析。 check_postgres可在重要消息出現(xiàn)在日志文件中時向Nagios提供警告,也可以探測很多其他的特別情況。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: