日誌和logger

   

通過logger命令記錄日誌

logger 是一個shell 命令接口,可以通過該接口使用Syslog的系統日誌模塊,還可以從命令行直接向系統日誌文件寫入一行信息。

日誌的級別

日誌的級別分爲七級,從緊急程度由高到底:

emerg 系統已經不可用,級別爲緊急  
alert 警報,需要立即處理和解決    
crit 既將發生,得需要預防。事件就要發生    
warnig 警告    
err 錯誤信息,普通的錯誤信息    
notice 提醒信息,很重要的信息    
info 通知信息,屬於一般信息    
debug 這是調試類信息

1。解決方法

編輯syslog.conf,

#vi /etc/syslog.conf

在第一行加入local3.none,使得設備local3的日誌不記錄在messages文件裏,

# Log anything (except mail) of level info or higher.

# Don't log private authentication messages!

*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages

將設備local3的所有級別的信息都記錄在userlog文件裏,

#user log

local3.* /var/log/userlog

重新加載syslog服務的配置文件,

[root@KEVEIN Slides]# service syslog reload

Reloading syslogd... [ OK ]

Reloading klogd... [ OK ]

2。測試

測試機器的環境:

OS:Red Hat Enterprise Linux 5 update 3

Network: 192.168.0.100/24  Gateway:192.168.0.1

[root@KEVEIN Slides]# ping 192.168.0.1 | logger -it logger_test -p local3.notice&

[2] 22484

命令logger -it logger_test -p local3.notice中的參數含義:

-i 在每行都記錄進程ID

-t logger_test 每行記錄都加上“logger_test”這個標籤

-p local3.notice 設置記錄的設備和級別

[root@KEVEIN Slides]# tail -f /var/log/userlog

Oct 6 12:48:43 kevein logger_test[22484]: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.

Oct 6 12:48:43 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=1 ttl=253 time=49.7 ms

Oct 6 12:48:44 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=2 ttl=253 time=68.4 ms

Oct 6 12:48:45 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=3 ttl=253 time=315 ms

Oct 6 12:48:46 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=4 ttl=253 time=279 ms

Oct 6 12:48:47 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=5 ttl=253 time=347 ms

Oct 6 12:48:49 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=6 ttl=253 time=701 ms

Oct 6 12:48:50 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=7 ttl=253 time=591 ms

Oct 6 12:48:51 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=8 ttl=253 time=592 ms

Oct 6 12:48:52 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=9 ttl=253 time=611 ms

Oct 6 12:48:53 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=10 ttl=253 time=931 ms

ping命令的輸出成功輸出到/var/log/userlog文件中,實驗成功。

日誌回捲

系統時時刻刻都在產生日誌,如果不及時清理,很快就會灌滿硬盤,但如果要手工清理,又很麻煩。這種情況下,logrotate 這個程序很好的完成這個任務。

logrotate 用來把舊的日誌文件刪除,並創建新的日誌文件,我們把它叫做“轉儲”。我們可以根據日誌文件的大小,也可以根據其天數來轉儲,這個過程一般通過一個叫做 crond的守護進程來執行,logrotate 還可以用於壓縮日誌文件,以及發送日誌到指定的E-mail 。

logrotate 的配置文件是 /etc/logrotate.conf。主要參數如下表:  
參數 功能    
compress 通過gzip 壓縮轉儲以後的日誌    
nocompress  不需要壓縮時,用這個參數    
copytruncate  用於還在打開中的日誌文件,把當前日誌備份並截斷    
nocopytruncate  備份日誌文件但是不截斷    
create mode owner group  轉儲文件,使用指定的文件模式創建新的日誌文件    
nocreate  不建立新的日誌文件    
delaycompress

             和 compress 一起使用時,轉儲的日誌文件到下一次轉儲時才壓縮  
nodelaycompress  覆蓋 delaycompress 選項,轉儲同時壓縮。    
errors address  專儲時的錯誤信息發送到指定的Email 地址    
ifempty  即使是空文件也轉儲,這個是 logrotate 的缺省選項。    
notifempty  如果是空文件的話,不轉儲    
mail address  把轉儲的日誌文件發送到指定的E-mail 地址    
nomail  轉儲時不發送日誌文件    
olddir directory

轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件系統  
noolddir  轉儲後的日誌文件和當前日誌文件放在同一個目錄下    
prerotate/endscript

在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行  
postrotate/endscript

在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行  
daily  指定轉儲週期爲每天    
weekly  指定轉儲週期爲每週    
monthly  指定轉儲週期爲每月    
rotate count

指定日誌文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份  
tabootext [+] list

          讓logrotate 不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-             orig, .rpmsave, v, 和 ~  
size size

當日志文件到達指定的大小時才轉儲,Size 可以指定bytes (缺省)以及KB (sizek)或者MB (sizem).

系統對 logrotate 的執行和操作

在/etc/cron.daily/路徑下,有一個logrotate 的shell腳本,所以cron程序會每天調用一次logrotate程序,然後logrotate程序回去檢查日誌文件是否符合回滾條件,並執行相應動作。

執行操作:/usr/sbin/logrotate /etc/cron.daily/logrotate.conf;

在/etc/logrotate.conf文件中,有如下選項:

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

這個選項說明在執行logrotate程序時,同時執行/etc/logrotated目錄下的所有腳本。

執行動作示例:每月清除/var/log/wtmp目錄中的相關內容:

/var/log/wtmp {

monthly

create 0664 root utmp

rotate 1

}

實驗:

1.

環境: Red Hat Enterprise Linux 5.3

實驗描述:

(1)用Cron執行logrotate命令,每分鐘檢查一次目標日誌文件是否滿足回捲限制。(2)配置/etc/logrotate.conf 或者建立一個自定義的/etc/logrotate.d /userlog

(3)編輯/etc/syslog.conf 使得記錄的日誌信息可以寫入到/var/log/userlog中。

[root@KEVEIN ~]# crontab -e

* * * * * /usr/sbin/logrotate /etc/logrotate.conf //寫入這條命令

[root@KEVEIN ~]# vi /etc/logrotate.conf

***省略***

/var/log/userlog {

daily

size 10k ////在這裏單位大小寫敏感應,應爲 k or M

create 0664 root root

rotate 3

prerotate

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true

endscript

}

在這裏一定要加prerotate這段腳本,這樣可以使syslog程序重新讀取配置文件,這樣做的作用是讓syslog程序釋放對userlog文件持有的文件描述符,否則即使日誌文件

回滾,syslog也不會向新產生的日誌文件寫數據。舉個例子,如果不加這段腳本,即使logrotate程序將userlog文件截斷並重命名爲userlog.1,但是syslog程序仍然會向原userlog文件即userlog.1中寫入數據。

[root@localhost ~]# vi /etc/syslog.conf

*****省略*****

*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages

#user log

local3.* /var/log/userlog

重新加載配置文件

[root@KEVEIN ~]# service syslog reload

Reloading syslogd... [ OK ]

Reloading klogd... [ OK ]

重啓crond服務

[root@KEVEIN ~]# service crond restart

Stopping crond: [ OK ]

Starting crond: [ OK ]

測試:

通過logger命令向userlog中寫入數據,測試logrotate的功能

[root@KEVEIN ~]# ping 192.168.1.1 | logger -it logger_test -p local3.notice&

[1] 5144

[root@KEVEIN ~]# cd /var/log/

[root@KEVEIN log]# ll -h userlog*

-rw-r--r-- 1 root root 1.6K Oct 11 19:59 userlog

[root@KEVEIN log]# ll -h userlog*

-rw-r--r-- 1 root root 6.1K Oct 11 20:00 userlog

//雖然執行過logrotate,但是沒有達到限制值

[root@KEVEIN log]# ll -h userlog*

-rw-rw-r-- 1 root root 0 Oct 11 20:08 userlog

-rw-rw-r-- 1 root root 15K Oct 11 20:08 userlog.1

-rw-r--r-- 1 root root 18K Oct 11 20:05 userlog.2

需要注意的是,當達到限制條件時,logrotate程序會將目標日誌文件userlog截斷,並命名爲userlog.1,將原userlog.1改名爲userlog.2,以此類推,syslog程序始終向userlog文件中寫數據。

   

出處:http://qubaoquan.blog.51cto.com/1246748/293050

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章