記錄檔設定 syslog , logrotate 介紹

copy from http://canred.blogspot.tw/2013/03/logrotate.html

在各種作系統中有,有效的紀錄是不可缺的,記錄可以讓我們知道事件發生的過程,以及系統處理的方式。對於記錄,我們必須針對性質與嚴重性加以分類,而紀錄在特定的檔案之中。

  • syslog.conf
    • /etc/syslog.conf 是 syslogd 這個常駐程式的主要設定檔,它可以記錄linux的系統資訊,並且分類紀錄到各個檔案之中。
    • 每一個規則包含2個欄位,第1個欄位是訊息的種類,第2個欄位是動作,也就是記錄的方式。2個欄位中間可用空白或是<tab>鍵分隔。以#開頭的一行會被忽略。訊息的種類當中,包含了2個資訊,1是訊息的種類,另1個是嚴重性,當者以 . 分隔;如下所示
      • mail.none
        • 訊息的種類包含了下列的關鍵字。auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,security(the same as auth),syslog,user,uucp,local0~local7
          • authpriv:登入系統的訊息,包含管理者首一般使用者的帳號;將消息記錄到只有相關用戶能讀取的文件內
          • cron:計時器的訊息
          • daemon:各種常駐服務程式
          • kern:系統核心
          • local7:開機系統啟動的訊息
          • lpr:列印指令的訊息
          • mail:電子郵件的訊息
          • news:新聞伺服器的訊息
          • user:使用者相關訊息
          • uucp:UNIX-toUNIX Copy Protocol之訊息
          • auth:與用戶登錄,驗証密碼有關的訊息
          • mark:定時發陝消息的時標程式
          • ftp:與ftp守護進程有關的消息
          • ntp:與網絡時間協議相關的消息
        • 嚴重性則包含:debug->info->notice->warning->warn->err->error->crit->alert->emerg->panic ; 
          • 在設置級別的時侯通常不要使用err以下的級別,否則可能大量的消息很快就充滿整個disk,並且還會引起系統性能下降。
          • 還有一個none的級別表程式中未給出選擇的偽級別
        • 如果使用*,則表示所有的種類,或是所有的嚴重性。如mail.*,*.err,*.*
        • 如果有多個重類期嚴重性相同,且使用相同的動作,可用逗號隔開。如
          • uucp,news.crit
        • 若多個種類其嚴重性不全相同,且使用相同的動作,可用分號隔開。如:
          • *.info;mail.none;authpriv.none;cron.none    /var/log/messages
        • news.=err                /var/log/news.err
          • 把關於新聞伺服器的訊息,只要優先權等於會誤的訊息記錄到/var/log/news.err中
        • cron.*  /var/log/cron
          • 所有來於cron的程序消息放入/var/log/cron的檔案中
        • *.info;mail.none;authprive.none;cron.none  /var/log/message
          • *.info表示所有的大於info的消息會記錄到/var/log/message中,其他的mail如上項目雷同。
        • mail.*     @192.168.1.10
          • 將消息發送到192.168.1.10的伺服器上
        • mail.*     @ServerName
        • authprive.*;authprive.!=info       /var/log/authprive.log
          • 將登入系統的所有訊息,統統記錄在此檔案,但是對包含優先權為info的。
    • 日誌消息的格式
      • time        hostname        process    version:informat
        • time:產生的時間
        • hostname:產生日誌的主機
        • process:產生日誌的應用程序
        • version:產生此日誌的應用程序或系統服務版本號
        • infomation:內容
    • 發出消息/記錄/日誌 logger 指令
        • logger [option] message
        • i:使用logger的pid作為消息的pid
        • p:使用指定選擇域
        • t:使用指定進程的名稱
      • sample
        • logger -i -p local7.err test.sh "Canred Test"
    • 在以上的動作是寫到記錄檔,但這個紀錄檔並不一定是真實的檔案,有可能是終端機,可能是別台主機etc。
      • 本機的檔案
        • /var/log/maillog
      • 終端機或是主機前的console
        • /dev/console , /dev/pts/0
      • 遠端的主機
        • @canredHome

再下來就要介紹一下logrotate了
日誌輪循logrotate,隨著時間越來越長syslogd將新篩選的日誌消息不斷地寫入指定的文件未尾。日誌文件會變得越來越長,占用的disk空間也越來越多。另一方面,如果系統管理員要查看娛一時刻的日誌消息,太大也不便查看,這時就要有一個日誌輪循的功能啦…

  • logrotate是一個循環、壓縮、以及郵寄系統記錄檔的系統程式。
    • 語法如下:logrotate [-dv] [-f] [-s] config_file +
    • 例如執行default的/etc/logrotate.conf,可以執行下行指令
      • logrotate /etc/logrotate.conf
  • logrotate是設計來簡化系統產生的龐大紀錄檔案,它允許自動的循環使用、壓縮、移動以及郵寄記錄檔,當紀錄檔太大時,可以每天、每週、每月的管理
  • 一般面言,logrotate可視為每天執行的例行性工作,其功能如下:
    • -d:開啟除錯模式。在除錯模式之下,紀錄檔將不會有任何的改變
    • -f:強制模制。告訴logrotate強迫循環,即使logrotate本身認為並不需要
    • -m:寄信。告訴logrotate用什麼指令去寄出紀錄檔
    • -s:告訴logrotate使用一個交換狀態的紀錄檔。當我們使用不同的帳號來設定多樣的紀錄檔,這是有用的。預設的狀態紀錄在/var/lib/logrotate/status。
    • –usage:使用量,列出使用者的狀態。
  • 範例1(以下是程式碼哦)
#紀綠檔在循環過後將被壓縮。

compress

#要撐握 /var/log/message 的記錄檔,紀錄再經過5週的循環後將被移除,也
#就是說備存5週,並且在循環後,系統會透過/sbin/killall -HUP syslogd的指令
#來重新啟動syslogd服務

/var/log/message {
    rotate 5
    weekly
    postrotate
    /sbin/killall -HUP syslogd
    endscript 
#設定2個紀錄檔案的規則;這2個檔案將進行循環當內容達到100k的時侯,並且
#在遍環5次時,會將檔案寄給管理者,並移除檔案
"/var/log/httpd/access.log" /var/log/httpd/error.log {
    rotate 5
    mail canred.chen@gmail.com
    size=100k
    sharedscripts
    postrotate
    /sbin/killall -HUP httpd
    endscript
#當中每個檔案都是以一個月為基底來做遍環。這被考慮成一個單獨的循環目錄,
#且若是錯誤發生超過1個檔案,亡錄檔將不會被壓縮
#在使用*字元時要特別小心,因為是循環所有檔案
/var/log/news/* {
    monthly
    rotate 2
    olddir /var/log/news/old
    missingok
    postrotate
    kill -HUP `cat /var/run/inn.pid`
    endscript
    nocompress
  • 範例2(底下將列出並說明RedHat9中的/etc/logrotate.conf),以下內容是一體看的哦
    • weekly
      • 每週循環一次日誌檔的相關紀紀錄
    • rotate 4
      • 最多保留4週
    • create
      • 清除舊的日誌檔時,會自動產生新的日誌檔
    • compress
      • 將紀錄檔壓縮
    • include /etc/logrotate.d
      • RPM的套件會將相關設定檔置於/etc/logrotate.d/之下
    • /var/log/wtmp{
    •     monthly
    •     carete 0644 root utmp
    •     rotate 1

—-編輯紀錄

  • 2013/4/24:
    • syslog.conf 訊息種類的設定方式還可以加上"=","!"的用法