logrotate 日誌管理
阿新 • • 發佈:2018-05-24
tail net 第一部分 details ... 配置文件詳解 sed 日誌文件 sse
a.logrotate 簡介
logrotate是一個日誌管理程序,用來把舊的日誌文件刪除(備份),並創建新的日誌文件,這個過程稱為“轉儲”。
我們可以根據日誌的大小,或者根據其使用的天數來轉儲。
logrotate 的執行由crond服務實現。在/etc/cron.daily目錄中,有個文件logrotate,它實際上是個shell script,用來啟動logrotate。logrotate程序每天由cron在指定的時間(/etc/crontab)啟動。因此,使用ps是無法查看到logrotate的。如果它沒有起來,就要查看一下crond服務有沒有在運行。在執行logrotate時,需要指定其配置文件/etc/logrotate.conf。
每個存放在/etc/logrotate.d目錄裏的文件,都有上面格式的配置信息。在{}中定義的規則,如果與logrotate.conf中的沖突,以/etc/logrotatate.d/中的文件定義的為準。
b.參數
-?或--help 在線幫助。
-d或--debug 詳細顯示指令執行過程,便於排錯或了解程序執行的情況。
-f或--force 強行啟動記錄文件維護操作,縱使logrotate指令認為沒有需要亦然。
-s<狀態文件>或--state=<狀態文件> 使用指定的狀態文件。
-v或--version 顯示指令執行過程。
-usage 顯示指令基本用法。
c.配置文件
執行文件:/usr/sbin/logrotate 主配置文件:/etc/logrotate.conf 自定義配置文件:/etc/logrotate.d/*.conf /etc/logrotate.d/ - 通常一些第三方軟件包,會把自己私有的配置文件,也放到這個目錄下。如yum,zabbix-agent,syslog等。 修改配置文件後,並不需要重啟服務。 由於logrotate實際上只是一個可執行文件,不是以daemon運行。
d.日誌分割原理
系統會按照計劃的頻率運行logrotate,通常是每天。大多數的Linux發行版本上,計劃每天運行腳本位於/etc/cron.daily/logrotate 當logrotate 運行的時候,它會讀取自身配置文件來決定需要分割日誌文件的路徑,分割日誌文件的頻率及保留多少日誌存檔。
e.常用參數
compress 通過gzip 壓縮轉儲以後的日誌 nocompress 不必壓縮時,用這個參數 nocreate 不建立新的日誌文件 delaycompress 和 compress 一起使用時,轉儲的日誌文件到下一次轉儲時才壓縮 nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮。 ifempty 即使是空文件也轉儲,這個是 logrotate 的缺省選項。 notifempty 如果是空文件的話,不轉儲 missingok 如果日誌不存在則忽略該警告信息 prerotate/endscript 在轉儲以前需要執行的命令能放入這個對,這兩個關鍵字必須獨立成行 postrotate/endscript 在轉儲以後需要執行的命令能放入這個對,這兩個關鍵字必須獨立成行 rotate 命令指定分割日誌的數量,也就是保留多少個日誌,當新的分割日誌產生時,會刪除最老的 weekly daily monthly yearly 定義分割頻度 size 定義文件大小
f.logrotate主配置文件詳解
# see "man logrotate" for details # rotate log files weekly weekly #每周輪轉一次 # keep 4 weeks worth of backlogs rotate 4 #保留四個日誌文件 # create new (empty) log files after rotating old ones create #rotate後,創建一個新的空文件 # uncomment this if you want your log files compressed #compress #默認是不壓縮的 # RPM packages drop log rotation information into this directory include /etc/logrotate.d #這個目錄下面配置文件生效 # no packages own wtmp — we’ll rotate them here /var/log/wtmp { #定義/var/log/wtmp這個日誌文件; monthly #每月輪轉一次,取代了上面的全局設定的每周輪轉一次; minsize 1M #定義日誌必須要大於1M大小才會去輪轉; create 0664 root utmp #新的日誌文件的權限,屬主,屬主; rotate 1 #保留一個,取代了上面的全局設定的保留四個; } /var/log/btmp { #定義/var/log/btmp這個日誌文件; missingok #如果日誌丟失, 不報錯; monthly create 0600 root utmp rotate 1 } 記住,在 /etc/logrotate.d/ 目錄下的應用配置文件繼承所有的 /etc/logrotate.conf 默認參數
g.nginx日誌logrotate配置說明
##解釋nginx 的logrotate 配置 ##固定格式,支持通配符匹配 /var/log/nginx_*.log { daily ##每天轉儲一次 missingok ##如果日誌不存在則忽略該警告信息 dateext ##轉儲以後以日期作為後綴 ifempty ##即使是空文件也轉儲,這個是 logrotate 的缺省選項。 rotate 20 ##保留20份日誌文件;log.1...log.20 sharedscripts ##共享腳本,下面的postrotate <s> endscript中的腳本只執行一次即可; postrotate ## /netpas/nginx/sbin/nginx -c /netpas/nginx/conf/nginx.conf -p /netpas/nginx -s reopen > /dev/null 2>/dev/null || true /netpas/nginx/sbin/nginx -c /netpas/nginx/conf/nginx_udp.conf -p /netpas/nginx -s reopen > /dev/null 2>/dev/null || true endscript } postrotate <s> endscript #日誌輪換過後指定指定的腳本,endscript參數表示結束腳本; Logrotate每次分割文件後會運行 postrotate 後的命令。最通常的作用是讓應用重啟,以便切換到新的日誌文件。 第一部分是匹配的文件模式,可以是通配符,註意:如果對應的日誌不存在會報錯,中斷處理,可以自行用調試模式測試。(可以添加missingok緩解) { ... } 花括號裏面的就是具體的指令參數了,logrotate支持一些hook預處理,可以在執行之前或者之後調用命令或者自己的腳本。
logrotate 日誌管理