網路監控系統 - Librenms
提示很久很久以前,我曾經使用過MRTG+SNMP做流量圖表,但是隨著去中國這幾年家裡的Server逐步變成會動就好的超低標準,就沒管了,最近因為大整理所以就想再弄一個類似的,於是挑了Librenms
參考資料
莫莫 雜記 - Docker LibreNMS安裝記錄(含MariaDB、PhpMyAdmin)
其實他寫的很詳細,照著做就好了,不過我還是把我稍微調整過的做法寫在下面
基本做法
MariaDB
-
vi mariadb.yml
# mariadb.yml
--------------------------------------------------------------------------------------------------------------------------------
services:
mariadb:
image: mariadb:latest
container_name: mariadb
environment:
- MYSQL_ROOT_PASSWORD=${your_DB_root_Passwd}
- TZ=Asia/Taipei
ports:
- ${your_DB_host}:${your_DB_port}:3306
volumes:
- /var/lib/docker/volumes/mariadb/data:/var/lib/mysql
- /var/lib/docker/volumes/mariadb/mariadbcustom.cnf:/etc/mysql/conf.d/custom.cnf
restart: unless-stopped
-
vi /var/lib/docker/volumes/mariadb/mariadbcustom.cnf
# /var/lib/docker/volumes/mariadb/mariadbcustom.cnf
--------------------------------------------------------------------------------------------------------------------------------
[client]
default-character-set = utf8mb4
[mysql]" >> /etc/my.cnf
default-character-set = utf8mb4
[mysqld]
skip-character-set-client-handshake
collation_server = utf8mb4_unicode_ci
character_set_server = utf8mb4
tmpdir = /var/lib/mysqltmp
這個是用來定義MariaDB的預設,都使用utf-8 unicode
-
sudo docker-compose -f mariadb.yml up -d
這個是用來建立container & run
-
sudo docker exec -it mariadb bash
# @mariadb container
--------------------------------------------------------------------------------------------------------------------------------
mysql -u root -p # 輸入後鍵入你的sql root密碼進入mariadb
#建立librenms用的帳號,資料庫以及授予這個帳號對這個資料庫的全部權限,不喜歡用指令的人也可以用phpAdmin來進行
mysql> CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> CREATE USER 'librenms'@'%' IDENTIFIED BY 'user_librenms_password';
mysql> GRANT ALL PRIVILEGES on librenms.* TO 'librenms'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
Librenms
-
vi librenms.yml
#librenms.yml
--------------------------------------------------------------------------------------------------------------------------------
version: '3'
services:
librenms:
image: librenms/librenms:latest
container_name: librenms
command: su - librenms -c "/opt/librenms/librenms-service.py -v"
environment:
- TZ=Asia/Taipei
- PUID=1000
- DB_HOST=${your_DB_host}
- DB_PORT=${your_DB_port}
- DB_NAME=librenms
- DB_USER=librenms
- DB_PASSWORD=user_librenms_passwd
- DB_TIMEOUT=10
- LIBRENMS_SNMP_COMMUNITY=${Community_name_you_want}
ports:
- ${your_Server_ip}:${port_you_want}:8000
volumes:
- /var/lib/docker/volumes/librenms/data:/data
restart: always
這裡有個關鍵的一步就是務必要加上
command: su - librenms -c "/opt/librenms/librenms-service.py -v"
這個的意思是以librenms這個帳號執行/opt/librenms/librenms-service.py -v
這樣他的rrd權限才會正確,不然會有問題(我之前就是信了這是optional所以一直弄不好,這個是必要條件...)
-
sudo docker exec -it mariadb bash
#進入mariadb container
--------------------------------------------------------------------------------------------------------------------------------
mysql -u librenms -p #以librenms帳號登入mariadb
mysql> use librenms; #使用librenms資料庫
#修改資料庫資料
mysql> ALTER TABLE `notifications` CHANGE `datetime` `datetime` timestamp NOT NULL DEFAULT '1970-01-02 00:00:00' ;
mysql> ALTER TABLE `users` CHANGE `created_at` `created_at` timestamp NOT NULL DEFAULT '1970-01-02 00:00:01' ;
這個是修正database issue(Validata Config裡的問題修正)
同場加映 - phpAdmin
這個玩意老實說用不太到,但是針對不喜歡mysql指令的人可以用這個圖形介面來操作mysql database
因為他很單純,所以直接用docker run指令建立就可以了
# 若你的${your_DB_host}=3306
sudo docker run --name phpmyadmin -d -e PMA_HOST=${your_DB_host} -p 8080:80 phpmyadmin/phpmyadmin
# 若你的${your_DB_host}不是預設的3306,建議用docker --link來連結
sudo docker run --name phpmyadmin -d --link mariadb:db -p 8080:80 phpmyadmin/phpmyadmin
這裡的8080port是對外的可以改成你想要的
Nginx設定
老實說,要改成子目錄的方式,得去修改container內的config.php我覺得這個太麻煩了,所以我就跑去再申請一個DN專門來用
Nginx的設定就是普通的virtual host設定法,只要在`/etc/nginx/site-enables/後面再加上一個cnf檔定義一下就好了
記得要另外申請一下certbot的憑證給這個 DN使用
# librenms.cnf
--------------------------------------------------------------------------------------------------------------------------------
server {
listen 80;
server_name librenms.exsample.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name librenms.exsample.com;
ssl_certificate /etc/letsencrypt/live/librenms.exsample.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/librenms.exsample.com/privkey.pem;
# include /etc/letsencrypt/options-ssl-nginx.conf;
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
client_max_body_size 20M;
location / {
proxy_pass http://${your_Server_ip}:${port_you_want}; #這裡改成要轉發的ip/port
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_buffering off;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
SNMP for clients
FreeBSD
請參考Wiki的 FreeBSD Section
VMware ESXi 6.5
參考資料
-
ssh登入Esxi後
esxcli system snmp get # 確認snmp狀態與設定值
esxcli system snmp set -c YOUR_STRING # 設定你的community
esxcli system snmp set -p 161 # 設定你的snmp port,基本上都是使用161 udp
esxcli system snmp set -L "City, State, Country" # 設定你的Location
esxcli system snmp set -C noc@example.com # 設定你的聯絡人
esxcli system snmp set -e yes # 設定啟用
- 到其他可以讀snmp的機器上執行
snmpwalk -v2c -c ${YOUR_STRING} ${your_server_IP}</code>
確認有沒有資料就好了
結論
- Community若不想修改librenms內的 config.php的話建議不要用public以外的字串,這樣找起來比較方便
- 這些要開啟後至少幾個小時後才會有明顯的圖示,不要太緊張,也沒辦法一設好就馬上有資料
廢棄原因
-
使用率低 - 裝好後幾乎沒用過
-
有其他代替品如
netdata,但是我又直接裝在Gateway跟DHCP上,所以用途就更少了