建置 syslog-ng server 統一收集 log

因為之前網站被打,收集 log 的時候痛苦萬分,因此希望架設一個中心的 log server 統一收集 log,如此一來寫一些分析的 script、跑一些服務可以更方便。

雖然 FreeBSD 內建的 syslogd 也有 server 的功能,但其過濾的能力不足,從遠端送過來的 log 會全部混在一起,無法照服務(例:apache)分開,而網路上大部分的教學多是採用 syslog-ng,因此決定來實驗 syslog-ng。

syslog 的標準 RFC 5424 定義了可以用的 syslog facility level,其中我們取 local1 來作為 httpd-access 的記錄檔使用。

以下的範例我要設定來自 client 主機的記錄檔,把 httpd-access 統一存在一個檔案,剩下的照 "$HOST-$FACILITY" 的規則存在 server 上。

Client 設定

FreeBSD (client) 安裝 syslog-ng:

# cd /usr/ports/sysutils/syslog-ng; make install clean

編輯設定檔

別忘了在 /etc/hosts 裡面設定 loghost 的對應 IP。

# killall syslogd; service syslog-ng start 來馬上啟用。

Apache 的設定比較麻煩,access log 內建沒有支援 syslog,所以用 pipe 將其送到 logger 處理。

Server 設定

Server 的部分,我們希望 log 檔統一存在 /var/log/remote 這個資料夾下,照類型分開存。

CentOS (server) 安裝 syslog-ng: (要先啟用 EPEL 的套件庫,否則就要自己編譯)

# yum install syslog-ng

編輯設定檔

別忘了在 server 設定防火牆,UDP port 514,否則大家都可以幫你塞 log XD

參考資料
http://note.tc.edu.tw/161.html
http://www.suse.url.tw/sles10/lesson9.htm
http://blog.papertrailapp.com/send-apache-access-logs-to-remote-syslog-in-1-line/
http://snippets.aktagon.com/snippets/247-logging-nginx-to-remote-loghost-with-syslog-ng-
http://syshero.org/post/68174083489/nginx-syslog-ing-without-breaking-the-bank-or-patching
http://blog.yam.com/lorlterry2/article/23773192
http://note.tc.edu.tw/230.html