利用 ubuntu 中 syslog 記錄外部設備日誌

要求:
利用 ubuntu 8.04 服務器版的 syslog 記錄 juniper isg1000 日誌,保留3個月。

1、允許 syslog 記錄外部日誌
修改 /etc/default/syslogd,把其中的 SYSLOGD="" 改爲 SYSLOGD="-r"

2、定義外部日誌類型
修改 juniper isg1000 日誌定義,讓其生成的日誌定義爲 local7,並向 ubuntu 服務器發送日誌。

3、定義日誌文件
考慮到日誌文件比較多,在 /var/log 下新建 firewall 目錄,用於保存日誌文件。目錄屬性 755。
修改 /etc/syslog.conf,在其中增加下面一行:
local7.* 
                       -/var/log/firewall/firewall.log

經過測試記錄不成問題,但發現有下面幾個嚴重問題。

4、重複記錄問題
syslog 不光在 firewall.log 中記錄,還在 /var/log 中的 syslog 和 messages 記錄,由於日誌很大,這下麻煩了。看看 syslog.conf 的 man,居然還有個 ! 功能,在 syslog.conf 文件中的 syslog 和 messages 定義前面加上了 !local7.*,感覺不錯,syslog 不再向 syslog 和 messages 文件中記錄設備日誌了。

5、文件超大問題
syslog 記錄的日誌文件最大不超過2.5G,如果超過了,將停止記錄。而 isg1000 4個小時左右的日誌就達到這個數量了。必須設置日誌輪轉。在 /etc/logrotate.d 中新建 firewall 日誌輪轉控制文件,屬性644,firewall 內如如下:

/var/log/firewall/firewall.log {
  start 1000
  rotate 512
  maxage 100
  size 1500M
  compress
  delaycompress
  missingok

  postrotate
    /usr/bin/killall -HUP syslogd
  endscript
}

以上內容簡單解釋:
由於日誌文件需要保存3個月,且平均每天生成5個日誌文件,設置最多保留512個,保留時間100天。
文件後綴編號從1000開始,比從1開始在排序上要好看。
文件超過1500M的時候輪轉。
爲了減少存儲空間佔用,輪轉後的日誌文件需要壓縮,但不是輪轉後馬上壓縮,而是輪轉下一個的時候,再壓縮,以防 syslog 繼續寫入當前文件時候丟失數據。

經過以上設置,感覺可以,誰知道使用幾天,發現還有問題。

6、再次解決文件超大問題
firewall.log 文件依然是2G多,沒有按照設定達到1500M的時候輪轉,究竟爲什麼?仔細看 man logrotate ,呵呵,原來如此,logrotate 每天運行一次,等它運行的時候,firewall.log 早就達到2G了。怎麼辦,讓它每小時運行一次試試看,把 /etc/cron.daily/logtotate 文件拷貝到 /etc/cron.hourly 中一份。效果不錯,看來問題解決了。

7、解決日誌文件不到1500M就輪轉、且日誌文件名沒有按定義規則生成問題
經過若干天運行,發現個小小問題。若干文件不到設置的1500M就輪轉了,而且文件名沒有按定義方式生成,而是原始的 firewall.log.0 方式,但是它們都有共性,都是早上 6:47 生成的。讓我想想,肯定是 cron 中 sysklogd 腳本搞的鬼。進入 /etc 中的各個 cron 子目錄中,把下面這句或者類似的
logs=$(syslogd-listfiles)
加上 -s firewall.log 參數,改爲
logs=$(syslogd-listfiles -s firewall.log)
讓日誌服務不再處理 firewall.log 日誌。

8、解決其它問題
暫時沒有。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章