在Ubuntu 20.04上使用SmokePing监控延迟

介绍

在较高级别,SmokePing检查网络延迟。 在多个Vultr位置设置SmokePing可以帮助在网络问题发生之前解决它们。 SmokePing模拟客户连接,并且可以显示内部可能看不到的外部问题和网络问题。

先决条件

一个DNS域。 本指南使用 smokeping.example.com。 Vultr云服务器。 本指南使用Ubuntu 20.04。

1.启动新的Vultr Cloud Compute实例

SmokePing最有效 在与其监视的服务器相同的位置。 这种安排复制了大多数用户在使用您的应用程序和访问您的网站时看到的延迟。 本指南使用具有25GB SSD和IPv4连接的Ubuntu 20.04 x64服​​务器。 确保HTTP和HTTPS通信可以通过防火墙到达实例。

2.创建一个DNS记录

创建一个A记录,将您的域名指向您的云计算实例的IP地址。

3.安装所需的库

SmokePing需要Web服务器,并且本指南使用Nginx。 SmokePing还需要通用网关接口(CGI)脚本。 该指南实现了fcgiwrap。 要安装SmokePing和fcgiwrap以及更新服务器,请运行以下命令:

# apt update -y
# apt dist-upgrade -y
# apt install nginx -y
# apt install fcgiwrap -y
# apt install smokeping -y

当Postfix安装程序提示时,选择 Internet Site。 当提示您输入 mail name,保留服务器名称。 将用于邮局主管和根的邮件保留为空白。

4.配置fcgiwrap

CGI包装器需要与Nginx交互。 使用默认配置配置Nginx。

# cp /usr/share/doc/fcgiwrap/examples/Nginx.conf /etc/nginx/fcgiwrap.conf

5.配置Nginx

作为Nginx的最佳做法,请删除默认网站。

# sudo rm /etc/nginx/sites-enabled/default

创建一个 no-site 网站,可回答发往主机的任何请求,这些请求不包含正确的DNS名称。

# sudo nano /etc/nginx/sites-available/no-site

将以下配置粘贴到文件中。

server {
    listen 80 default_server deferred;
    listen [::]:80 default_server deferred;
    server_name _;

    # Return 444 (No Response)
    return 444;
}

保存文件并退出。

为SmokePing创建站点配置。

# sudo nano /etc/nginx/sites-available/smokeping

将以下配置粘贴到文件中。 改变 server_name 指令以匹配您的DNS记录名称。

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 https://$server_name/smokeping/smokeping.cgi;
    }
}

保存文件并退出。

将两个配置文件链接到Nginx配置。

# 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

重新启动Web服务器。

# sudo service nginx restart

Nginx应该重新启动而没有任何错误。 如果返回任何错误,请通过运行以下命令检查语法:

# sudo nginx -t

使用LetsEncrypt启用HTTPS。 将示例值替换为您的DNS名称和电子邮件地址。

# sudo apt install -y certbot python3-certbot-nginx
# sudo certbot --non-interactive --redirect --agree-tos --nginx -d smokeping.example.com -m [email protected]

完成此配置后,您的Web服务器即可使用HTTPS。

6.配置SmokePing

最后一步是将SmokePing配置为使用HTTPS并ping客户端。

编辑常规配置

# sudo nano /etc/smokeping/config.d/General

更改以下值:

owner -将此设置为您的名字。
contact -将此设置为您的电子邮件。
mailhost -设置为 localhost
cgiurl -设置为 https://smokeping.example.com/smokeping.cgi 并改变 smokeping.example.com 到您的DNS记录。 保存文件并退出。

编辑目标并添加受监视的主机:

# sudo nano /etc/smokeping/config.d/Targets

将以下内容附加到文件末尾(以及所有其他主机):

网站菜单=网站监控标题=网站监控

++ example1探针= FPing主机= one.example.com标题=示例一

++ example2 probe = FPing主机= two.example.com title =示例2

保存文件并退出。

重新启动SmokePing守护程序。

# sudo service smokeping restart

7.配置Postfix以使用SendGrid

默认情况下,Postfix尝试直接发送邮件,这是不安全的。 请按照以下步骤将SendGrid配置为邮件中继。

[Sign up for a free SendGrid account]。(https://signup.sendgrid.com/)
登录到SendGrid仪表板
导航到设置-> API密钥。 点击右上角的“创建API密钥”。 命名API密钥,然后选择“受限访问”。 向下滚动到“邮件发送”,然后单击最右边的点。 点击“创建并查看”。

记下您的API密钥,它将显示一次。

编辑主Postfix配置文件。

# sudo nano /etc/postfix/main.cf 

将这些行添加到末尾。

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

保存配置。

创建一个密码文件。

# sudo nano /etc/postfix/sasl_passwd

添加以下行。 更换 API-KEY-GOES-HERE 与您的API密钥。

[smtp.sendgrid.net]:587 apikey:API-KEY-GOES-HERE

保存并退出文件。

更改权限,加密文件,然后重新启动Postfix。

# sudo chmod 600 /etc/postfix/sasl_passwd
# sudo postmap /etc/postfix/sasl_passwd
# sudo systemctl restart postfix

结论

您可以使用SmokePing来绘制在不同Vultr位置运行的服务器之间的延迟图表,并将其配置为在中断期间发送电子邮件警报。 SmokePing使您可以从世界各地更好地了解您的体系结构。

参考文献

SmokePing配置
SendGrid
Nginx初学者指南

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

相关阅读:

Posted in: LinuxTags: