https://zhuanlan.zhihu.com/p/92804167
rsyslog負責寫入日誌, logrotate負責備份和刪除舊日誌, 以及更新日誌文件
Linux的日誌記錄了用戶在系統上一切操作,看日誌去分析系統的狀態是運維人員必須掌握的基本功。
rsyslog日誌服務器的優勢:
1、日誌統一,集中式管理
2、日誌實時傳送到一個更加安全的遠端服務器上,真正記錄用戶行爲,使日誌的2次更改可能性大大降低,從而能夠對日誌進行真實回放,便於問題追蹤。
rsyslog的新功能:
rsyslog是一個加強版的syslog,具有各種各樣的新功能,典型的有:
1、直接將日誌寫入到數據庫。
2、日誌隊列(內存隊列和磁盤隊列)。
3、靈活的模板機制,可以得到多種輸出格式。
4、插件式結構,多種多樣的輸入、輸出模塊。
5、可以把日誌存放在MySQL ,PostgreSQL,Oracle等數據庫中
/etc/rsyslog.conf
重啓rsyslog
service rsyslog restart
service rsyslog status
日誌滾動-logrotate
覆蓋之前的日誌 保證隨着日誌的增長 磁盤空間不增長
2.1) logrotate日誌滾動的介紹
所有的日誌文件都會隨着時間的推移和訪問次數的增加而迅速增長,因此必須對日誌文件進行定期清理以免造成磁盤空間的不必要的浪費,同時也加快了管理員查看日誌所用的時間。因而logrotate就非常有存在的必要了,Redhat系統中已經默然安裝logrotate且利用logrotate設置了相關對rsyslog日誌迅速增長的設置。
logrotate的執行由crond服務實現。在/etc/cron.daily目錄中,有個文logrotate,它實際上是個shell script,用來啓動logrotate。
logrotate程序每天由cron在指定的時間(/etc/crontab)啓動。
logrotate的執行由crond服務實現。在/etc/cron.daily目錄中,有個文logrotate,它實際上是個shell script,用來啓動logrotate。
logrotate程序每天由cron在指定的時間(/etc/crontab)啓動。
daily: 日誌文件分割頻度。可選值爲 daily,monthly,weekly,yearly
rotate 7: 一次將存儲7個歸檔日誌。對於第8個歸檔,時間最久的歸檔將被刪除。
missingok: 在日誌輪循期間,任何錯誤將被忽略,例如“文件無法找到”之類的錯誤。
dateext 使用日期作爲命名格式
compress: 在輪循任務完成後,已輪循的歸檔將使用gzip進行壓縮。
nocompress: 如果你不希望對日誌文件進行壓縮,設置這個參數即可
delaycompress: 總是與compress選項一起用,delaycompress選項指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次輪循週期進行。這在你或任何軟件仍然需要讀取最新歸檔時很有用。
notifempty: 如果日誌文件爲空,輪循不會進行。
sharedscripts 表示postrotate腳本在壓縮了日誌之後只執行一次
create 644 www root: 以指定的權限創建全新的日誌文件,同時logrotate也會重命名原始日誌文件。
postrotate/endscript: 最通常的作用是讓應用重啓,以便切換到新的日誌文件, 在所有其它指令完成後,postrotate和endscript裏面指定的命令將被執行。在這種情況下,nginx 進程將立即再次讀取其配置並繼續運行。
舉例:
include /etc/logrotate.d #包含/etc/logrotate.d目錄下的所有配置文件
/var/log/wtmp { #對/var/log/wtmp這個日誌文件按照下面的設定日誌回滾
monthly #每月輪轉一次
create 0664 root utmp #設置wtmp這個日誌文件的權限,屬主,屬組
minsize 1M #日誌文件必須大於1M纔會去輪換(回滾)
rotate 1 #保存一個輪換日誌
}
/var/log/btmp {
missingok #如果文件丟失不報錯
monthly
create 0600 root utmp
rotate 1
}
[root@rhel6_1 ~]# cat /etc/logrotate.d/syslog
/var/log/cron #這些文件是rsyslog.conf文件中全局配置定義中指定的Target的路徑
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate # 輪換之後重啓rsyslog服務
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
選項 | 用途 |
---|---|
nocompress,compress | 不壓縮,壓縮 |
delaycompress | 不壓縮前一個截斷的文件(需要與compress一起用) |
daily,weekly,monthly | 每天/周/月輪轉一次 |
copytruncate | 清空原有文件,而不是創建一個新文件 |
create 0644 root utmp | 新建日誌文件,權限、屬主、組 |
ifempty | 即使用空文件也轉儲 |
notifempty | 日誌文件爲空不進行轉儲 |
olddir <dir> | 轉儲後的日誌存放目錄,必須和當前日誌文件在同一個文件系統 |
rotate 5 | 保留最近的5個日誌文件 |
minisize 1M | 必須大於1MB纔會轉轉 |
size 50M | 超過50MB後輪轉日誌 |
mail [email protected] | 輪換後的把日誌發給郵箱 |
missingok | 如果日誌文件不存在,不報錯 |
prerotate,endscript | 在logrotate之前執行的命令,如/usr/bin/charrt -a /var/log/logfile |
postrotate,endscript | 在logrotate之後執行的命令,如/usr/bin/charrt +a /var/log/logfile |
/bin/kill -HUP $(/bin/cat /var/run/rsyslogd.pid 2>/dev/null) &>/dev/null |
|
/usr/bin/killall -HUP httpd |
|
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid) |
|
sharedscripts | 共享腳本,表示切換時只執行一次腳本 |
dateext | 增加日期作爲後綴,不然會是一串無意義的數字 |
dateformat .%s | 切換後文件名,必須配合dateext使用 |
- /etc/logrotate.conf
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
# 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
{
missingok
#-如果日誌丟失, 不報錯
monthly
create 0600 root utmp
rotate 1
}
- logrotate.conf範例
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# sample logrotate configuration file
compress
# 全局設置, 壓縮
/var/log/messages
{
rotate 5
# 保留5份日誌
weekly
# 每週輪換一次
postrotate
# 輪換之後重啓syslogd服務
/usr/bin/killall
-HUP syslogd
# rhel6中爲:/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
# 可查看/etc/logrotate.d/下的配置文件
endscript
}
"/var/log/httpd/access.log"
/var/log/httpd/error
.log {
# 指定多個文件, 如果有特殊字符需要用單引號
rotate 5
mail [email protected]
size 100k
# 超過100k後切換日誌, 並把老的日誌發送郵件給[email protected]
sharedscripts
# 共享腳本.下面的postrotate腳本只運行一次.
postrotate
/usr/bin/killall
-HUP httpd
endscript
}
/var/log/news/
* {
# 少用通配符, 因會它會包括已經切換過的日誌, 要用的話最好在*號後加上擴展名, 如*.log
monthly
rotate 2
olddir
/var/log/news/old
missingok
postrotate
kill
-HUP
'cat /var/run/inn.pid'
endscript
nocompress
}
/var/log/ipwall/messages
.log {
#日誌路徑一定要和rsyslog定義的日誌文件路徑一致
rotate 65535
#滾動65535次
create 0777 syslog adm
#設置權限,方便windows連接samba服務器
compress
#採用壓縮
size 50M
#文件大小50M以上的分割日誌
dateext
dateformat .%s
#定義文件切割後的文件名,必須配合dateext使用
#posrotate/endscript這段腳本使rsyslog程序重新讀取配置文件,程序釋放對messages.log文件持有的文件描述符
postrotate
/bin/kill
-HUP $(
/bin/cat
/var/run/rsyslogd
.pid 2>
/dev/null
) &>
/dev/null
endscript
}
- 強制輪轉
1
2
3
4
5
6
logrotate -f
/etc/logrotate
.conf
# –強制輪轉
logrotate -vf
/etc/logrotate
.conf
# –再加一個-v參數查看輪轉的過程
logger -t
'aaaa'
'bbbbbb'
#–在日誌里加一個內容tag和內容
tail
/var/log/messages
# Jun 12 20:34:22 kadefor aaaa: bbbbbb