Skip to content

Using rrdcached

This guide will explain how to enable rrdcached in a newly installed Observium installation installed via the automated installation script on Ubuntu 18.04. We expect Observium to be installed in /opt/observium and for scripts to be run as the user observium.

For installations that use distributed and partitioned pollers, only the primary system should have rrdcached installed, and you should take care to uncomment the required field.

Compatible Versions

This guide works with Ubuntu 22.04. We strongly recommend using Ubuntu 22.04.

Performance Note

RRDCached is primarily used as write-back caching for polling to reduce write load and for distributed polling. It can cause slower web UI and graph generation performance.

Poller User

This guide assumes the poller cron jobs are being run as the observium user and that the rrd directory is owned by this user.

Install

Firstly install the rrdcached package

apt -q install rrdcached

Configure

Replace the contents of /etc/default/rrdcached with the following:

# /etc/default file for RRD cache daemon

# Full path to daemon
DAEMON=/usr/bin/rrdcached

# Optional override flush interval, in seconds.
WRITE_TIMEOUT=300

# Optional override maximum write delay, in seconds.
WRITE_JITTER=0

# Optional override number of write_threads
WRITE_THREADS=4

# Where database files are placed.  If left unset, the default /tmp will
# be used.  NB: The daemon will reject a directory that has symlinks as
# components.  NB: You may want to have -B in BASE_OPTS.
BASE_PATH=/opt/observium/rrd/

# Where journal files are placed.  If left unset, journaling will
# be disabled.
JOURNAL_PATH=/var/lib/rrdcached/journal/

# FHS standard placement for process ID file.
PIDFILE=/var/run/rrdcached.pid

# FHS standard placement for local control socket.
SOCKFILE=/var/run/rrdcached.sock

# Optional override group that should own/access the local control
# socket
SOCKGROUP=www-data

# Optional override access mode of local control socket.
SOCKMODE=0660

# Optional unprivileged group to run under when daemon.  If unset
# retains invocation group privileges.
DAEMON_GROUP=observium

# Optional unprivileged user to run under when daemon.  If unset
# retains invocation user privileges.
DAEMON_USER=observium

# Network socket address requests.  Use in conjunction with SOCKFILE to
# also listen on INET domain sockets.  The option is a lower-case ell
# ASCII 108 = 0x6c, and should be repeated for each address.  The
# parameter is an optional IP address, followed by an optional port with
# a colon separating it from the address.  The empty string is
# interpreted as "open sockets on the default port on all available
# interfaces", but generally does not pass through init script functions
# so use -L with no parameters for that configuration.
#NETWORK_OPTIONS="-L"

# Any other options not specifically supported by the script (-P, -f,
# -F, -B).
BASE_OPTIONS="-B -F -R"

Distributed & Partitioned Pollers

If you plan to use distributed or partitioned pollers with this installation, uncomment the NETWORK_OPTIONS entry

NETWORK_OPTIONS="-L"

Note that this will configure rrdcached to listen on all network interfaces, so it should be appropriately firewalled.

Start rrdcached

Change ownership of the rrdcached journal files

chown -R observium.observium /var/lib/rrdcached

Restart the rrdcached daemon

service rrdcached restart

Configure Observium

Edit /opt/observium/config.php and add the following line to the bottom

$config['rrdcached'] = "unix:/var/run/rrdcached.sock";

Validation

To verify that it's working, run the system poller module for a single device in debug mode and search for the string RRD

./poller.php -h localhost -m system -d | grep RRD

If the output shows a number of RRD CMDs with a --daemon unix:/var/run/rrdcached.sock options and correctly shows an OK status on STDOUT and a TRUE RRD_STATUS, everything is working ok!

RRD /opt/observium/rrd/localhost/la.rrd already exists - no need to create.
RRD CMD[update localhost/la.rrd N:0:0:0 --daemon unix:/var/run/rrdcached.sock]
RRD RUNTIME[0.0016s]
RRD STDOUT[OK u:0.00 s:0.00 r:0.18]
RRD_STATUS[TRUE]

If the output shows no RRD CMD lines and only PIPE OPEN and PIPE CLOSE lines, you have not included a valid hostname in the commandline, replace localhost with a valid Observium device.

RRDtool 1.7.2  Copyright by Tobias Oetiker
RRDCacheD 1.7.2
 o RRDtool              1.7.2 (rrdcached 1.7.2: unix:/var/run/rrdcached.sock)
RRD PIPE OPEN[TRUE]
 o RRDTool Usage         (0s 0%)
RRD PIPE CLOSE[TRUE]

If the output shows read/write errors from rrdcached, you probably need to reset the permissions on your rrd directory.

RRD /opt/observium/rrd/localhost/uptime.rrd already exists - no need to create.
RRD CMD[update localhost/uptime.rrd N:322619 --daemon unix:/var/run/rrdcached.sock]
RRD RUNTIME[0.0011s]
RRD STDOUT[OK u:0.01 s:0.00 r:1.02]
RRD_STATUS[TRUE]

You can reset the rrd directory permissions to the observium user:

chown -R observium.observium /opt/observium

This should allow rrdcached to write to the RRDs and will provide correct output like the first example above.