1. 程式人生 > >logrotate 日誌管理

logrotate 日誌管理

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 日誌管理