logrotate 日志管理


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預處理,可以在執行之前或者之后調用命令或者自己的腳本。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM