在前面介紹了多種監測方式與外掛程式的整合,但有一些狀況是在事件記錄中才能判讀出來,例如更早之前介紹過的 Graylog 就是一款非常優秀的事件管理與分析系統。
LibreNMS 自身也可以做為事件記錄伺服器,集中收容其它主機的 Log 回來存放與運用。
在 LibreNMS 功能裡,整合了 Syslog 伺服器使得它可以把自己也當做一台事件記錄收容與管理系統。不過在運用之前有一件事必須提醒,LibreNMS 畢竟不像是 Graylog 為了大量記錄分析而生,所以要丟到 LibreNMS 的 Log 建議請篩選過需要用來做警報監測與運用的結果,才可以減輕 LibreNMS 在這件任務上的負擔。
與 Service 功能相同,這個 Syslog 機制同樣預設沒有啟動,需要手動調整。
apt install syslog-ng
@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:
service syslog-ng restart
$config['enable_syslog'] = 1;
將 LibreNMS 與 Syslog 伺服器之間的設定完成以後,接下來即可到 Client 端裝置進行設定,將 Syslog 導向 LibreNMS 主機。
以下 Client 上安裝有 Rsyslog 為例,其它不同的套件或網路裝置上的 Syslog 轉送,請依據各自廠牌型號進行設定。
*.* @123.123.123.123:514
將上述 @ 後的 IP 更換成 LibreNMS 伺服器 IP 即可。
完成上述設定後,即可在 LibreNMS 該裝置的 Syslog 項目裡看見記錄收入。
裝置收取 Syslog
在事件清單上方的篩選列,可以依據需要做程式、優先度、日期做為篩選,或者在 Search 欄位輸入關鍵字搜尋。
由於 LibreNMS 將記錄收取進來後是直接存到 MariaDB/MySQL 資料庫裡,因此記錄量累積之後,會讓這張表越來越大,每次要查詢 Syslog 時都會需要等待,越多則越久。
為了解決這個問題,LibreNMS 提供了定期清理保存期限內的記錄,例如可以設定每次清理後只保存 180 天內的資料,而執行清理的動作是在每日自動執行的 daily.sh 實現,您只需要對設定檔加入一行設定即可。
$config['syslog_purge'] = 180;
若是不慎收取太多,或是忘記制訂排程清理的作業,需要儘快清理這些 Syslog 以讓系統回復快速運作能力,可以直接以指令把 Syslog 資料表中的記錄全數清除。
mysql
> use librenms;
> truncate table syslog;
前面提到多次 Graylog,如果我已經建置有 Graylog 是否有可能跟 LibreNMS 進行整合?
答案是肯定的,LibreNMS 可以與 Graylog 溝通做為顯示,請參考以下方式設定,注意所給予的使用者必需在 Graylog 上俱備 Admin 權限。
$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/