建置 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

編輯設定檔

# 關閉內建的 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

建置 syslog-ng server 統一收集 log

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料