Logrotate 是一種實用程序,旨在簡化生成大量日誌文件的系統的管理。 它負責日誌文件的自動日誌文件輪換、壓縮、刪除和郵寄。 部署在服務器上的所有服務或應用程序都會在一個文件中為用戶在系統/應用程序/上執行的每個操作生成日誌。 一段時間後,管理此類日誌文件將成為一項繁瑣的任務。 這些日誌文件會越來越大,應用程序的性能會周期性地惡化。 從長遠來看,它會導致由於磁盤空間不足而導致系統無響應的潛在風險。
為了緩解此類問題並維護日誌文件,我們使用“logrotate”。 此工具旨在簡化對生成許多大型日誌文件的系統上的日誌文件的管理。
在本文中,我們將更多地討論 logrotate 實用程序以及如何配置 Nginx 日誌輪換。
安裝
在大多數發行版中,它是默認安裝和配置的。 為了安裝軟件包,請檢查是否安裝了軟件包,否則按照說明安裝軟件包。
# rpm -qa | grep logrotate
logrotate-3.8.6-12.el7.x86_64
在這裡,它似乎是默認安裝的。 如果此查詢沒有報告,那麼您可以使用以下命令將其安裝在 CentOS 7 服務器上:
#yum install logrotate -y
運行 logrotate
Logrotate 幫助系統管理員系統地輪換和歸檔系統產生的任何日誌文件,從而減少操作系統的磁盤空間需求。 通常,logrotate 作為每日 cron 作業運行。 它不會在一天內多次修改日誌。
# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
了解配置文件
默認情況下,安裝 logrotate 後,您可以在此處找到其主要配置文件:/etc/logrotate.conf
Logrotate 包含目錄 /etc/logrotate.d/
在其中配置不同的日誌(要輪換日誌的守護進程和服務)。 所有服務特定的配置文件都存儲在 /etc/logrotate.d/
.
主要配置文件 /etc/logrotate.conf
包含通用配置。 請看一下我的默認 logrotate 配置文件:
第 3 行 – weekly:
此配置選項可確保每週輪換主配置文件和 /etc/logrotate.d/ 目錄中定義的所有日誌文件。
第 6 行 – rotate 4:
它確保 logrotate 保留所有日誌文件的 4 周備份。
第 9 行 – create:
此選項指示 logrotate 在每次輪換後創建新的空日誌文件
第 12 行 – dateext:
當 logrotate 處理每個特定的日誌文件時,這會以日期的形式向所有輪換的日誌文件附加一個擴展名
第 15 行 – compress:
這會壓縮輪換的日誌文件。
第 18 行 – include /etc/logrotate.d:
這包括目錄 /etc/logrotate.d 中的所有其他配置。
第 21 – 33 行包含特定的服務日誌輪換配置
配置 Nginx 日誌輪換
對於大多數服務,默認服務日誌輪換配置文件將在 /etc/logrotate.d/
文件夾。 即使系統上未安裝 logrotate,所有軟件包通常都包含日誌輪換配置。 但是,如果我們從源代碼編譯 Nginx,則需要在內部手動定義我們自己的日誌輪換設置 /etc/logrotate.d/
Nginx 配置文件中提到的日誌文件位置的文件夾。
請參閱安裝時在我的服務器上創建的默認 Nginx 日誌輪換配置。
# cat -n /etc/logrotate.d/nginx
1 /var/log/nginx/*log {
2 create 0644 nginx nginx
3 daily
4 rotate 10
5 missingok
6 notifempty
7 compress
8 sharedscripts
9 postrotate
10 /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
11 endscript
12 }
13
第 1 行 – /var/log/nginx/*log:
這定義了位於 /var/log/nginx/ 的所有 Nginx 日誌文件。 提示:如果您希望在單個配置文件中包含多個日誌文件,請使用通配符,就像這樣“/var/log/nginx/*log”。 對於單個日誌文件,您可以將該日誌文件稱為“/var/log/nginx/error.log”。
2號線 – create:
這將創建一個新的日誌文件並使用所有權 nginx 設置權限 644。
第 3 行 – daily:
確保每天輪換
第 4 行 – rotate 10:
Save 10 份日誌文件。
第 5 行 – missingok:
如果缺少日誌文件,則不輸出錯誤。
第 6 行 – notifempty:
如果日誌文件為空,則不要輪換它。
第 7 行 – compress:
默認情況下使用 gzip(1) 壓縮日誌文件的舊副本
8號線 – sharedscripts:
這使得腳本運行一次,不管有多少日誌匹配通配符模式,並且整個模式被傳遞給它們。
第 9 至 11 行 – postrotate/endscript:
postrotate 和 endscript 之間的行(兩者都必須單獨出現在行上)在日誌文件旋轉後執行。 這些指令可能只出現在日誌文件定義中。
這個 logrotate 實用程序有更多的配置選項。 您可以通過運行以下命令從其手冊頁獲取這些選項的完整列表:
#man logrotate
檢查日誌旋轉狀態
文件“/var/lib/logrotate.status”包含有關日誌旋轉狀態的所有信息。 因此,要驗證添加的每個配置文件的 logrotate 運行狀態並驗證每個配置文件的狀態,我們可以運行以下命令; 它將列出每個配置的運行時間
文件。
# cat /var/lib/logrotate.status
logrotate state -- version 2
"/var/log/nginx/error.log" 2017-8-14-7:45:47
"/var/log/yum.log" 2017-8-14-7:45:47
"/var/log/chrony/*.log" 2017-8-14-7:0:0
"/var/log/wtmp" 2017-8-14-7:45:47
"/var/log/spooler" 2017-8-14-7:0:0
"/var/log/btmp" 2017-8-14-7:45:47
"/var/log/maillog" 2017-8-14-7:45:47
"/var/log/wpa_supplicant.log" 2017-8-14-7:0:0
"/var/log/secure" 2017-8-14-7:45:47
"/var/log/nginx/access.log" 2017-8-14-7:45:47
"/var/log/ppp/connect-errors" 2017-8-14-7:0:0
"/var/log/messages" 2017-8-14-7:45:47
"/var/log/cron" 2017-8-14-7:45:47
這將為您提供最新的 logrotate 狀態。
我們可以通過以下命令手動或強制運行特定的 logrotate 文件。
logrotate -f /etc/logrotate.d/nginx
或者我們甚至可以使用以下命令以詳細模式輪換所有日誌:
logrotate -f -v /etc/logrotate.conf
Logrotate 可以幫助您有效地管理日誌文件並通過壓縮/刪除日誌文件來節省一些磁盤空間。 通過創建額外的副本或通過電子郵件將任何新輪換的日誌文件發送給您,它還可以幫助您存檔日誌文件以供將來參考。 我們甚至可以調整配置以每天、每週、每月或當它變得太大時處理每個日誌文件。 我建議使用 logrotate 實用程序來輕鬆管理日誌文件。