Adam Bishop bbdb1a2a5d Rewrite smokeping script to be an lnms command (#11585)
* Rewrite smokeping script to be an lnms command

* Add a default number of probes for smokeping

* Formatting fixes

* Refactor to simplify a couple of methods

* Fix a name collision when using more than 60 threads

* Simplify

* First pass at documentation

A few climate fixes too.

I'm a little dubious about the + LibreNMS fix - it could be included
in /etc/smokeping/config if it is really needed, but it sounds like
(looking at git blame) it's needed for if the script generates a broken
configuration file.

I'm thinking we should just not generate broken config.

* Improve testability and add some tests

* Load laravel to make translations available

* Second pass at documentation

* Fix brace

* Extend the device factory to include the type

Also adds a device group fake I created before I realised I didn't need it

* Mimic gen_smokeping.php a little more closely

* Update tests to properly verify old and new behaviour against each other

* Replace gen_smokeping with a wrapper

* Don't double whitespace

Render does this automatically.
Explicitly order by hostname too.

* Make faker less likely to generate duplicates

I tried adding a unique constraint here, but it didn't have the
intended effect.

Extending the hostname like this seems to work fine - I tried
generating 10 million hosts and got no duplicates, compared to
duplicates appearing with as few as 100 hosts without this
 change.

A true fix would be to add an 'fqdn' fake upstream.

* Make the tests more robust

* Assorted bug fixes

* Style corrections

* Handle 'generic' devices

* Fix an issue that came up during rebase

Co-authored-by: Tony Murray <murraytony@gmail.com>
2020-09-18 00:04:54 -05:00

10 KiB

source: Extensions/Smokeping.md path: blob/master/doc/

Smokeping integration

SmokePing is a tool which lets us keep track of network latency, and visualise this through RRD graphs.

LibreNMS has support for both new and pre-existing SmokePing installations.

For new installations, we can use the lnms cli to generate a Smokeping configuration file.

Pre-Existing Smokeping Installation

If you have an existing smokeping server, follow the instructions, you only need to look at Configure LibreNMS - All Operating Systems.

New Installation

All installation steps assume a clean configuration - if you have an existing smokeping setup, you'll need to adapt these steps somewhat.

Install and integrate Smokeping Backend - RHEL, CentOS and alike

Smokeping is available via EPEL, which if you're running LibreNMS, you probably already have. If you want to do something like run Smokeping on a seperate host and ship data via RRCached though, here's the install command:

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install smokeping

Once installed, you should need a cron script installed to make sure that the configuration file is updated. You can find an example in misc/librenms-smokeping-rhel.example. Put this into /etc/cron.d/hourly, and mark it executable:

sudo cp /opt/librenms/misc/smokeping-rhel.example /etc/cron.hourly/librenms-smokeping
sudo chmod +x /etc/cron.hourly/librenms-smokeping

Finally, update the default configuration. Strip everything from the *** Probes *** and *** Targets *** stanza's, and replace with:

*** Probes ***

@include /etc/smokeping/librenms-probes.conf
*** Targets ***

probe = FPing

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of <b>Insert Company Name Here</b>. \
         Here you will learn all about the latency of our network.

@include /etc/smokeping/librenms-targets.conf

Note there may be other stanza's (possibly *** Slaves ***) between the *** Probes *** and *** Targets *** stanza's - leave these intact.

Leave everything else untouched. If you need to add other confiruation, make sure it comes after the LibreNMS configuration, and keep in mind that Smokeping does not allow duplicate modules, and cares about the configuration file sequence.

Once you're happy, manually kick off the cron once, then enable and start smokeping:

sudo /etc/cron.hourly/librenms-smokeping
sudo systemctl enable --now smokeping

Install and integrate Smokeping Backend - Ubuntu, Debian and alike

Smokeping is available via the default repositories.

sudo apt-get install smokeping

Once installed, you should need a cron script installed to make sure that the configuration file is updated. You can find an example in misc/librenms-smokeping-debian.example. Put this into /etc/cron.d/hourly, and mark it executable:

sudo cp /opt/librenms/misc/smokeping-debian.example /etc/cron.hourly/librenms-smokeping
sudo chmod +x /etc/cron.hourly/librenms-smokeping

Finally, update the default configuration. Strip everything from /etc/smokeping/config.d/Probes and replace with:

*** Probes ***

@include /etc/smokeping/config.d/librenms-probes.conf

Strip everything from /etc/smokeping/config.d/Targets and replace with:

*** Targets ***

probe = FPing

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of <b>Insert Company Name Here</b>. \
         Here you will learn all about the latency of our network.

@include /etc/smokeping/config.d/librenms-targets.conf

Leave everything else untouched. If you need to add other confiruation, make sure it comes after the LibreNMS configuration, and keep in mind that Smokeping does not allow duplicate modules, and cares about the configuration file sequence.

Configure LibreNMS - All Operating Systems

Edit /opt/librenms/config.php and add the following:

$config['smokeping']['dir'] = '/var/lib/smokeping';
$config['smokeping']['pings'] = 20;
$config['smokeping']['probes'] = 2;
$config['smokeping']['integration'] = true;
$config['smokeping']['url'] = 'smokeping/';  // If you have a specific URL or path for smokeping

dir should match the location that smokeping writes RRD's to pings should match the default smokeping value, default 20 probes should be the number of processes to spread pings over, default 2

These settings can also be set in the Web UI.

Configure Smokeping's Web UI - Optional

This section covers the required configuration for your web server of choice. This covers the required configuration for either Apache or Nginx.

LibreNMS does not need the Web UI - you can find the graphs in LibreNMS on the latency tab.

Apache Configuration - Ubuntu, Debian and alike

Edit the General configuration file's Owner and contact, and cgiurl hostname details:

nano /etc/smokeping/config.d/General
owner    = LibreNMS-Admin
contact  = admin@ACME.xxx
cgiurl   = http://yourlibrenms/cgi-bin/smokeping.cgi

Smokeping should automatically install an Apache configuration file in /etc/apache2/conf-available/. Verify this using :

librenms@librenms:~/scripts$ ls /etc/apache2/conf-available/ | grep smokeping
smokeping.conf

If you don't see smokeping.conf listed, you'll need to create a symlink for it:

ln -s /etc/smokeping/apache2.conf /etc/apache2/conf-available/smokeping.conf

After creating the symlink, restart Apache with sudo systemctl apache2 restart

You should be able to load the Smokeping web interface at http://yourhost/cgi-bin/smokeping.cgi

Nginx Configuration - Ubuntu, Debian and alike

This section assumes you have configured LibreNMS with Nginx as specified in Configure Nginx.

Add the following configuration to your /etc/nginx/conf.d/librenms config file.

The following will configure Nginx to respond to http://yourlibrenms/smokeping:

#Browsing to `http://librenms.xxx/smokeping/` should bring up the smokeping web interface

 location = /smokeping/ {
        fastcgi_intercept_errors on;

        fastcgi_param   SCRIPT_FILENAME         /usr/lib/cgi-bin/smokeping.cgi;
        fastcgi_param   QUERY_STRING            $query_string;
        fastcgi_param   REQUEST_METHOD          $request_method;
        fastcgi_param   CONTENT_TYPE            $content_type;
        fastcgi_param   CONTENT_LENGTH          $content_length;
        fastcgi_param   REQUEST_URI             $request_uri;
        fastcgi_param   DOCUMENT_URI            $document_uri;
        fastcgi_param   DOCUMENT_ROOT           $document_root;
        fastcgi_param   SERVER_PROTOCOL         $server_protocol;
        fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
        fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;
        fastcgi_param   REMOTE_ADDR             $remote_addr;
        fastcgi_param   REMOTE_PORT             $remote_port;
        fastcgi_param   SERVER_ADDR             $server_addr;
        fastcgi_param   SERVER_PORT             $server_port;
        fastcgi_param   SERVER_NAME             $server_name;
        fastcgi_param   HTTPS                   $https if_not_empty;

        fastcgi_pass unix:/var/run/fcgiwrap.socket;
}

        location ^~ /smokeping/ {
                alias /usr/share/smokeping/www/;
                index smokeping.cgi;
                gzip off;
        }

After saving the configuration file, verify your Nginx configuration file syntax is OK with sudo nginx -t, then restart Nginx with sudo systemctl restart nginx

You should be able to load the Smokeping web interface at http://yourhost/smokeping

Nginx Password Authentification

You can use the purpose-made htpasswd utility included in the apache2-utils package (Nginx password files use the same format as Apache). You can install it on Ubuntu with

apt install apache2-utils

After that you need to create password for your user

htpasswd -c /etc/nginx/.htpasswd USER

You can verify your user and password with

cat /etc/nginx/.htpasswd

Then you just need to add to your config auth_basic parameters

        location ^~ /smokeping/ {
                alias /usr/share/smokeping/www/;
                index smokeping.cgi;
                gzip off;
                auth_basic "Private Property";
                auth_basic_user_file /etc/nginx/.htpasswd;
        }

Common Problems

RRDs::update ERROR: opening ... Permission denied

There is a problem writing to the RRD directory. This is somewhat out of scope of LibreNMS, but make sure that file permissions and SELinux labels allow the smokeping user to write to the directory.

If you're using RRDCacheD, make sure that the permissions are correct there too, and that if you're using -B that the smokeping RRD's are inside the base directory; update the smokeping rrd directory if required.

It's not recommended to run RRDCachedD without the -B switch.

Share RRDCached with LibreNMS

Move the RRD's and give smokeping access rights to the LibreNMS RRD directory:

sudo systemctl stop smokeping
sudo mv /var/lib/smokeping /opt/librenms/rrd/
sudo usermod -a -G librenms smokeping

Update data directory in /etc/smokeping:

datadir = /opt/librenms/rrd/smokeping
dyndir = /opt/librenms/rrd/smokeping/__cgi

Finally restart the smokeping service:

sudo systemctl start smokeping

Remember to update config.php with the new locations.

Probe FPing missing missing from the probes section

Take a look at the instructions again - something isn't correct in your configuration.

Section or variable already exists

Most likely, content wasn't fully removed from the *** Probes *** *** Targets*** stanza's as instructed. If you're trying to integrate LibreNMS, smokeping and another source of configuration, you're probably trying to redefine a module (e.g. '+ FPing' more than once) or stanza. Otherwise, look again at the instructions.

Mandatory variable 'probe' not defined

The target block must have a default probe. If you follow the instructions you will have one. If you're trying to integrate LibreNMS, smokeping and another source of configuration, you need to make sure there are no duplicate or missing definitions.

File '/usr/sbin/sendmail' does not exist`

If you got this error at the end of the installation, simply edit commend out the sendmail entry in the configuration:

-sendmail = /usr/sbin/sendmail
+#sendmail = /usr/sbin/sendmail