rsyslog syslog MySQL 日誌管理 Log 日誌

自建登入事件回報系統 即時監看Log免寫程式碼

2015-01-20
這裡將把Log資料儲存至遠端資料庫上並利用MySQL中Trigger的機制,在無須撰寫任何程式碼的前提下,完成一項可直接從資料庫層面自動回報Log紀錄中異常情況的功能。
rsyslog伺服器介紹

rsyslog早從2004年即開始進行開發,目的在於開發一個更強大的syslog伺服器來取代掉傳統的syslog伺服器,時至今日,大部分的Linux系統均已內建rsyslog來取代傳統的syslog伺服器。rsyslog伺服器是一個模組化的架構,它區分為三個模組(Module),如圖2所示。


▲圖2 rsyslog伺服器的三大模組。

其中,INPUT模組是指定資料來源,例如可指定syslog的資料來源為檔案或從Socket而來,而PARSE(解析)模組提供針對所接收到的syslog資訊再設定過濾條件以取得更精確的資訊,最後的OUTPUT模組則是指定要將最後的syslog資訊儲存到那裡(如資料庫或檔案或其他)。

在本文中將不管PARSE模組,而僅將所收到的主機紀錄(Log)傳遞至資料庫中,常用的模組說明如表4所示。

表4 常用模組功能介紹

在說明rsyslog的基本組態後,接下來說明如何編譯rsyslog。由於預設的rsyslog伺服器並未安裝支援MySQL資料庫的選項,所以這裡要重新以原始碼編譯。

在下載原始碼並解壓縮後,執行如下的指令(如下#為註解):


安裝成功後,在「<原始碼目錄>/plugins/ommysql」下的createDB.sql檔案內有記錄需建立的資料庫表格名稱。利用檔案內容來建立相關的資料庫表格。建立完成後,接著說明rsyslog伺服器組態檔(/etc/rsyslog.conf)的設定說明,如表5所示。

表5 rsyslog伺服器組態檔設定說明

接下來,設定rsyslog.conf來為rsyslog伺服器加上MySQL功能,基本上,只要在rsyslog所提供的預設組態檔內加入下列設定即可,如圖3所示:


▲圖3 在預設組態檔內加入新設定。

本例是將所有產生的Log紀錄置入本機內MySQL資料庫上名稱為syslog的資料庫,在設定完成後,利用「/usr/local/rsyslog/sbin/rsyslogd -f /etc/rsyslog.conf」來啟動rsyslog伺服器,如果一切正常,此時syslog的紀錄資訊應該會即時地匯入資料庫中。

Trigger簡介

觸發(Trigger)是MySQL提供的一種事件驅動的機制,它可在資料庫事件(例如新增或修改等動作)執行某些動作(最常見的是檢查資料庫資訊的正確性)。

在實務上,經常會有資料庫檢查的要求(如本文所要求的,當有登入事件發生時,就發出電子郵件通知管理者)。為解決此類問題,一般都會使用自行撰寫的程式,以輪詢(Pooling)的方式定時地對資料庫做檢查的動作,但如此的做法常會造成一些時間的落差(依輪詢所設定的檢查密度而定,如5分鐘檢查一次)。

另一種做法是可考慮在資料庫層面上解決,一旦資料庫發生相關的異動,就利用MySQL觸發機制來觸發,執行相關的指令或程式,本文就是採用此種解決方案。

利用觸發的方式,當資料庫接收到主機傳來的Log資訊時即觸發外部程式來執行相關動作。在本文中,希望達到的功能是,當資料庫接收到有登入事件時,就以電子郵件(E-mail)的方式通知管理者。接著,就來說明MySQL的觸發機制。

在MySQL 5.0.2版本之後,就支援觸發器的功能。觸發器是一種註冊在資料庫表格上的程式。當新增(Insert)資料、修改(Update)資料或刪除(Delete)資料等資料庫事件發生時,就可依相對應的觸發條件來處理,例如在新增資料後或新增資料前發生時觸發相關程式。所以,通常被應用在當資料新增或修改時來驗證資料的正確性,或者做相關的資料計算,以下說明觸發器的用法。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!