如果我告訴你,本文主題圖的那個看上去超專業的監控面板,是可以在Openwrt上面免費實現,你相信嗎?小U就用10分鐘簡單介紹怎麼輕鬆在你的 Ups-WR30U 或者任何 OpenWRT路由器上都能DIY這個超專業的路由器監控Dashboard。
摘要節點
OpenWRT專業級路由器監測面板的搭建思路
使用到的軟件
Prometheus
Prometheus 是一款開源監控系統的工具,它可以收集並整理各種數據,例如系統運行的情況或應用程序的表現。用戶可以通過這些數據來查看系統的健康狀況,並及時收到警報,以防出現問題。
Grafana
Grafana 是一款免費且開源的數據可視化和監控工具,它允許您查詢、可視化、對數據進行警報,並理解存儲在任何地方的度量數據。Grafana 提供各種儀表板、圖表、圖形和特定數據源的警報,支持廣泛的數據源,包括像 MySQL、PostgreSQL 和 Prometheus 這樣的流行數據庫。
搭建步驟
參考 Monitor OpenWrt nodes with Prometheus 的教學,主要分3部分:
- 數據輸出:在OpenWRT上安裝prometheus的exporter插件(相當於client),
- 數據採集:然後用主機上安裝prometheus主體,對OpenWRT的exporter node進行數據採集刮削(scraping)
- 數據呈現:在主機上安裝Grafana主體,套用 OpenWRT Dashboard 的預設排版
本次測試在 Ups-WR30U 成功進行。什麼?你還沒聽說過 Ups-WR30U ?這是小U在1個月前推出的全開源OpenWRT WIFI6路由器:
1、OpenWRT上安裝prometheus插件
在 System -> Software
中搜尋 prometheus
,安裝以下插件:
- prometheus-node-exporter-lua
- prometheus-node-exporter-lua-nat_traffic
- prometheus-node-exporter-lua-netstat
- prometheus-node-exporter-lua-openwrt
- prometheus-node-exporter-lua-wifi
- prometheus-node-exporter-lua-wifi_stations
安裝之後,在路由器的ssh 應該可以用 curl localhost:9100/metrics 來獲取信息。
如果信息正常讀取,則修改 /etc/config/prometheus-node-exporter-lua
,把監聽 Interface 從“自己”變成“lan”內網:
config prometheus-node-exporter-lua 'main'
option listen_ipv6 '0'
option listen_port '9100'
option listen_interface 'lan' # <--把這裏的loopback換成lan
這時用另一部主機的瀏覽器訪問 routerip:9100/metrics 應該也可以得到相同信息。
2、主機上安裝prometheus主體
安裝prometheus我使用的docker-compose如下:
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml
- ./data:/prometheus
restart: unless-stopped
ports:
- 9090:9090
networks:
- influx
networks:
influx:
external:
name: influxdb_default
留意到prometheus.yml是需要預配置的,需要指定路由器的地址和數據採集頻率,我的prometheus.yml配置是:
global:
scrape_interval: 15s
evaluation_interval: 15s
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'docker-host-alpha'
# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
- "alert.rules"
# A scrape configuration containing exactly one endpoint to scrape. 請修改IP地址和採集時間間隔
scrape_configs:
- job_name: 'openwrt-router1'
scrape_interval: 10s
static_configs:
- targets: ['192.168.1.3:9100']
可以看到,到此爲止我們都是全文字,沒有圖像化操作,所以就要引入Grafana做可視化。
3、在主機上安裝Grafana主體
我使用的docker-compose是:
version: '3.8'
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
# if you are running as root then set it to 0
# else find the right id with the id -u command
user: '0'
networks:
- influx
ports:
- '3001:3000'
# adding the mount volume point which we create earlier
volumes:
- ./data:/var/lib/grafana
networks:
influx:
external:
name: influxdb_default
補充說明:Prometheus 和 Grafana 的網路我都綁在之前已經創建的 InfluxDB的網路上,讓我們之間可以透過domain name 直接互訪。
補充2:用3001端口是因爲我的3000端口被 nastool 佔據了
Granfan建好就終於有圖形界面了,輸入 ip:3001訪問 Grafana,默認登入名和密碼都是 admin :
進入之後就選擇 Add Data Source,選擇 Prometheus ,然後在URL那裡輸入你的Prometheus docker地址,按最下面的Save and Test:
然後按右上角的 Build a dashboard,選擇 Import dashboard:
Dashboard的導入地址寫 https://grafana.com/grafana/dashboards/11147-openwrt/ 或者單輸入代號 11147:
魔法就出來了,一個超多項目的OpenWRT監控面板:
而且每個排版、每個細節你都可以自定義。
你也試試吧!
Prometheus + Grafana 和 Netdata 套件比較
Netdata也能實現類似的效果,但是把所有任務都給OpenWRT系統,會明顯佔用系統資源(Netdata的安裝包達 7.62MB)。另外就是不適合長時間的監控和數據分析,窗口關閉了就沒有了,路由器重啓就更不用說了。
Prometheus 和 MQTT 的對比
與上文分享的MQTT搭建監控數據比起來,Prometheus 已經爲 OpenWRT 預設了幾百個監控項目以及配套的顯示面板Dashboard,無論功能還是顏值都要碾壓 MQTT方案。
但是 Prometheus 不是完美,首先 Prometheus 沒有 MQTT 輕量,他是基於http來傳輸,在OpenWRT會常佔系統資源。採集數據是需要 Prometheus 主體進行「輪詢」。所以 Prometheus 在超輕量化的場景例如物聯網IoT中並沒有MQTT那麼普及。
沒有資源限制的話,裝一個 Prometheus 和 Grafana ,玩OpenWRT的氣場是不是瞬間提高了?哈哈!
本文是小U的「玩開源、從OpenWRT開始」系列文章的其中一篇。自從Ups-WR30U開源路由器得到大家的熱烈支持,小U也收到了客戶的各種使用OpenWRT的問題查詢,順勢就着手把大家會遇到的,想要用的,都集結成這個系列的文章,希望讓各位從OpenWRT體驗和玩樂開源系統。不需要靠AI,你就能讓路由器變得更”聰明“!
- OpenWRT路由器WiFi名、密碼、速度的設定教學
- OpenWRT使用TailScale VPN教學
- 擋廣告神器「AdguardHome」在OpenWRT上使用方法教學
- 用OpenWRT劃分出訪客Guest LAN、隔離外網伺服器的兩種方法(不是無線訪客WIFI)
- OpenWRT防火牆:限制IP訪問Internet的最佳設置方法(無需打命令行)
- 一鍵連回家里內網:OpenWRT上部署Wireguard VPN服務器的三個要點、減少折騰時間
如果你還未有OpenWRT路由器,不妨從 Ups-WR30U 上手吧: