Error: "Failed to create rrd directory" with every poll on all devices

Hi,

Long-time user here who never needed help till now. This is a new-ish install (4 months) and I’ve mostly ignored this issue till now. The event log is continually spammed with lines like this:
Failed to create rrd directory: /data/librenms/rrd//
for every device on every poll. Yet the directory is already there, owner and perms are correct, FS is XFS, distro is AlmaLinux-9.4

Apart from this spam in the event logs, this LibreNMS works fine, no issues, no complaints. Discovery, polling, graphs, alerts, dashboard all totally satisfactory.

More than 1 person had this error in the past (I found 4) and I followed them all down, no luck. Most of them were related to rrdcached or using docker. I have neither - no docker and don’t use rrdcached. This is a standard install, no funnies, I followed the official docs. The only difference is RRDs are stored in /data (company standard), but IIRC they issue was there when they were in /opt/librenms/rrd as well. Validate is clean. The 4 usual commands to chown/chmod/setfacl were run, and I updated to v24.9 and php-8.2 just last week.

I did initially think it was an exception in function***** in app/Jobs/PollDevice.php as that is the only instance of “Failed to create rrd directory” that grep -ir can find in /opt/librenms. But it’s not that function, I commented out the entire if/try/catch block and it still happens! Also, all the usual mistakes and errors that get mentioned here over and over have been checked, more than once. Reproducing this fault here is simply to enable polling.

So I am mystified and am reaching out for help, I might need assistance with tracing the running code to narrow this down

Validate:
librenms@librenms-jh01 ~ $ ./validate.php

Component Version
LibreNMS 24.9.1 (2024-09-30T01:40:22+02:00)
DB Schema 2024_03_27_123152_create_transceivers_table (300)
PHP 8.2.13
Python 3.9.18
Database MariaDB 10.5.22-MariaDB
RRDTool 1.7.2
SNMP 5.9.1
===========================================

[OK] Composer Version: 2.6.6
[OK] Dependencies up-to-date.
[OK] Database connection successful
[OK] Database connection successful
[OK] Database Schema is current
[OK] SQL Server meets minimum requirements
[OK] lower_case_table_names is enabled
[OK] MySQL engine is optimal
[OK] Database and column collations are correct
[OK] Database schema correct
[OK] MySQL and PHP time match
[OK] Active pollers found
[OK] Dispatcher Service not detected
[OK] Locks are functional
[OK] Python poller wrapper is polling
[OK] Redis is unavailable
[OK] rrd_dir is writable
[OK] rrdtool version ok

Discovery: Untitled - LibreNMS
Poller: Untitled - LibreNMS

Thanks, Alan

Typo, my bad.
It’s function initRrdDirectory(), not function*****

Forgot to update the placeholder before sending

based on that initRrdDirectory function I would assume one or more of your devices doesn’t have a hostname?

Perhaps have a look in your db?

MariaDB [librenms]> select device_id, hostname, sysName from devices where hostname is null or hostname = '';

Hi,

It’s not that:

MariaDB [librenms]> select device_id, hostname, sysName from devices where hostname is null or hostname = ‘’;
Empty set (0.000 sec)

I didn’t expect it to be, as I did mention if I comment out that init function, I get the same result, so it isn’t the function.
Also, I get the error for all devices everytime, and the log shows eve4rything has a hostname