搜尋此網誌

2012年3月29日 星期四

[工具介紹] 利用 rsyslog + mysql + loganalyzer 做好日誌管理 (下)

上一篇我談到有關日誌管理與 syslog 的一些特性,在這篇文章當中,我要介紹如何利用 rsyslog + mysql + loganalyzer 做出一個簡單的日誌管理系統。
在許多的 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) 遞送過來的訊息

  1. 在 ftp 主機 (192.168.1.2) 進行下列動作:
    1. 修改 syslog 的設定擋 (/etc/syslog.conf),將 ftp 相關的訊息地送到 logserver 主機 (192.168.1.1) 
      # 
      # pure-ftpd 預設使用 facility ftp 
      # 
      ftp.*                                             @192.168.1.1
    2. 重新啟動 syslog 的服務,指令為
      service syslog restart
  2. 在 logserver 主機 (192.168.1.1) 進行下列動作:

    1. 修改 rsyslog 的設定檔 (/etc/rsyslog.conf),加入下列兩行 (或是取消註解)
      $ModLoad imudp.so 
      $UDPServerRun 51
    2. 在 rsyslog 的設定檔加入下列兩行規則
      :fromhost-ip, isequal, "192.168.1.2" -/var/log/pure-ftpd.log 
      & ~ 
      如果我們想要有關 ftp 的訊息只出現在 /var/log/pure-ftpd.log 這個日誌檔之中,需要將這兩行規則放在所有規則 (Rules) 的最前方,此外第二行 &~ 更是不可忽略。如果規則的位置擺放錯誤或是忘了加上 &~ 這行規則,相關的訊息將會同時記錄到其他的地方 (如 /var/log/message)。
    3. 重新啟動 rsyslog 的服務,指令為
      service rsyslog restart 
    4. 設定防火牆,讓日誌訊息 (UDP 514) 可以正常地遞送。
    5. 測試連結 ftp 主機,並查看 /var/log/pure-ftpd.log 是否出現相關訊息。
至此,我們已經完成初步的設定,讓 ftp 主機 (192.168.1.2) 可以正確無誤地遞送 syslog 訊息到 logserver 主機 (192.168.1.1)。

第二部分:設定 rsyslog 使用資料庫作為儲存的媒介

以下動作皆在 logserver 主機 (192.168.1.1) 進行。

  1. 安裝  rsyslog-mysql 套件,裡面包含 mysql 所需的 schema。指令為
    yum install rsyslog-mysql 
  2. 在 mysql 建立 syslog 專屬的帳號 (強烈建議不要與其他應用程式共用帳號,也不要使用預設的 root 帳號)
    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; 
    其中 password 請自行修改成你想要設定的密碼。
  3. 修改 schema 檔案,將下列兩行註解掉或是直接移除。我的檔案是在 /usr/share/doc/rsyslog-mysql-4.6.2/createDB.sql,請依據你的環境加以調整。
    CREATE DATABASE Syslog; 
    USE Syslog; 
  4. 根據 schema 檔案建立 mysql 資料表,指令為
    mysql –usyslog –p –h127.0.0.1 syslogdb </usr/share/doc/rsyslog-mysql-4.6.2/createDB.sql 
    Enter password: 輸入你設定的密碼 
  5. 修改 rsyslog 的設定檔,加上下列設定以啟用 mysql 的支援。
    $ModLoad ommysql 
  6. 修改 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 同樣請改成你所設定的密碼。
  7. 重新啟動 rsyslog 服務,指令為
    service rsyslog restart 
  8. 測試連結 ftp 主機 (192.168.1.2) ,並查看資料表 syslogdb.SystemEvents 是否出現相關訊息。
至此,我們已經成功地將有關 ftp 的日誌記錄到 mysql 資料庫當中。現在就剩下最後一個步驟了,Go!

第三部分:設定 loganalyzer

loganalyzer 是一個以 php 開發的 web 應用程式,可以用來查看與分析 syslog 的資料。

  1. 在 logserver 主機 (192.168.1.1) 進行下列動作

    1. 這裡下載 loganalyzer 的壓縮檔,我下載的是 v3.5.1 (v3-beta)。指令為
      wget http://download.adiscon.com/loganalyzer/loganalyzer-3.5.1.tar.gz
      解開壓縮檔,指令為 
    2. tar xvfz loganalyzer-3.5.1.tar.gz 
    3. 將程式目錄搬移到 Apache 的目錄下,指令為
      mv loganalyzer-3.5.1/src /var/www/html/loganalyzer-3.5.1 
    4. 建立連結,指令為
      ln –s /var/www/html/loganalyzer-3.5.1 /var/www/html/loganalyzer 
    5. 將檔案的擁有者改為 Apache 的帳號,指令為
      chown apache.apache –R /var/www/html/loganalyzer-3.5.1 

  2. 找任何一台擁有瀏覽器的電腦,連結 http://192.168.1.1/loganalyzer 並進行設定。

    1. 點選 “here” 開始安裝。
      001
    2. 按下“Next”。
    3. 檢查檔案的權限設定,正確無誤後同樣按下”Next”。002
    4. 將 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”。003
    5. 資料庫設定檢查無誤後,按下”Next”後開始建立資料表。004
    6. 建立資料表完畢,按下”Next”開始新增管理者帳號。005
    7. 輸入管理者的名稱與密碼,請務必牢記。輸入完畢後按下”Next”。006
    8. 帳號建立完畢,開始設定日誌資訊的來源與格式。除了從資料庫中讀取資料,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”。007
    9. 按下”Finish”結束設定。008
    10. 輸入之前建立的管理者帳號與密碼,輸入完畢後按下”Anmelden”登入 loganalyzer。009
    11. 此時可以看到我們之前測試時所記錄的相關訊息。
      010
    12. 恭喜你,你已經建立了一個簡單卻完整的日誌管理系統。

不管對IT或是IS而言,日誌管理都是一個很重要的課題。秉持著有備無患的態度,才不會在日後發生”日誌用時方恨少”的憾事。

About