因為之前網站被打,收集 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
編輯設定檔
# 關閉內建的 syslogd syslogd_enable="NO" syslog_ng_enable="YES"
# 反註解,將所有 log 傳到 loghost destination loghost { udp("loghost" port(514)); }; log { source(src); destination(loghost); };
別忘了在 /etc/hosts
裡面設定 loghost
的對應 IP。
# killall syslogd; service syslog-ng start
來馬上啟用。
Apache 的設定比較麻煩,access log 內建沒有支援 syslog,所以用 pipe 將其送到 logger 處理。
CustomLog "|logger -t httpd -p local1.info" combined
Server 設定
Server 的部分,我們希望 log 檔統一存在 /var/log/remote
這個資料夾下,照類型分開存。
CentOS (server) 安裝 syslog-ng: (要先啟用 EPEL 的套件庫,否則就要自己編譯)
# yum install syslog-ng
編輯設定檔
# 加入這個,讓統計資訊一小時才出現一次 options { stats_freq(3600); } # 反註解,以接受來自遠端到本機 port 514 的連線 source s_remote { udp(ip(0.0.0.0) port(514)); }; # 自定的存 log 目標 destination d_remote { file("/var/log/remote/$HOST-$FACILITY.log" owner(root) group(root) perm(0600) dir_perm(0700) cre ate_dirs(yes)); }; destination d_remote_http_access { file("/var/log/remote/httpd-access.log" owner(root) group(root) perm(0600) dir_perm(0700) cr eate_dirs(yes)); }; # 自定的 filter (過濾出 local1 的 log,我們用來存 httpd-access ) filter f_remote_http_access { facility(local1); }; filter f_remote_general { not (facility(local1)); }; # 最後,把它存進檔案 log { source(s_remote); filter(f_remote_http_access); destination(d_remote_access); }; log { source(s_remote); filter(f_remote_general); destination(d_remote); };
別忘了在 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