2019年10月3日 星期四

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



對於 IT 管理者來說,每天要面對的就是海量網路裝置,這些裝置的使用情況與好壞,流量就是最重要的指標,在這麼多的來源數據,我們需要有良好的工具軟體以加速我們掌握最新的情況。

除此之外,各個伺服器所提供多樣的服務,亦需要有自動化的狀態監控系統,才能在發生障礙時即時通知管理者,及早發現及早治療,從而降低系統停止服務的時間。




方案介紹

LibreNMS 是一套開源的網路與服務監控系統,主要以 PHP、MariaDB、SNMP 技術為主進行裝置資料搜集,它所能夠提供的功能如下:
  • 全 Web 化操作介面
  • 監測網路裝置連線狀態
  • 提供裝置效能數據記錄
  • 記錄網路裝置流量
  • 檢查服務運作狀態
  • 多樣化的警報發送機制
  • 支援 Nagios Plugin (Service)
  • 支援多種身份驗證
  • 逐漸完善的繁體中文介面 (嘿嘿)



在裝置監測的功能上,LibreNMS 提供了五種機制,分別可以做到不同等級的深入探索。



裝置監測方式


最基本從 ICMP 做裝置是否連線中的檢測,接著以 SNMP 最較為深度的資料採集,進一步可以安裝 Agent 取得更詳細的作業系統發行版本資訊與處理程序等。

針對特定的應用,有提供 Application 功能來對應的效能數據擷取方式,而在不同服務的狀況監控則使用名為 Service 的機制去監視各個服務的運作狀態,而且可以相容 Nagios 的 Plugin 做更多的擴充。








安裝方式

官網文件庫有非常詳細的使用說明,也提供了預先建置好的虛擬機器檔案可以直接下載開機使用,不過本次仍然以 Ubuntu 18.04 做為範例,提供安裝程序:

安裝所須套件

apt install software-properties-common
add-apt-repository universe
apt update
apt install curl composer fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nginx-full nmap php7.2-cli php7.2-curl php7.2-fpm php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-snmp php7.2-xml php7.2-zip python-memcache python-mysqldb rrdtool snmp snmpd whois

安裝與設定 LibreNMS

useradd librenms -d /opt/librenms -M -r
usermod -a -G librenms www-data
cd /opt
git clone https://github.com/librenms/librenms.git
chown -R librenms:librenms /opt/librenms
chmod 770 /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/

安裝 PHP 相關套件

su - librenms
./scripts/composer_wrapper.php install --no-dev
exit

資料庫與帳號建立

systemctl restart mysql
mysql -uroot -p
CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;
exit

修改設定檔 (/etc/mysql/mariadb.conf.d/50-server.cnf)

# 找到 [mysqld] 區段加入下列
innodb_file_per_table=1
lower_case_table_names=0

# 改完退出編輯器重啟服務
systemctl restart mysql

#### 設定網頁伺服器 (/etc/php/7.2/fpm/php.ini,請依據的版本找到對應路徑,本文以 7.2 為例)
# 設定正確時區
date.timezone = Asia/Taipei

# 改完退出編輯器重啟服務
systemctl restart php7.2-fpm

設定 Nginx 站台 (/etc/nginx/conf.d/librenms.conf)

# 以下設定貼上後存檔
server {
 listen      80;
 server_name librenms.example.com;
 root        /opt/librenms/html;
 index       index.php;

 charset utf-8;
 gzip on;
 gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
 location / {
  try_files $uri $uri/ /index.php?$query_string;
 }
 location /api/v0 {
  try_files $uri $uri/ /api_v0.php?$query_string;
 }
 location ~ \.php {
  include fastcgi.conf;
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
 }
 location ~ /\.ht {
  deny all;
 }
}

# 改完退出編輯器重啟服務
rm /etc/nginx/sites-enabled/default
systemctl restart nginx

設定 SNMP 服務

cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro

chmod +x /usr/bin/distro
systemctl restart snmpd

設定排程作業

cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms

檔案權限調整

chown -R librenms:librenms /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/

安裝來到這裡以後,已經可以進入 LibreNMS 網站開始進行初始安裝設定,請以瀏覽器開啟 http://ip/install.php ,並依據畫面指示一步一步往下操作,即可完成。





主要功能

在 LibreNMS 最常用的模式,是將裝置以 SNMP 協定加入監控,安裝的方式相當容易,點選功能表的 [Devices] -> [Add Device],即可來到新增裝置的畫面。



加入裝置


最基本的欄位,於 Hostname 中填入 IP 或 FQDN,在 Community 填入 Community String,即可加入,過一會後 LibreNMS 就會自動去爬這個裝置裡有那些資料,慢慢的將資訊給補齊。

所有被加入的裝置都會在裝置清單裡,從功能表的 [Devices] -> [All Devices] 點選後,即可閱覽所有在掌握中的裝置對象。



裝置清單


點選裝置可以進入查看更詳細的資訊內容,下圖是我一台 Synology 的裝置細節,提供許多有用的效能參考資訊,例如 CPU 與網路流量的圖表可以讓我們一眼就看出整個趨勢是否在正常運作範圍,若 CPU 一直持續飆高,就該儘快了解是效能不足,還是中了惡意挖礦程式之類。



裝置細節


再往下捲,依據不同裝置的支援程度,可以看到更多的資訊,例如溫度與風扇運作狀況等等。



更多裝置細節1


若是支援的印表機裝置,甚至可以把各色碳粉量以各種顏色表示存量,以及耗材的使用壽命已達多少百分比的資訊。



更多裝置細節2







小結

在今天的篇幅中,我們成功的以 LibreNMS 建置中央收集各個裝置資訊的監控系統,利用 SNMP 協定將各個裝置的 CPU、MEMORY、NETWORK 等資訊一一收回,並將歷史數據存放以備圖表繪製與查詢使用,可以讓我們做前後比對與發生狀況時的確認。

尤其是圖表功能,一旦把時間軸拉長來看,很多主機的異常其實就能夠在一眼看去就發現,而許多資訊安全的狀況經常就藏在這些可疑的圖表之中。

除了這些功能之外,LibreNMS 還有許多功能可以做為我們資安強化的輔助機制,將在後面的篇幅中持續介紹。







參考資料