跳转至

Smokeping Slave 安装

概述

master/slave 概念使所有smokeping 的 probe 能够远程运行,从网络中的多个位置监测链路。一个主节点可以控制多个从节点

Slave 通过正常的smokeping 网络界面与master smokeping 服务器通信。在初始启动时,每个从站连接到主服务器并请求其分配。当从机进行了一轮探测时,它再次连接到主站以传递结果

如果从站的分配发生变化,主站将在从站发送结果后告知从站。

主设备和从设备通过提供消息的HMAC-MD5代码 和共享密钥来签署其消息。可选地,整个通信可以在ssl上运行。

Bash
1
2
3
4
5
6
7
8
[slave 1]     [slave 2]      [slave 3]
    |             |              |
    +-------+     |     +--------+
            |     |     |
            v     v     v
          +---------------+
          |    master     |
          +---------------+

从站是一个正常的smokeping 实例设置,其中配置来自主站而不是本地配置文件。从站尝试在每轮探测后联系主服务器,并提供其结果。如果无法访问主服务器,结果将与下一轮结果一起发送到服务器。结果将以Perl存储形式存储在文件中,以便它们在重新启动smokeping 实例后继续存在。

从节点配置

组件正常安装

RRDtool 1.2.x或更高版本

FPing(可选)

EchoPing(可选)

Curl (可选)

dig(可选)

SSH(系统自带安装)

Webserver

Perl 5.10.1或更高版本

Slave 配置

smokeping-2.7.3.tar.gz

创建数据目录并添加权限

Bash
1
2
3
mkdir -p /usr/local/smokeping/{cache,data,var}
cd /usr/local/smokeping/
chown -R apache.apache cache data var htdocs

fcgi文件重命名

Bash
cd /usr/local/smokeping/htdocs
mv smokeping.fcgi.dist smokeping.fcgi

从节点配置密钥(只有一行密钥),修改600权限

Bash
1
2
3
echo 123456 > /usr/local/smokeping/etc/smokeping_secrets.dist
chmod 600 /usr/local/smokeping/etc/smokeping_secrets.dist
chown -R apache.apache /usr/local/smokeping/etc/smokeping_secrets.dist

主节点配置

主节点配置密钥

(slave-name:secret),修改600权限

Bash
1
2
3
echo "slavetest:123456" >> /usr/local/smokeping/etc/smokeping_secrets.dist
chmod 600 /usr/local/smokeping/etc/smokeping_secrets.dist
chown -R apache.apache /usr/local/smokeping/etc/smokeping_secrets.dist

主节点config配置

Bash
* General *
concurrentprobes = yes  //如果启动从节点,需要将并发probe开启
* Slaves *
secrets=/usr/local/smokeping/etc/smokeping_secrets.dist  //指定密钥文件路径
+slavetest   //定义从节点
display_name=slavetest    //从节点名称
color=0000ff
* Targets *
slaves = slavetest  //可以定义全局从节点名称,如果有多个可以 slaves = slave1 slave2 空格隔开,如果配置全局从节点,则所有target都将会出现主从数据
- slavetest
  menu = slavetest
  title = slavetest
++ qq
menu = qq
title = qq.com
slaves = slavetest  //指明slave 节点
host = qq.com

启动服务

重启master

Bash
/usr/local/smokeping/bin/smokeping --restart --logfile=/var/log/smokeping.log

启动slave

启动服务(关键一步就在启动服务)

Bash
1
2
3
4
5
6
/usr/local/smokeping/bin/smokeping \
--master-url=http://192.168.68.36/smokeping \
--cache-dir=/usr/local/smokeping/cache/ \
--shared-secret=/usr/local/smokeping/etc/smokeping_secrets.dist \
--slave-name=slavetest \
--logfile=/var/log/smokeping_slave.log

常见问题

如果slave节点启动报如下错误?

Bash
WARNING Master said 401 Unauthorized
ERROR: we did not get config from the master. Maybe we are not configured as a slave for any of the targets on the master ?

是因为master 节点添加了登录验证,即之前master apache 配置的AuthUserFile 从smaleping的启动脚本参数看,让slave带上账号密码去访问master的cgi是没可能了,没这个功能,只能是去掉验证环节了,可以从3方面解决:

Bash
1
2
3
1.完全去掉smakeping页面的登录验证
2.去掉smakeping页面的登录验证,用iptables限制允许访问的IP
3.在nginx vhost配置上做IP白名单,使slave服务器访问URL时不用登录验证;非白名单IP访问时依然需要验证账号密码

这里在apache 修改配置

第一种方法,允许所有的用户访问,此方法不安全,配置如下:

Bash
<Directory "/usr/local/smokeping">
AllowOverride None
Options All
AddHandler cgi-script .fcgi .cgi
Require all granted
Order allow,deny
Allow from all
AuthName "Smokeping"
AuthType Basic
AuthUserFile /usr/local/smokeping/htdocs/htpasswd
Require valid-user
DirectoryIndex smokeping.fcgi
</Directory>

第二种方法,禁止所有的用户访问,只允许指定IP访问,此方法安全,配置如下:

Bash
<Directory "/usr/local/smokeping">
AllowOverride None
Options All
AddHandler cgi-script .fcgi .cgi
Require all denied
Require ip 192.168.68.37
Require ip 192.168.123.232
Require all granted
Order allow,deny
Allow from all
AuthName "Smokeping"
AuthType Basic
AuthUserFile /usr/local/smokeping/htdocs/htpasswd
Require valid-user
DirectoryIndex smokeping.fcgi
</Directory>

重启http

Bash
systemctl restart httpd