At a high level, SmokePing checks network latency. Setting up SmokePing in multiple Vultr locations can help address network issues with cloud compute services before they happen. SmokePing emulates customer connections and can show external problems and network issues that might not be visible internally.
A DNS domain. This guide uses smokeping.example.com
.
A Vultr cloud server. This guide uses Ubuntu 20.04.
SmokePing has the ability to monitor in an active passive format. This allows views from different locations. The configuration and steps below depict a single location and are meant to be used as a starting point for developing a more robust monitoring platform. The first location should be where your user base is more heavily concentrated or what suits your use-case. This guide uses a Ubuntu 20.04 x64 server with 25GB SSD and IPv4 connectivity. Ensure that HTTP and HTTPS traffic can pass through the firewall to the instance.
Create an A record that points your domain name to the IP address of your cloud compute instance.
SmokePing requires a web server, and this guide uses Nginx. SmokePing also requires Common Gateway Interface (CGI) scripting. The guide implements fcgiwrap. To install SmokePing and fcgiwrap, as well as update the server, run these commands:
# apt update -y
# apt dist-upgrade -y
# apt install nginx -y
# apt install fcgiwrap -y
# apt install smokeping -y
When prompted by the Postfix installer, choose Internet Site
. When prompted for mail name
, leave the name of the server. Leave the mail for postmaster and root blank.
The CGI wrapper needs to interact with Nginx. Configure Nginx with the default configuration.
# cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf
As a best practice for Nginx, delete the default web site.
# sudo rm /etc/nginx/sites-enabled/default
Create a no-site
web site, which answers any requests destined for the host that do not contain the correct DNS name.
# sudo nano /etc/nginx/sites-available/no-site
Paste the following configuration into the file.
server {
listen 80 default_server deferred;
listen [::]:80 default_server deferred;
server_name _;
# Return 444 (No Response)
return 444;
}
Save the file and exit.
Create a site configuration for SmokePing.
# sudo nano /etc/nginx/sites-available/smokeping
Paste the following configuration in the file. Change the server_name
directive to match your DNS record name.
server {
listen 80;
listen [::]:80;
server_name smokeping.example.com;
location = /smokeping/smokeping.cgi {
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;
}
location / {
return 301 http://$server_name/smokeping/smokeping.cgi;
}
}
Save the file and exit.
Link the two configuration files to the Nginx configuration.
# ln -s /etc/nginx/sites-available/smokeping /etc/nginx/sites-enabled/smokeping
# ln -s /etc/nginx/sites-available/no-site /etc/nginx/sites-enabled/no-site
Restart the web server.
# sudo service nginx restart
Nginx should restart without any errors. If it returns any errors, check the syntax by running:
# sudo nginx -t
Enable HTTPS with LetsEncrypt. Replace the example values with your DNS name and email address.
# sudo apt install -y certbot python3-certbot-nginx
# sudo certbot --non-interactive --redirect --agree-tos --nginx -d smokeping.example.com -m admin@example.com
With this configuration completed, your web server is available with HTTPS.
The final step is configuring SmokePing to use HTTPS and to ping clients.
Edit the General configuration
# sudo nano /etc/smokeping/config.d/General
Change the following values:
owner
- Set this to your name.
contact
- Set this to your email.
mailhost
- Set this to localhost
.
cgiurl
- Set this to https://smokeping.example.com/smokeping/smokeping.cgi
and change smokeping.example.com
to your DNS record.
Save the file and exit.
Edit the Targets and add monitored hosts:
# sudo nano /etc/smokeping/config.d/Targets
Append the following to the end of the file (as well as any extra hosts):
+ websites
menu = Website Monitoring
title = Website Monitoring
++ example1
probe = FPing
host = one.example.com
title = Example One
++ example2
probe = FPing
host = two.example.com
title = Example Two
Save the file and exit.
Restart the SmokePing daemon.
# sudo service smokeping restart
By default, Postfix attempts to send mail directly, which is insecure. Follow these steps to configure SendGrid as the mail relay.
Click "Create API Key" in the upper right.
Name the API Key and choose "Restricted Access".
Click "Create and View".
Make a note of your API key, it will be shown one time.
Edit the main Postfix configuration file.
# sudo nano /etc/postfix/main.cf
Add these lines to the end.
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:587
Save the configuration.
Create a password file.
# sudo nano /etc/postfix/sasl_passwd
Add the following line. Replace API-KEY-GOES-HERE
with your API key.
[smtp.sendgrid.net]:587 apikey:API-KEY-GOES-HERE
Save and exit the file.
Change the permissions, encrypt the file, and restart Postfix.
# sudo chmod 600 /etc/postfix/sasl_passwd
# sudo postmap /etc/postfix/sasl_passwd
# sudo systemctl restart postfix
You can use SmokePing to graph latency between your servers running in different Vultr locations and configure it to send email alerts during outages. SmokePing gives you a better overview of your architecture from various points around the world.