利用 Prometheus + Grafana 打造超專業級的OpenWRT監控面板

如果我告訴你,本文主題圖的那個看上去超專業的監控面板,是可以在Openwrt上面免費實現,你相信嗎?小U就用10分鐘簡單介紹怎麼輕鬆在你的 Ups-WR30U 或者任何 OpenWRT路由器上都能DIY這個超專業的路由器監控Dashboard。

OpenWRT專業級路由器監測面板的搭建思路

使用到的軟件

Prometheus

Prometheus 是一款開源監控系統的工具,它可以收集並整理各種數據,例如系統運行的情況或應用程序的表現。用戶可以通過這些數據來查看系統的健康狀況,並及時收到警報,以防出現問題。

Grafana

Grafana 是一款免費且開源的數據可視化和監控工具,它允許您查詢、可視化、對數據進行警報,並理解存儲在任何地方的度量數據。Grafana 提供各種儀表板、圖表、圖形和特定數據源的警報,支持廣泛的數據源,包括像 MySQL、PostgreSQL 和 Prometheus 這樣的流行數據庫。

搭建步驟

參考 Monitor OpenWrt nodes with Prometheus 的教學,主要分3部分:

  1. 數據輸出:在OpenWRT上安裝prometheus的exporter插件(相當於client),
  2. 數據採集:然後用主機上安裝prometheus主體,對OpenWRT的exporter node進行數據採集刮削(scraping)
  3. 數據呈現:在主機上安裝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)。另外就是不適合長時間的監控和數據分析,窗口關閉了就沒有了,路由器重啓就更不用說了。

Netdata 的佔用資源 是 Prometheus exporter 的20倍。

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路由器,不妨從 Ups-WR30U 上手吧:

歡迎你的留言討論:

你可以一針見血

by Upsangel
Logo