Synology Observium Docker 部署及設置

Synology DS423+ 上用 Docker 架一套 Observium,方便集中睇網絡設備狀態(流量、介面、事件等)。最後用 mbixtech/observium 配合 MariaDB 同 phpMyAdmin 成功起好,呢篇記錄由 0 到可以登入使用嘅設定同注意位。

Observium 做到啲咩?

Observium 主要透過 SNMP 去收設備資料,之後用 Web UI 顯示,例如:

  • 介面/port 流量圖(RX/TX)
  • 設備狀態(視乎設備支援:CPU、RAM、溫度等)
  • 事件/告警紀錄(裝置 up/down、介面狀態改變)

架構:三個容器分工

我用 docker-compose 一次起三個服務:

  1. observium:Observium 主程式 + Web
  2. observiumdb:MariaDB(存 Observium 資料)
  3. phpmyadmin:管理 MariaDB(查/改 user、檢查資料庫)

observiumdb 係 compose 裏面嘅 service name,用嚟做容器內 DNS;Observium 會用呢個名連 DB。


需要先準備嘅資料夾

我放喺:

  • /volume1/docker/observium/

先建立:

  • /volume1/docker/observium/mariadb(DB 資料)
  • /volume1/docker/observium/logs(Observium logs)
  • /volume1/docker/observium/rrd(Observium 圖表資料)

一次成功版 docker-compose.yml

以下係我最後用到、可以正常啟動同登入嘅版本。

注意:我 NAS 本身套件已經用緊 3306,所以 Docker MariaDB 對外改用 3307。容器內部仍然係 3306。

				
					version: "3.8"

services:
  observiumdb:
    image: mariadb:11
    restart: unless-stopped
    environment:
      TZ: Asia/Taipei
      MARIADB_ROOT_PASSWORD: "RootPass123!"
      MARIADB_DATABASE: "observium"
      MARIADB_USER: "observium"
      MARIADB_PASSWORD: "123456"
    volumes:
      - /volume1/docker/observium/mariadb:/var/lib/mysql
    ports:
      - "3307:3306"
    healthcheck:
      test: ["CMD-SHELL", "mariadb-admin ping -p\"RootPass123!\" --silent"]
      interval: 10s
      timeout: 5s
      retries: 10

  phpmyadmin:
    image: phpmyadmin:latest
    restart: unless-stopped
    environment:
      TZ: Asia/Taipei
      PMA_HOST: observiumdb
      PMA_PORT: "3306"
      UPLOAD_LIMIT: 256M
    ports:
      - "8081:80"
    depends_on:
      observiumdb:
        condition: service_healthy

  observium:
    image: mbixtech/observium:latest
    restart: unless-stopped
    depends_on:
      observiumdb:
        condition: service_healthy
    environment:
      TZ: Asia/Taipei

      OBSERVIUM_ADMIN_USER: "admin"
      OBSERVIUM_ADMIN_PASS: "AdminPass123!"

      OBSERVIUM_DB_HOST: "observiumdb"
      OBSERVIUM_DB_USER: "observium"
      OBSERVIUM_DB_PASS: "123456"
      OBSERVIUM_DB_NAME: "observium"

      OBSERVIUM_BASE_URL: "http://192.168.1.106:8080"
    ports:
      - "8080:80"
    volumes:
      - /volume1/docker/observium/logs:/opt/observium/logs
      - /volume1/docker/observium/rrd:/opt/observium/rrd
				
			
				
					version: "3.8"

services:
  observiumdb:
    image: mariadb:11
    restart: unless-stopped
    environment:
      TZ: Asia/Taipei
      MARIADB_ROOT_PASSWORD: "RootPass123!"
      MARIADB_DATABASE: "observium"
      MARIADB_USER: "observium"
      MARIADB_PASSWORD: "123456"
    volumes:
      - /volume1/docker/observium/mariadb:/var/lib/mysql
    # 如果 3307 撞 port,就改 3308(容器內仍然係 3306)
    ports:
      - "3308:3306"
    healthcheck:
      test: ["CMD-SHELL", "mariadb-admin ping -p\"RootPass123!\" --silent"]
      interval: 10s
      timeout: 5s
      retries: 10

  phpmyadmin:
    image: phpmyadmin:latest
    restart: unless-stopped
    environment:
      TZ: Asia/Taipei
      PMA_HOST: observiumdb
      PMA_PORT: "3306"
      UPLOAD_LIMIT: 256M
    # 如果 8081 撞 port,就改 18081
    ports:
      - "18081:80"
    depends_on:
      - observiumdb

  observium:
    image: mbixtech/observium:latest
    restart: unless-stopped
    depends_on:
      - observiumdb
    environment:
      TZ: Asia/Taipei

      OBSERVIUM_ADMIN_USER: "admin"
      OBSERVIUM_ADMIN_PASS: "AdminPass123!"

      OBSERVIUM_DB_HOST: "observiumdb"
      OBSERVIUM_DB_USER: "observium"
      OBSERVIUM_DB_PASS: "123456"
      OBSERVIUM_DB_NAME: "observium"

      # 記得跟住 ports 改返 URL(例如 18080)
      OBSERVIUM_BASE_URL: "http://10.71.160.14:18080"
    # 如果 8080 撞 port,就改 18080
    ports:
      - "18080:80"
    volumes:
      - /volume1/docker/observium/logs:/opt/observium/logs
      - /volume1/docker/observium/rrd:/opt/observium/rrd
				
			

啟動後點樣用?

  • Observium:http://192.168.1.106:8080
    登入:admin / AdminPass123!

  • phpMyAdmin:http://192.168.1.106:8081

  • 如果你要用外部工具連 Docker 版 DB:192.168.1.106:3307


避坑重點(值得記低)

1) mbixtech/observium 要用 OBSERVIUM_DB_* 變數

一開始用咗通用嘅 DB_HOST / MYSQL_HOST 類寫法,Observium 未必會讀到,結果就會一直出現 DB 連線/權限錯誤。用返官方範例嘅 OBSERVIUM_DB_* 最穩。

2) MariaDB 初始化只會做一次

/var/lib/mysql 一旦已經有資料,再改 compose 入面嘅密碼通常唔會自動生效。要嘛:

  • 用 phpMyAdmin 改 user 密碼/權限;或者
  • 停 project → 改名/清空 DB folder → 重新初始化(最乾淨)

3) 唔好掛載整個 /opt/observium

掛錯會覆蓋容器入面 Observium 本身檔案/初始化腳本,導致起唔到。只掛 logsrrd 會安全好多。


下一步:加入設備

Observium 主要靠 SNMP,所以要先喺要監控嘅設備開 SNMP(SNMPv2c 或 v3),再喺 Observium 後台 Add Device,等佢跑 discovery/poller,就會開始有資料同圖表。

資料來源:

https://hub.docker.com/r/mbixtech/observium/

https://www.observium.org/