[教學] 用 Docker 來架設 LibreNMS 架設網路服務監控系統

LibreNMS 是一套 Open source 的功能完整的網路監控系統,
使用 SNMP (Simple Network Management Protocol) 協定來搜集電腦系統的資料。

初次研究後,就發現它可以協助解決設備很多在線上,
測量設備穩定性的事情。
就算該裝置沒有支援 SNMP,也可以使用純 ping 的方式來監控所有線上的設備。
就一步一步帶大家怎麼設定與架設。

LibreNMS 系列文:

以下使用 Docker 裝在 Linux 主機上。
至於 Linux 版本就看大家喜好,
以下示範使用 Ubuntu 系統,若是其他發佈版可以依樣畫葫蘆稍加修改。

我們今天用的是 jarischaefer/docker-librenms 套件來架設,
如果作者版本有更新安裝方式,再煩請告知。

GitHub 位置:
https://github.com/jarischaefer/docker-librenms

Step1. 產生密鑰

使用指令產生密鑰

$ sudo docker run --rm jarischaefer/docker-librenms generate_key

每台系統密鑰皆不相同,不可以直接複製。
如果有多台要架設,請記得更換密鑰!(這步驟很常忘記)

Step2. 編輯 docker-compose.yml

有關 docker 的設定方式就不贅述了。
有用過 docker 的朋友應該很熟悉 docker-compose 這指令。

現在要來做一個新的 docker-compose.yml

docker-compose.yml

version: '3.5'

services:
  web:
    image: jarischaefer/docker-librenms
    restart: always
    ports:
      - '80:80'
    volumes:
      - ./librenms_data/logs:/opt/librenms/logs
      - ./librenms_data/rrd:/opt/librenms/rrd
    environment:
      APP_KEY: base64:NA......................................SdA=
      DB_HOST: librenms_database
      DB_USER: librenms
      DB_PASS: Tuq.........tai
      DB_NAME: librenms
      POLLERS: 16
      BASE_URL: http://192.168.1.2
      TZ: Asia/Taipei
    depends_on:
      - mysql
  mysql:
    image: mariadb:10.5
    container_name: librenms_database
    restart: always
    volumes:
      - ./librenms_data/mysql:/var/lib/mysql
    environment:
      TZ: Asia/Taipei
      MYSQL_ROOT_PASSWORD: Cho.........lan
      MYSQL_USER: librenms
      MYSQL_PASSWORD: Tuq.........tai
      MYSQL_DATABASE: librenms

重要參數說明

web 部分

  • APP_KEY:密鑰(每台電腦皆不同,請自行產生)
  • DB_HOST:mysql 的 IP 位址(不需修改)
  • DB_USER:mysql 使用者
  • DB_PASS:mysql 密碼
  • DB_NAME:mysql 資料庫名稱
  • POLLERS:輪詢器數量
  • BASE_URL:預設網址(很重要,請記得改!就算是本機服務,也請修改成正確的網址。)
  • TZ:時區,這裡設定台灣 (Asia/Taipei)

mysql 資料庫部分

這裡使用 MariaDB 資料庫,要換成 mysql 5.7 也可以。

  • TZ:時區(與網頁伺服器一致即可)
  • MYSQL_ROOT_PASSWORD:資料庫 root 密碼
  • MYSQL_USER :使用者(與 DB_USER 一致即可)
  • MYSQL_PASSWORD :密碼(與 DB_PASS 一致即可)
  • MYSQL_DATABASE :資料庫名稱(與 DB_NAME 一致即可)

Step3. 建立資料夾

建立相關路徑的資料夾,讓它能夠掛載。

$ mkdir -p ./librenms_data && \
mkdir -p ./librenms_data/logs && \
mkdir -p ./librenms_data/rrd && \
mkdir -p ./librenms_data/mysql

Step4. 啟動整組服務

利用 docker-compose 把整組服務啟動。

$ sudo docker-compose up -d

Step5. 初始化資料庫

服務整組起來之後,網頁瀏覽器應該可以看到這個訊息:

Database inconsistencies found during a database error, please fix to continue.

Your database is out of date!

不用太緊張,這是正常現象,等下下指令來初始化資料庫。

首先要先找到 librenms_web 的 container,
如果是 docker-compose 整組起來的話,可能會叫做 librenms_web_1
執行指令前可以用 docker ps 指令來查看你的目前起的服務名稱(或 ID),確認一下。

$ sudo docker exec librenms_web_1 setup_database

這步驟是初始化它 LibreNMS 的資料庫。
如果失敗了,整個服務會起不來。

Step6. 建立 admin 管理者

它服務跑起來預設是 「沒有任何帳號的」,
我們用該指令來建立 admin 管理者

$ sudo docker exec librenms_web_1 create_admin

librenms_web_1 名稱為 container_id,
可用 docker ps 指令來查看你的目前起的服務名稱(或 ID)。

這指令將會建立一個 admin 管理者:

記得去改密碼。記得去改密碼。記得去改密碼。
很重要講三次。

瀏覽你的本機網址,就可以看到 LibreNMS 的主頁面了。

參考資料