SmokePing does periodic latency/loss measurement (ping, or other probes) and renders RRD-backed graphs. Target: Ubuntu 24.04 LTS VPS, 1 vCPU / 1GB RAM is fine for dozens of targets at moderate polling intervals.
1. Base packages
apt update && apt -y upgrade
apt -y install smokeping nginx fcgiwrap speedy-cgi-perl librrds-perlThe Ubuntu package installs to /etc/smokeping/, RRDs to /var/lib/smokeping/, and sets up an
smokeping system user automatically. It also ships with /usr/sbin/smokeping as a daemon and
a default systemd unit.
2. General config
/etc/smokeping/config.d/General:
*** General ***
owner = RamNode NOC
contact = noc@ramnode.com
mailhost = localhost
sendmail = /usr/sbin/sendmail
imgcache = /var/lib/smokeping/cache
imgurl = ../smokeping-cgi/cache
datadir = /var/lib/smokeping/data
piddir = /var/run/smokeping
smokemail = /etc/smokeping/smokemail.dist
cgiurl = http://smokeping.example.com/smokeping-cgi/smokeping.cgi
# CDF percentile slope
slaves = 3. Presentation (thresholds, graph look)
/etc/smokeping/config.d/Presentation:
*** Presentation ***
template = /etc/smokeping/basepage.html
charset = utf-8
+ charts
menu = Charts
title = The most interesting graphs
++ loss
sorter = Loss(dsc)
menu = Top Loss
title = Top Loss
++ ping
sorter = Median(dsc)
menu = Top Ping
title = Top Ping
+ overview
width = 600
height = 50
range = 10h
++ mymenu
menu = Round Trip Times
title = Round Trip Time Statistics
+ detail
width = 800
height = 200
unison_tolerance = 2
"Last 3 Hours" 3h
"Last 30 Hours" 30h
"Last 10 Days" 10d
"Last 400 Days" 400d4. Probes
/etc/smokeping/config.d/Probes:
*** Probes ***
+ FPing
binary = /usr/bin/fping
step = 300
offset = 50%
pings = 20
+ DNS
binary = /usr/bin/dig
pings = 5
step = 300
+ TCPPing
binary = /usr/bin/tcpping
pings = 5
step = 300Install fping if not already present:
apt -y install fping5. Targets
/etc/smokeping/config.d/Targets:
*** Targets ***
probe = FPing
menu = Top
title = Network Latency Overview
remark = RamNode monitored targets
+ Datacenters
menu = Datacenters
title = Datacenter Uplinks
++ dc_atl
menu = Atlanta uplink
title = Atlanta DC Uplink
host = gw-atl.ramnode.internal
++ dc_ny
menu = New York uplink
title = New York DC Uplink
host = gw-ny.ramnode.internal
+ Customers
menu = Customer Nodes
title = Customer-facing Nodes
++ kvm01
menu = kvm01
title = KVM Hypervisor 01
host = kvm01.ramnode.com
++ nlxsvz71
menu = nlxsvz71
title = OpenVZ dest node
host = nlxsvz71.ramnode.comAdd as many ++ target stanzas as you have hosts. Nested + Group sections build the menu tree.
6. Validate config
smokeping --check --config=/etc/smokeping/config7. Start the daemon
systemctl enable --now smokeping
systemctl status smokepingRRDs start populating in /var/lib/smokeping/data/ — give it a couple of polling cycles (5 min
default step) before graphs show real data.
8. Web frontend (CGI via nginx + fcgiwrap)
The Debian/Ubuntu smokeping package installs the CGI to
/usr/lib/smokeping/cgi-bin/smokeping.cgi (path may vary — confirm with
dpkg -L smokeping | grep cgi).
Enable fcgiwrap:
systemctl enable --now fcgiwrap/etc/nginx/sites-available/smokeping:
server {
listen 80;
server_name smokeping.example.com;
location /smokeping-cgi/ {
alias /usr/lib/smokeping/; # confirm actual path with dpkg -L smokeping
gzip off;
location ~ \.cgi$ {
include fastcgi_params;
fastcgi_pass unix:/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
location / {
return 302 /smokeping-cgi/smokeping.cgi;
}
}ln -s /etc/nginx/sites-available/smokeping /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d smokeping.example.comAdd basic auth if this shouldn't be public:
apt -y install apache2-utils
htpasswd -c /etc/nginx/.smokeping-htpasswd noclocation /smokeping-cgi/ {
auth_basic "SmokePing";
auth_basic_user_file /etc/nginx/.smokeping-htpasswd;
...
}9. Alerting (optional)
/etc/smokeping/config.d/Alerts:
*** Alerts ***
to = noc@ramnode.com
from = smokeping@ramnode.com
+ loss20
type = loss
pattern = >0%,*12*
comment = loss on at least 1 of the last 12 probes
+ dupPL
type = loss
pattern = ==0%,==0%,>0%,>0%,>0%,>0%,>0%
comment = loss pattern following a changeAttach an alerts = loss20 line under any target's Targets stanza to apply.
10. Firewall
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable11. Cross-check against Nagios
You already have Nagios 4 with check_public_activity and check_cpu.py ported. SmokePing is
complementary — it shows latency/loss trends, Nagios gives pass/fail thresholds. Consider a
Nagios passive check that reads the SmokePing RRD via rrdtool fetch if you want threshold
alerts driven off the same latency data instead of duplicating fping checks in NRPE.
Post-install checklist
- Confirm
fpingruns setuid or hasCAP_NET_RAW(Ubuntu package usually handles this viadpkg-statoverride; check withgetcap /usr/bin/fping) - Lock down
/smokeping-cgi/with basic auth or IP allowlist - Tune
step/pingsper probe if you want tighter granularity on critical uplinks - Set up RRD backups (
/var/lib/smokeping/data/) — losing these loses historical trend data
