在許多的 Linux 發行版本當中,預設的日誌記錄套件也叫做 syslog。 而這次我要介紹的 rsyslog 基本上就是強化版的 syslog 套件,支援自定的紀錄格式以及可以使用資料庫 (MySQL 與 PostgreSQL) 當做儲存的媒介。除此之外,rsyslog 也支援更為複雜的過濾條件,可以針對不同的日誌內容做出不同的行為。這次我使用的環境是 CentOS 6,已經改用 rsyslog 當做預設的日誌記錄套件,因此不需要另行安裝。對於使用其他發行版本的讀者,就請先自行安裝 rsyslog 這個套件了。
我將整個流程分成三個部分,第一個部分是設定 rsyslog 接受其他主機遞送過來的訊息,第二個部分是將這些訊息記錄到資料庫當中,最後則是安裝 loganalzyer 這個套件當做日誌的管理介面。環境的架構如圖中所示,設定完成後 ftp 主機 (192.168.1.2) 會將有關 ftp 的日誌透過 syslog 遞送到 logserver 這台主機 (192.168.1.1),並透過安裝於其上的 loganalyzer 加以查詢。
第一部分:使用 rsyslog 接受 ftp 主機 (192.168.1.2) 遞送過來的訊息
- 在 ftp 主機 (192.168.1.2) 進行下列動作:
- 修改 syslog 的設定擋 (/etc/syslog.conf),將 ftp 相關的訊息地送到 logserver 主機 (192.168.1.1)
# # pure-ftpd 預設使用 facility ftp # ftp.* @192.168.1.1
- 重新啟動 syslog 的服務,指令為
service syslog restart
- 修改 syslog 的設定擋 (/etc/syslog.conf),將 ftp 相關的訊息地送到 logserver 主機 (192.168.1.1)
- 在 logserver 主機 (192.168.1.1) 進行下列動作:
- 修改 rsyslog 的設定檔 (/etc/rsyslog.conf),加入下列兩行 (或是取消註解)
$ModLoad imudp.so $UDPServerRun 51
- 在 rsyslog 的設定檔加入下列兩行規則
如果我們想要有關 ftp 的訊息只出現在 /var/log/pure-ftpd.log 這個日誌檔之中,需要將這兩行規則放在所有規則 (Rules) 的最前方,此外第二行 &~ 更是不可忽略。如果規則的位置擺放錯誤或是忘了加上 &~ 這行規則,相關的訊息將會同時記錄到其他的地方 (如 /var/log/message)。:fromhost-ip, isequal, "192.168.1.2" -/var/log/pure-ftpd.log & ~
- 重新啟動 rsyslog 的服務,指令為
service rsyslog restart
- 設定防火牆,讓日誌訊息 (UDP 514) 可以正常地遞送。
- 測試連結 ftp 主機,並查看 /var/log/pure-ftpd.log 是否出現相關訊息。
- 修改 rsyslog 的設定檔 (/etc/rsyslog.conf),加入下列兩行 (或是取消註解)
第二部分:設定 rsyslog 使用資料庫作為儲存的媒介
以下動作皆在 logserver 主機 (192.168.1.1) 進行。- 安裝 rsyslog-mysql 套件,裡面包含 mysql 所需的 schema。指令為
yum install rsyslog-mysql
- 在 mysql 建立 syslog 專屬的帳號 (強烈建議不要與其他應用程式共用帳號,也不要使用預設的 root 帳號)
其中 password 請自行修改成你想要設定的密碼。mysql –uroot –p –h127.0.0.1 Enter password: 輸入root的密碼 mysql> create database syslogdb; mysql> grant all on syslogdb.* to ‘syslog’@’127.0.0.1’ identified by ‘password’; mysql > exit;
- 修改 schema 檔案,將下列兩行註解掉或是直接移除。我的檔案是在 /usr/share/doc/rsyslog-mysql-4.6.2/createDB.sql,請依據你的環境加以調整。
CREATE DATABASE Syslog; USE Syslog;
- 根據 schema 檔案建立 mysql 資料表,指令為
mysql –usyslog –p –h127.0.0.1 syslogdb </usr/share/doc/rsyslog-mysql-4.6.2/createDB.sql Enter password: 輸入你設定的密碼
- 修改 rsyslog 的設定檔,加上下列設定以啟用 mysql 的支援。
$ModLoad ommysql
- 修改 rsyslog 的設定檔,將我們在第一部分所設定的規則由
改為:fromhost-ip, isequal, "192.168.1.2" -/var/log/pure-ftpd.log & ~
:fromhost-ip, isequal, "192.168.1.2" :ommysql:127.0.0.1, syslogdb, syslog, password
password 同樣請改成你所設定的密碼。& ~
- 重新啟動 rsyslog 服務,指令為
service rsyslog restart
- 測試連結 ftp 主機 (192.168.1.2) ,並查看資料表 syslogdb.SystemEvents 是否出現相關訊息。
第三部分:設定 loganalyzer
loganalyzer 是一個以 php 開發的 web 應用程式,可以用來查看與分析 syslog 的資料。- 在 logserver 主機 (192.168.1.1) 進行下列動作
- 在這裡下載 loganalyzer 的壓縮檔,我下載的是 v3.5.1 (v3-beta)。指令為
wget http://download.adiscon.com/loganalyzer/loganalyzer-3.5.1.tar.gz
解開壓縮檔,指令為 -
tar xvfz loganalyzer-3.5.1.tar.gz
- 將程式目錄搬移到 Apache 的目錄下,指令為
mv loganalyzer-3.5.1/src /var/www/html/loganalyzer-3.5.1
- 建立連結,指令為
ln –s /var/www/html/loganalyzer-3.5.1 /var/www/html/loganalyzer
- 將檔案的擁有者改為 Apache 的帳號,指令為
chown apache.apache –R /var/www/html/loganalyzer-3.5.1
- 在這裡下載 loganalyzer 的壓縮檔,我下載的是 v3.5.1 (v3-beta)。指令為
- 找任何一台擁有瀏覽器的電腦,連結 http://192.168.1.1/loganalyzer 並進行設定。
- 點選 “here” 開始安裝。
- 按下“Next”。
- 檢查檔案的權限設定,正確無誤後同樣按下”Next”。
- 將 loganalyzer 使用者的帳號與密碼存放在資料庫中以供驗證。除了資料庫之外,也可以選擇使用 ldap 的驗證方式。
Database Host => 127.0.0.1 Database Port => 3306 Database Name => syslogdb Table prefix => logcon_ Database User => syslog Database Password => 輸入你設定的密碼 Require user to be logged in => Yes Authentication method => Internal authentication
輸入完畢後按下”Next”。 - 資料庫設定檢查無誤後,按下”Next”後開始建立資料表。
- 建立資料表完畢,按下”Next”開始新增管理者帳號。
- 輸入管理者的名稱與密碼,請務必牢記。輸入完畢後按下”Next”。
- 帳號建立完畢,開始設定日誌資訊的來源與格式。除了從資料庫中讀取資料,loganalyzer 也可以直接存取檔案形式的日誌。
Name of the Source => Pure-ftpd Source Type => MYSQL Native Select View => EventLog Fields Table type => MonitorWave Database Host => 127.0.0.1 Database Name => syslogdb Database Tablename =>SystemEvents Database User => syslog Database Password => 輸入你設定的密碼 Enable Row Counting => Yes
設定完畢後按下”Next”。 - 按下”Finish”結束設定。
- 輸入之前建立的管理者帳號與密碼,輸入完畢後按下”Anmelden”登入 loganalyzer。
- 此時可以看到我們之前測試時所記錄的相關訊息。
- 恭喜你,你已經建立了一個簡單卻完整的日誌管理系統。
- 點選 “here” 開始安裝。
不管對IT或是IS而言,日誌管理都是一個很重要的課題。秉持著有備無患的態度,才不會在日後發生”日誌用時方恨少”的憾事。