apache 是否會在每次造訪時開啟和關閉每個日誌?

apache 是否會在每次造訪時開啟和關閉每個日誌?

問題是關於存取和錯誤經驗,特別是對於多個主機(安裝在多個伺服器上的 apache 實例)並將日誌集中保存在網路檔案系統上。

apache 每次寫入後都會關閉每個日誌檔案嗎?

如果是,在託管許多網站的繁忙伺服器上,每個網站都有自己的日誌,這似乎是潛在的效能瓶頸?

如果否,當多個伺服器寫入網路檔案系統上的單一日誌記錄位置時,解決方案是什麼?

答案1

apache 每次寫入後都會關閉每個日誌檔案嗎?

使用來源,它位於: https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/loggers/mod_log_config.c?view=markup

你可以從中讀到:

251     * log_writer is NULL before the log file is opened and is
252     * set to a opaque structure (usually a fd) after it is opened.

那種暗示它只開放一次。事實上,如果你看一下程式碼,它會在初始化時提前打開,然後永遠不會關閉,這是出於明顯的效能原因。

如果否,當多個伺服器寫入網路檔案系統上的單一日誌記錄位置時,解決方案是什麼?

絕對不要這樣做,原因有二。首先不要以這種方式遠端登入。本機日誌(並單獨傳送日誌文件,例如,您可以每小時輪換)或使用適當的守護程序,syslog預設情況下知道如何透過 UDP(或 TCP)傳送日誌內容,就像較新的解決方案一樣。不要安裝遠端磁碟並向其寫入日誌文件,這會降低效能並產生一大堆問題(特別是如果您指的是“NFS”中的遠端磁碟)。

即使在本地,每個應用程式也應該記錄到自己的日誌文件,不要讓多個應用程式記錄到同一個文件,這必然會創建各種競爭條件、覆蓋範圍等。分叉,但是如果您有 2 個 Apache 以不同的配置在同一主機上單獨運行,則它們應該分別記錄到自己的日誌檔案中。

或查看 Apache 功能來記錄到管道,但這也有缺點。

答案2

AFAIK 您無法讓多個 Apache Web 伺服器同時寫入同一個日誌檔案。

對於集群,您可以讓每個節點寫入自己的日誌文件,然後進行一些後期處理來合併它們,或者讓Apache 生成系統日誌事件,將這些事件發送到中央系統日誌伺服器,您可以在其中將它們合併到單一檔案中,或者您可以使用 ELK Stack、Graylog、Splunk 和/或其他日誌聚合解決方案將日誌事件從所有叢集節點傳送到單一大數據資料庫

相關內容