2019年10月6日 星期日

開源網路裝置服務監控系統:LibreNMS (四)



在前面介紹了多種監測方式與外掛程式的整合,但有一些狀況是在事件記錄中才能判讀出來,例如更早之前介紹過的 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 強大且彈性的警報機制,建立自動化的告警機制。







參考資料