Deploying SmokePing for Network Latency Monitoring
Architecture Overview
SmokePing is a latency monitoring tool that visualizes network performance through RRD (Round-Robin Database) graphs. Developed in Perl by Tobi Oetiker, it relies on RRDtool for data storage and graph generation, utilizing probing utilities like fping for ICMP-based measurements.
Core components include:
- Master Daemon: Schedules polling cycles and aggregates data
- Probe Modules: Executable plugins for different measuremant types (ICMP, TCP, DNS)
- RRD Storage: Time-series database files retaining historical metrics
- Web Frontend: CGI interface generating dynamic visualization
Installation
On Debian/Ubuntu systems:
sudo apt update && sudo apt install -y smokeping tcptraceroute
During installation, configure Postfix as "Local only" when prompted for mail relay options. For SSL package updates, select "Yes" to enable automatic service restarts.
Enable required Apache modules and set service autostart:
sudo a2enmod cgi
sudo systemctl enable --now smokeping apache2
sudo ufw allow 80/tcp
Access the interface at http://<server-ip>/smokeping/. If the index doesn't load automatically, add smokeping.cgi to DirectoryIndex in /etc/apache2/mods-available/dir.conf.
Configuration Structure
SmokePing uses Config::Grammar syntax with hierarchical sections. Key files reside in /etc/smokeping/config.d/:
Core Parameters (General)
Defines operational metadata:
owner: System administrator identitycontact: Alert notification addressmailhost: SMTP relay for notificationssyslogfacility: Logging destination
Data Retention (Database)
Controls RRD archive parameters:
*** Database ***
step = 300
pings = 20
AVERAGE 0.5 1 1008
AVERAGE 0.5 12 4320
MAX 0.5 12 4320
Where columns represent: consolidation function, unknown data tolerance, primary data points per row, total rows. The default 300-second step with 20 pings per cycle provides 5-minute granularity.
Measurement Plugins (Probes)
Define polling methodologies:
*** Probes ***
+ FPing
binary = /usr/bin/fping
packetsize = 64
++ FPingExternal
sourceaddress = 203.0.113.10
step = 60
Sub-probes inherit parent attributes but can override specific parameters like source IP or polling intervals.
Monitoring Targets (Targets)
Specify endpoints for observation:
*** Targets ***
probe = FPing
+ NetworkInfrastructure
menu = Network
title = Core Infrastructure
++ GatewayRouter
host = 192.168.1.1
alerts = packetloss
slaves = remoteprobe1
Alert Configuration
SmokePing supports pattern-based alerting through regular expression matching against historical data points.
Pattern Syntax
Define state transitions from oldest to newest readings:
>0%,*12*,>0%: Matches intermittent packet loss<10,<10,>100: Detects latency spikes from <10ms to >100ms==U: Identifies complete unreachability
Notification Methods
Configure in /etc/smokeping/config.d/Alerts:
*** Alerts ***
to = |/usr/local/bin/notify.sh
from = monitoring@example.com
+ latencyspike
type = rtt
pattern = <50,<50,<50,>200
comment = Sudden latency increase detected
Custom notification script example:
#!/bin/bash
ALERT_TYPE="${1}"
TARGET_NAME="${2}"
LOSS_PATTERN="${3}"
RTT_VALUE="${4}"
HOSTNAME="${5}"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
if [[ "${LOSS_PATTERN}" == "loss: 0%" ]]; then
SUBJECT="RESOLVED: ${TARGET_NAME} connectivity restored"
else
SUBJECT="ALERT: ${TARGET_NAME} - ${ALERT_TYPE}"
fi
cat <<EOF | mail -s "${SUBJECT}" admin@example.com
Alert: ${ALERT_TYPE}
Host: ${HOSTNAME}
Target: ${TARGET_NAME}
Loss: ${LOSS_PATTERN}
Latency: ${RTT_VALUE}
Time: ${TIMESTAMP}
EOF
TCP Connect Monitoring
For services where ICMP is filtered, TCPPing measures application-layer responsiveness.
Installation requirements:
sudo apt install tcptraceroute
sudo wget -O /usr/local/bin/tcpping \
https://raw.githubusercontent.com/deajan/tcpping/master/tcpping
sudo chmod +x /usr/local/bin/tcpping
Probe configuration:
*** Probes ***
+ TCPPing
binary = /usr/local/bin/tcpping
forks = 5
timeout = 15
pings = 10
port = 443
Target assignment overrides default ICMP probes:
++ WebServer
probe = TCPPing
host = web.example.com
port = 443
Web Interface Security
Implement Basic Authentication using Apache's htpasswd:
sudo htpasswd -c /etc/smokeping/htpasswd admin
Update Apache configuration (/etc/apache2/conf-available/smokeping.conf):
<Directory "/usr/share/smokeping/www">
AuthType Basic
AuthName "SmokePing Access"
AuthUserFile /etc/smokeping/htpasswd
Require valid-user
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
Troubleshooting
Graph Label Rendering Issues If characters display as blocks or question marks:
- Install font packages:
sudo apt install fonts-wqy-zenhei fonts-dejavu
- Verify Presentation configuration uses UTF-8:
*** Presentation ***
charset = utf-8
- Clear cached images:
sudo rm -rf /var/cache/smokeping/images/*
sudo systemctl restart smokeping
Permission Denied Errors Ensure secret files for distributed monitoring maintain strict permissions:
sudo chmod 600 /etc/smokeping/smokeping_secrets
sudo chown smokeping:smokeping /etc/smokeping/smokeping_secrets