CentOS下的日誌切割

在Linux下,日誌會不停的增加,爲了防止日誌文件過大,致使咱們沒法在日誌中快速找到想要的信息,咱們會定時對日誌文件進行切割。在這裏我將使用logrotate切割日誌。html

(1).logrotate的配置文件node

  logrotate配置文件主要在兩個地方:/etc/logrotate.conf以及/etc/logrotate.d/下的明細配置文件。python

  其中/etc/logrotate.conf文件是主配置文件,/etc/logrotate.d/下的明細配置文件都會被讀入/etc/logrotate.conf進行執行,因此請注意這裏還涉及到了公有變量和私有變量。shell

   logrotate的執行是由crond服務來調用的,其腳本是/etc/cron.daily/logrotate,天天自動執行。咱們能夠看一下腳本具體內容:vim

1
2
3
4
5
6
7
8
9
[root@xuexi ~]# 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
exit 0

  簡單的說明下,就是/usr/sbin/logrotate工具調用了/var/lib/logrotate/logrotate.status和/etc/logrotate.conf兩個文件。而後將執行的結果(就是那個$?,成功爲0,不成功爲非0)進行判斷,非0時執行/usr/bin/logger命令。最後退出。運維

   看完定時計劃任務,咱們再來看主配置文件/etc/logrotate.conf(也就是公有變量)。具體內容以下:ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@xuexi ~]# grep -vE  "^$|^#"  /etc/logrotate.conf
weekly   //每週一次rotate(翻譯是旋轉,其實就是切割)
rotate 4   //保留4份切割文件,多餘刪除,不計算新建日誌文件
create   //結束後建立一個新的空白日誌文件
dateext   //用日期做爲切切割文件的後綴
include /etc/logrotate.d   //將/etc/logrotate.d目錄下的文件都加載進來(全都執行)
/ var /log/wtmp {   //僅針對/var/log/wtmp文件
     monthly   //每個月執行一次
     create 0664 root utmp   //結束後建立新的空白日誌,權限0664,全部者root,所屬組utmp
     minsize 1M   //切割文件最少須要1M,不然不執行
     rotate 1   //保留1份,多餘刪除,不計算新建日誌文件
}
/ var /log/btmp {   //僅針對/var/log/btmp
     missingok   //丟失不報錯
     monthly   //每個月執行一次
     create 0600 root utmp   //結束後建立新的空白日誌,權限0600,全部者root,所屬組utmp
     rotate 1   //保留1份,多餘刪除,不計算新建日誌文件
}

  配置文件參數說明:ide

    missingok  日誌切割期間產生錯誤將被忽略(若是日誌丟失,不報錯繼續切割)工具

    daily、weekly、monthly、yearly  天天、每週、每個月、每一年執行post

    create MODE OWNER GROUP  切割後指定建立新的空白文件的屬性

    nocreate  不創建新的日誌文件

    rotate N  保留N份,多餘刪除,不計算新建日誌文件

    dateext  用當前日期做爲後綴命名格式(默認年月日)

    dateformat .%s  配合dateext使用,緊跟在下一行出現,定義切割後的文件名,只支持%Y,%m,%d,%s

    size/minsize  達到指定大小纔會切割,默認單位bytes,還能夠是KB和MB

    compress  切割結束後,歸檔並使用gzip格式壓縮

    nocompress  解除compress參數

    delaycompress  老是與compress參數一塊兒使用,指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次切割進行。

    nodelaycompress  解除delaycompress參數

    ifempty  即便日誌爲空,也執行切割

    notifempty  若是日誌爲空,切割不執行

    prerotate/endscript  在全部其餘指令以前執行prerotate和endscript之間的命令。

    postrotate/endscript  在全部其餘指令完成後,postrotate和endscript之間的命令將被執行。

    sharescripts  全部日誌切割後統一執行一次腳本,若是沒有配置該參數,則每一個日誌切割後都會執行一次腳本。

    errors ADDRESS  切割時的錯誤信息發送到指定的Emial地址

    mail ADDRESS  切割日誌發送到指定的Email地址

    nomail  切割日誌不發送郵件

    olddir DIRECTORY  切割後的日誌文件放入指定目錄,必須與當前日誌處在同一文件系統

    noolddir  切割後的日誌文件與當前文件放在同一目錄下

    copytruncate  用於還在打開中的日誌文件,把當前日誌備份並截斷;先拷貝後清空,可能丟失部分日誌

    nocopytruncate  備份日誌文件,但不截斷。

(2).查看上次切割日誌時間

  /var/lib/logrotate/logrotate.status中默認記錄logrotate上次切割日誌文件的時間

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@xuexi logrotate]# cat / var /lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/yum.log"  2019-1-2-11:30:2
"/var/log/cups/page_log"  2018-11-1-10:0:0
"/var/log/cups/error_log"  2018-11-1-10:0:0
"/var/log/boot.log"  2019-4-16-11:37:1
"/var/log/cups/access_log"  2019-4-15-10:18:1
"/var/log/chrony/*.log"  2018-11-1-10:0:0
"/var/log/wtmp"  2018-11-1-10:0:0
"/var/log/spooler"  2019-4-15-10:18:1
"/var/log/btmp"  2019-4-8-15:13:1
"/var/log/iscsiuio.log"  2018-11-1-10:0:0
"/var/log/maillog"  2019-4-15-10:18:1
"/var/log/libvirt/libvirtd.log"  2018-11-1-10:0:0
"/var/log/libvirt/qemu/*.log"  2018-11-1-10:0:0
"/var/log/wpa_supplicant.log"  2018-11-1-10:0:0
"/var/log/secure"  2019-4-15-10:18:1
"/var/log/numad.log"  2018-11-1-10:0:0
"/var/log/ppp/connect-errors"  2018-11-1-10:0:0
"/var/log/messages"  2019-4-15-10:18:1
"/var/account/pacct"  2018-11-1-10:0:0
"/var/log/cron"  2019-4-15-10:18:1

(3).自定義日誌切割

  首先將sshd服務產生的日誌自定義,做爲實驗目標

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@xuexi ~]# vim /etc/rsyslog.conf
//在文件末尾添加一行
local0.*  / var /log/sshd.log
[root@xuexi ~]# vim /etc/ssh/sshd_config
//將SyslogFacility AUTHPRIV改成
SyslogFacility local0
[root@xuexi ~]# touch / var /log/sshd.log
[root@xuexi ~]# ll / var /log/sshd.log
-rw-r--r--. 1 root root 0 4月 17 13:38 / var /log/sshd.log
[root@xuexi ~]# systemctl restart sshd
[root@xuexi ~]# systemctl restart rsyslog.service
[root@xuexi ~]# ll / var /log/sshd.log
-rw-r--r--. 1 root root 352 4月 17 13:38 / var /log/sshd.log

  以後建立切割明細配置文件,並強制執行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@xuexi ~]# vim /etc/logrotate.d/sshd
[root@xuexi ~]# cat /etc/logrotate.d/sshd
/ var /log/sshd.log{
     missingok
     weekly
     create 0600 root root
     dateext
     rotate 3
}
[root@xuexi ~]# systemctl restart rsyslog.service
[root@xuexi ~]# logrotate -vf /etc/logrotate.d/sshd
reading config file /etc/logrotate.d/sshd
Allocating hash table  for  state file, size 15360 B
 
Handling 1 logs
 
rotating pattern: / var /log/sshd.log forced  from  command line (3 rotations)
empty log files are rotated, old logs are removed
considering log / var /log/sshd.log
   log needs rotating
rotating log / var /log/sshd.log, log->rotateCount  is  3
dateext suffix  '-20190417'
glob pattern  '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
fscreate context  set  to unconfined_u:object_r:var_log_t:s0
renaming / var /log/sshd.log to / var /log/sshd.log-20190417
creating  new  / var /log/sshd.log mode = 0600 uid = 0 gid = 0
set  default  create context
[root@xuexi ~]# ll / var /log/sshd*
-rw-------. 1 root root   0 4月  17 13:47 / var /log/sshd.log
-rw-r--r--. 1 root root 352 4月  17 13:38 / var /log/sshd.log-20190417

  logrotate的-d選項是預演,-f是強制執行,-v是顯示詳細過程。

(4).擴展

  另外還可以使用shell和python進行日誌切割,這裏我找了一個大佬的文章提供參考:運維中的日誌切割操做梳理(Logrotate/python/shell腳本實現)

相關文章
相關標籤/搜索