目錄表

安裝 LibreNMS (Docker)

安裝與下載

啟動 docker compose

更新版本

命令列操作

驗證 Service(Nagios_Plugin) 設定參數

設定告警條件(Alert Rules)

設定告警通知(Alert Transports)

常見問題

  1. 已經安裝的 LibreNMS 主機設定好 snmpd , 卻無法在 LibreNMS 成功加入, 出現 SNMP v2c: No reply with community public 無法存取狀況
    • 常見的問題是 LibreNMS 的 snmpd.conf 內所設定授權的 IP 範圍不正確, Exp. LibreNMS 主機 IP : 192.168.11.248 , 所以正常就會設定授權 IP 類似 192.168.11.248/32 Exp. snmod.conf 內設定為

      :
      com2sec mylibrenms 192.168.11.248/32 public
      :

      但是這環境已經有 docker 網路, 所以 LibreNMS 連過去主機會使用到 Docker 的網段 Exp. 172.20.0.0/16

      localadmin@pve-librenms:~$ docker network inspect librenms_default | grep "Subnet"
                          "Subnet": "172.20.0.0/16",

      因此需要將主機 snmpd.conf 的授權 IP 改成這 Docekr 網段 Exp.

      :
      com2sec mylibrenms 172.20.0.0/16 public
      :

      修改 snmpd.conf 後重啟 snmpd 服務就可

    • 如果重新開機 docker network 網段會改變, 可以指定固定網段的 Docker 網路 Exp. librenms-network 修改 compose.yml

      name: librenms
      
      networks:
        librenms-network:
          name: librenms-network
          ipam:
            driver: default
            config:
              - subnet: 172.20.0.0/16
                gateway: 172.20.0.1
      
      services:
        db:
          image: mariadb:10.5
          container_name: librenms_db
          networks:
            - librenms-network
          command:
            - "mysqld"
            - "--innodb-file-per-table=1"
            - "--lower-case-table-names=0"
            - "--character-set-server=utf8mb4"
            - "--collation-server=utf8mb4_unicode_ci"
          volumes:
            - "./db:/var/lib/mysql"
          environment:
            - "TZ=${TZ}"
            - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
            - "MYSQL_DATABASE=${MYSQL_DATABASE}"
            - "MYSQL_USER=${MYSQL_USER}"
            - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
          restart: always
      
        redis:
          image: redis:5.0-alpine
          container_name: librenms_redis
          networks:
            - librenms-network
          environment:
            - "TZ=${TZ}"
          restart: always
      
        msmtpd:
          image: crazymax/msmtpd:latest
          container_name: librenms_msmtpd
          networks:
            - librenms-network
          env_file:
            - "./msmtpd.env"
          restart: always
      
        librenms:
          image: librenms/librenms:latest
          container_name: librenms
          hostname: librenms
          networks:
            - librenms-network
          cap_add:
            - NET_ADMIN
            - NET_RAW
          ports:
            - target: 8000
              published: 8000
              protocol: tcp
          depends_on:
            - db
            - redis
            - msmtpd
          volumes:
            - "./librenms:/data"
          env_file:
            - "./librenms.env"
          environment:
            - "TZ=${TZ}"
            - "PUID=${PUID}"
            - "PGID=${PGID}"
            - "DB_HOST=db"
            - "DB_NAME=${MYSQL_DATABASE}"
            - "DB_USER=${MYSQL_USER}"
            - "DB_PASSWORD=${MYSQL_PASSWORD}"
            - "DB_TIMEOUT=60"
          restart: always
      
        dispatcher:
          image: librenms/librenms:latest
          container_name: librenms_dispatcher
          hostname: librenms-dispatcher
          networks:
            - librenms-network
          cap_add:
            - NET_ADMIN
            - NET_RAW
          depends_on:
            - librenms
            - redis
          volumes:
            - "./librenms:/data"
          env_file:
            - "./librenms.env"
          environment:
            - "TZ=${TZ}"
            - "PUID=${PUID}"
            - "PGID=${PGID}"
            - "DB_HOST=db"
            - "DB_NAME=${MYSQL_DATABASE}"
            - "DB_USER=${MYSQL_USER}"
            - "DB_PASSWORD=${MYSQL_PASSWORD}"
            - "DB_TIMEOUT=60"
            - "DISPATCHER_NODE_ID=dispatcher1"
            - "SIDECAR_DISPATCHER=1"
          restart: always
      
        syslogng:
          image: librenms/librenms:latest
          container_name: librenms_syslogng
          hostname: librenms-syslogng
          networks:
            - librenms-network
          cap_add:
            - NET_ADMIN
            - NET_RAW
          depends_on:
            - librenms
            - redis
          ports:
            - target: 514
              published: 514
              protocol: tcp
            - target: 514
              published: 514
              protocol: udp
          volumes:
            - "./librenms:/data"
          env_file:
            - "./librenms.env"
          environment:
            - "TZ=${TZ}"
            - "PUID=${PUID}"
            - "PGID=${PGID}"
            - "DB_HOST=db"
            - "DB_NAME=${MYSQL_DATABASE}"
            - "DB_USER=${MYSQL_USER}"
            - "DB_PASSWORD=${MYSQL_PASSWORD}"
            - "DB_TIMEOUT=60"
            - "SIDECAR_SYSLOGNG=1"
          restart: always
      
        snmptrapd:
          image: librenms/librenms:latest
          container_name: librenms_snmptrapd
          hostname: librenms-snmptrapd
          networks:
            - librenms-network
          cap_add:
            - NET_ADMIN
            - NET_RAW
          depends_on:
            - librenms
            - redis
          ports:
            - target: 162
              published: 162
              protocol: tcp
            - target: 162
              published: 162
              protocol: udp
          volumes:
            - "./librenms:/data"
          env_file:
            - "./librenms.env"
          environment:
            - "TZ=${TZ}"
            - "PUID=${PUID}"
            - "PGID=${PGID}"
            - "DB_HOST=db"
            - "DB_NAME=${MYSQL_DATABASE}"
            - "DB_USER=${MYSQL_USER}"
            - "DB_PASSWORD=${MYSQL_PASSWORD}"
            - "DB_TIMEOUT=60"
            - "SIDECAR_SNMPTRAPD=1"
          restart: always

  2. 第一次啟動時 docker compose logs librenms 一直出現 librenms | nginx: [emerg] socket() [::]:8000 failed (97: Address family not supported by protocol)
    • 主要是該 VM 沒有啟用支援 ipv6, 因此必須將 nginx 內的設定檔關閉 Listen ipv6
      1. 修改 compose.yml 設定 LISTEN_IPV6=false
        :
          librenms:
            image: librenms/librenms:latest
        :
            environment:
        :
              - "LISTEN_IPV6=false"
        :
      2. 重新啟動

        docker compose up -d

參考網址