在前面介紹了多種監測方式與外掛程式的整合,但有一些狀況是在事件記錄中才能判讀出來,例如更早之前介紹過的 Graylog 就是一款非常優秀的事件管理與分析系統。
LibreNMS 自身也可以做為事件記錄伺服器,集中收容其它主機的 Log 回來存放與運用。
Syslog 記錄監視
在 LibreNMS 功能裡,整合了 Syslog 伺服器使得它可以把自己也當做一台事件記錄收容與管理系統。不過在運用之前有一件事必須提醒,LibreNMS 畢竟不像是 Graylog 為了大量記錄分析而生,所以要丟到 LibreNMS 的 Log 建議請篩選過需要用來做警報監測與運用的結果,才可以減輕 LibreNMS 在這件任務上的負擔。
與 Service 功能相同,這個 Syslog 機制同樣預設沒有啟動,需要手動調整。
安裝 Syslog 套件
apt install syslog-ng
修改 Syslog 設定 (/etc/syslog-ng/syslog-ng.conf)
@version:3.5 @include "scl.conf" # syslog-ng configuration file. # # This should behave pretty much like the original syslog on RedHat. But # it could be configured a lot smarter. # # See syslog-ng(8) and syslog-ng.conf(5) for more information. # # Note: it also sources additional configuration files (*.conf) # located in /etc/syslog-ng/conf.d/ options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no); owner("root"); group("adm"); perm(0640); stats_freq(0); bad_hostname("^gconfd$"); }; source s_sys { system(); internal(); }; source s_net { tcp(port(514) flags(syslog-protocol)); udp(port(514) flags(syslog-protocol)); }; ######################## # Destinations ######################## destination d_librenms { program("/opt/librenms/syslog.php" template ("$HOST||$FACILITY||$PRIORITY||$LEVEL||$TAG||$R_YEAR-$R_MONTH-$R_DAY $R_HOUR:$R_MIN:$R_SEC||$MSG||$PROGRAM\n") template-escape(yes)); }; filter f_kernel { facility(kern); }; filter f_default { level(info..emerg) and not (facility(mail) or facility(authpriv) or facility(cron)); }; filter f_auth { facility(authpriv); }; filter f_mail { facility(mail); }; filter f_emergency { level(emerg); }; filter f_news { facility(uucp) or (facility(news) and level(crit..emerg)); }; filter f_boot { facility(local7); }; filter f_cron { facility(cron); }; ######################## # Log paths ######################## log { source(s_net); source(s_sys); destination(d_librenms); }; # Source additional configuration files (.conf extension only) @include "/etc/syslog-ng/conf.d/*.conf" # vim:ft=syslog-ng:ai:si:ts=4:sw=4:et:
重啟 Syslog 服務
service syslog-ng restart
啟用 Syslog 機制 (/opt/librenms/config.php)
$config['enable_syslog'] = 1;
Client 設定
將 LibreNMS 與 Syslog 伺服器之間的設定完成以後,接下來即可到 Client 端裝置進行設定,將 Syslog 導向 LibreNMS 主機。
以下 Client 上安裝有 Rsyslog 為例,其它不同的套件或網路裝置上的 Syslog 轉送,請依據各自廠牌型號進行設定。
啟用 Syslog 轉送 (/etc/rsyslog.conf)
*.* @123.123.123.123:514
將上述 @ 後的 IP 更換成 LibreNMS 伺服器 IP 即可。
接收 Syslog 記錄
完成上述設定後,即可在 LibreNMS 該裝置的 Syslog 項目裡看見記錄收入。
裝置收取 Syslog
在事件清單上方的篩選列,可以依據需要做程式、優先度、日期做為篩選,或者在 Search 欄位輸入關鍵字搜尋。
Syslog 記錄清理
由於 LibreNMS 將記錄收取進來後是直接存到 MariaDB/MySQL 資料庫裡,因此記錄量累積之後,會讓這張表越來越大,每次要查詢 Syslog 時都會需要等待,越多則越久。
為了解決這個問題,LibreNMS 提供了定期清理保存期限內的記錄,例如可以設定每次清理後只保存 180 天內的資料,而執行清理的動作是在每日自動執行的 daily.sh 實現,您只需要對設定檔加入一行設定即可。
設定 Syslog 定時清理 (/opt/librenms/config.php)
$config['syslog_purge'] = 180;
若是不慎收取太多,或是忘記制訂排程清理的作業,需要儘快清理這些 Syslog 以讓系統回復快速運作能力,可以直接以指令把 Syslog 資料表中的記錄全數清除。
手動清理 Syslog
mysql > use librenms; > truncate table syslog;
Graylog 記錄整合
前面提到多次 Graylog,如果我已經建置有 Graylog 是否有可能跟 LibreNMS 進行整合?
答案是肯定的,LibreNMS 可以與 Graylog 溝通做為顯示,請參考以下方式設定,注意所給予的使用者必需在 Graylog 上俱備 Admin 權限。
啟用 Graylog 支援 (/opt/librenms/config.php)
$config['graylog']['server'] = 'http://123.123.123.123'; $config['graylog']['port'] = 9000; $config['graylog']['username'] = 'admin'; $config['graylog']['password'] = 'password'; $config['graylog']['version'] = '2.4'; $config['graylog']['timezone'] = 'Asia/Taipei';
整合查看 Graylog
設定完成後,就可以直接在 LibreNMS 撈取相對應裝置在 Graylog 上的記錄。不過要注意的是,LibreNMS 只是代為去撈出 Graylog 上的內容,而不是把他整合抓回來可以做其它分析之用,我個人認為這個是方便之用,但要真正完善且實用的程度是遠遠還不及的。
小結
藉由整合兩種 Log 伺服器機制,極大程度的擴充 LibreNMS 對於事件記錄的掌握能力,尤其是 Syslog 伺服器的部份,收取進來後它會自動對應至裝置,因此可以很容易的在點選該裝置時就能看見該裝置的 Syslog 記錄。
基於已經收進來的事件,可以在被控管的裝置發生問題要追查障礙發生前到底發生了什麼事,或者要往前追溯事件的起源原因與過程變化,對於安全性的來龍去脈將提供許多有用的分析資訊。若沒有這樣的中央保存機制,裝置故障就是什麼資訊都無法調閱,不僅服務停擺,連問題點也讓人一籌莫展。
接下來,我們將運用 LibreNMS 強大且彈性的警報機制,建立自動化的告警機制。
參考資料
- Syslog - LibreNMS Docs
https://docs.librenms.org/Extensions/Syslog/
- Graylog - LibreNMS Docs
https://docs.librenms.org/Extensions/Graylog/