Line graphs not updating, polling and bar graphs appear to be working

I’m attempting to migrate LibreNMS from a VM to Docker. I mostly wanted my historical traffic bills. Everything appears to be working except it seems the graphs are getting updated. Polling is working as the uptime on my various devices are changing, the bar graphs for CPU/memory are getting updated but nothing is happening in the line graphs.

===========================================
Component | Version
--------- | -------
LibreNMS  | 24.4.0 (2024-05-04T17:28:52-05:00)
DB Schema | 2024_04_29_183605_custom_maps_drop_background_suffix_and_background_version (294)
PHP       | 8.2.18
Python    | 3.11.9
Database  | MariaDB 10.5.25-MariaDB-ubu2004
RRDTool   | 1.8.0
SNMP      | 5.9.4
===========================================

[OK]    Installed from package; no Composer required
[OK]    Database connection successful
[WARN]  Your database schema has extra migrations (2024_04_22_161711_custom_maps_add_group, 2024_04_29_180911_custom_maps_add_background_type_and_background_data, 2024_04_29_183605_custom_maps_drop_background_suffix_and_background_version). If you just switched to the stable release from the daily release, your database is in between releases and this will be resolved with the next release.
[OK]    SQL Server meets minimum requirements
[OK]    lower_case_table_names is enabled
[OK]    MySQL engine is optimal
[OK]    MySQL and PHP time match
[OK]    Active pollers found
[OK]    Dispatcher Service is enabled
[OK]    Locks are functional
[OK]    No python wrapper pollers found
[OK]    Redis is functional
[OK]    rrd_dir is writable
[OK]    rrdtool version ok
[WARN]  Non-git install, updates are manual or from package

The libre_nms dispatcher container indicates polling is working correctly:

Alerting(INFO):Completed alerting run for alerts in 0.33s
Billing(INFO):Completed billing run for calculate in 0.56s
Poller_0-17(INFO):Polling device 34
Poller_0-23(INFO):Polling device 92
Poller_0-17(INFO):Completed poller run for 34 in 2.67s
Poller_0-23(INFO):Completed poller run for 92 in 2.77s
Poller_0-1(INFO):Polling device 23
Poller_0-1(WARNING):Polling device 23 unreachable, waiting 60s for retry
Poller_0-1(INFO):Completed poller run for 23 in 7.58s
Poller_0-11(INFO):Polling device 89
Poller_0-11(INFO):Completed poller run for 89 in 3.36s
Poller_0-1(INFO):Polling device 57
Poller_0-23(INFO):Polling device 93
Poller_0-23(INFO):Completed poller run for 93 in 2.58s
Poller_0-1(INFO):Completed poller run for 57 in 4.65s
Billing(INFO):Polling billing
performance(INFO):Counting up time spent polling
Alerting(INFO):Checking alerts
Services_0-7(INFO):Checking services on device 1
Billing(INFO):Completed billing run for poll in 0.36s
Billing(INFO):Calculating billing
Alerting(INFO):Completed alerting run for alerts in 0.34s
Billing(INFO):Completed billing run for calculate in 0.51s
Services_0-7(INFO):Completed services run for 1 in 7.04s
Poller_0-18(INFO):Polling device 23
Poller_0-18(WARNING):Polling device 23 unreachable, waiting 60s for retry
Poller_0-18(INFO):Completed poller run for 23 in 7.58s
Billing(INFO):Calculating billing
Alerting(INFO):Checking alerts
Alerting(INFO):Completed alerting run for alerts in 0.34s
Billing(INFO):Completed billing run for calculate in 0.55s
Poller_0-4(INFO):Polling device 94
Poller_0-4(INFO):Completed poller run for 94 in 2.90s
Poller_0-5(INFO):Polling device 23
Poller_0-19(INFO):Polling device 96
Poller_0-19(INFO):Completed poller run for 96 in 3.16s
Poller_0-5(WARNING):Polling device 23 unreachable, waiting 60s for retry
Poller_0-5(INFO):Completed poller run for 23 in 7.57s
Poller_0-16(INFO):Polling device 68
Poller_0-4(INFO):Polling device 95
Billing(INFO):Calculating billing
Alerting(INFO):Checking alerts
Alerting(INFO):Completed alerting run for alerts in 0.34s
Billing(INFO):Completed billing run for calculate in 0.56s
Poller_0-16(INFO):Completed poller run for 68 in 3.84s
Poller_0-4(INFO):Completed poller run for 95 in 3.90s
Poller_0-11(INFO):Polling device 23
Poller_0-23(INFO):Polling device 1
Poller_0-11(WARNING):Polling device 23 unreachable, waiting 60s for retry
Poller_0-11(INFO):Completed poller run for 23 in 7.53s
Billing(INFO):Calculating billing
Alerting(INFO):Checking alerts
Poller_0-23(INFO):Completed poller run for 1 in 2.97s
Alerting(INFO):Completed alerting run for alerts in 0.34s
Billing(INFO):Completed billing run for calculate in 0.54s
Poller_0-19(INFO):Polling device 90
Poller_0-22(INFO):Polling device 7
Poller_0-19(INFO):Completed poller run for 90 in 2.74s
Poller_0-22(INFO):Completed poller run for 7 in 5.25s

Discovery: https://p.libren.ms/view/8d58149c
Poller: https://p.libren.ms/view/04200178

The compose.yml was pulled from the repository and slightly modified:

name: librenms

services:
  db:
    image: mariadb:10.5
    container_name: librenms_db
    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: unless-stopped

  redis:
    image: redis:5.0-alpine
    container_name: librenms_redis
    environment:
      - "TZ=${TZ}"
    restart: unless-stopped

  msmtpd:
    image: crazymax/msmtpd:latest
    container_name: librenms_msmtpd
    env_file:
      - "./msmtpd.env"
    restart: unless-stopped

  librenms:
    image: librenms/librenms:latest
    container_name: librenms
    hostname: librenms
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - target: 8000
        published: 8001
        protocol: tcp
    depends_on:
      - db
      - redis
      - msmtpd
    volumes:
      - "./librenms:/data"
      - "./libreopt/:/opt/librenms"
#      - "./libreopt:/mnt"
    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: unless-stopped

  dispatcher:
    image: librenms/librenms:latest
    container_name: librenms_dispatcher
    hostname: librenms-dispatcher
    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: unless-stopped

  syslogng:
    image: librenms/librenms:latest
    container_name: librenms_syslogng
    hostname: librenms-syslogng
    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: unless-stopped

  snmptrapd:
    image: librenms/librenms:latest
    container_name: librenms_snmptrapd
    hostname: librenms-snmptrapd
    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: unless-stopped

Your log looks fine to me. I’m not sure what you are talking about though. A screenshot of what you are seeing marked with what you expect to see would be a good idea.

Sure thing and thanks for the reply!


This is what all of my line graphs look like, they stop as of the date of migration.

Sorry, had to split it into 2 posts due to the embedded media.

But I can tell stats are still coming in because bar graphs such as:
image
Do change.

So, polling is working but writing to rrds is not. Check file permissions and if you are using rrdcached, check that.

Well this is interesting:

drwxrwxr-x   2 librenms librenms 4.0K May  4 17:28 rrd
drwxr-xr-x   5 librenms librenms 4.0K May  4 17:28 scripts
-rwxr-xr-x   1 librenms librenms 1.9K May  4 17:28 services-wrapper.py
-rwxr-xr-x   1 librenms librenms  11K May  4 17:28 snmp-scan.py
-rw-r--r--   1 librenms librenms  880 May  4 17:28 snmpd.conf.example
-rwxr-xr-x   1 librenms librenms  538 May  4 17:28 snmptrap.php
drwxrwxr-x   6 librenms librenms 4.0K May  4 17:28 storage
-rwxr-xr-x   1 librenms librenms  523 May  4 17:28 syslog.php
-rw-r--r--   1 librenms librenms  776 May  4 17:28 tailwind.config.js
-rwxr-xr-x   1 librenms librenms 5.2K May  4 17:28 validate.php
drwxr-xr-x  58 librenms librenms 4.0K May  4 17:29 vendor
-rw-r--r--   1 librenms librenms  709 May  4 17:28 webpack.mix.js

Perms seem right, I think (not sure how Docker perms are) but then…

librenms:/opt/librenms/rrd# ls -alh
total 12K
drwxrwxr-x  2 librenms librenms 4.0K May  4 17:28 .
drwxr-xr-x 23 librenms librenms 4.0K Jun 17 09:31 ..
-rw-rwxr--  1 librenms librenms   71 May  4 17:28 .gitignore

I know, without question, I copied the RRD files from the old install, so something wiped them out. And they’re also not being generated. But if the RRDs aren’t there, how do I have RRDs rendered in the screenshots above? :face_with_spiral_eyes:

Also, I see no rrdcache running anywhere. I see Redis, but no mention of rrdcache in any processes that I can find.

Go to Global Settings in the Cog menu. Search for rrd_dir. If you haven’t made any changes, with the Docker setup, it’ll probably be /data/rrd.

Assuming that’s the case, that’s mapped in your compose volumes. So when you copied the old RRD’s they should have gone to ./librenms/rrd on your Docker host machine. Check the permissions for ./librenms/ (on your host). In the container /data/ probably be owned by root:root

It’s not quite the same because I did have to modify stuff (i.e. bills wouldn’t survive a container restart).

They were owned by user:user. How should the be owned as viewed from within the container? I would assume librenms:librenms but I see a hodge podge of ownership/group combos which I think is by default. I don’t recall messing with permissions after the migration.

Just wanted to give this a little bump. I’ve tried to match permissions with other files/folders in the container without success. Wondering if there’s a command that needs to be run to refresh the RRD generation portion.