smokeping 安装配置使用

smokeping 安装配置使用

2016-09

环境

时间:2016-08

系统:CentOS 6.5 x64

软件版本:smokeping-2.6.11

smokeping + nginx

依赖包

软件包

fping wget dig curl bind-utils 
rrdtool
gcc make

perl模块

perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-RadiusPerl perl-IO-Socket-SSL perl-Socket6 perl-FCGI perl-RRD-Simple  perl-CPAN rrdtool-perl perl-CGI-SpeedCGI perl-ExtUtils-MakeMaker
FCGI
CGI
CGI::Fast
Config::Grammar
Digest::HMAC_MD5
Net::Telnet
Net::OpenSSH
Net::SNMP
Net::LDAP
Net::DNS
IO::Pty(perl-IO-Pty-Easy.noarch)
LWP

smokeping提供了自动安装所需perl模块的脚本,使用方法

./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty

可惜源站在国外,下载经常会失败。

下载失败的话有两种比较方便的模块安装方法

  1. 修改cpan源
    vim /usr/share/perl5/CPAN/Config.pm
    'urllist' => [], -> 'urllist' => [q[http://mirrors.163.com/cpan/]],
    然后手动通过cpan安装模块
  2. yum安装perl模块
    如果不知道模块对应的rpm包名称,yum search + grep找···

安装

./configure --prefix=/usr/local/smokeping

如果报错,提示缺少依赖的包或perl模块,缺啥补啥···

如果configure过程正常,会看到


** Ready to install Smokeping ******************************

   Settings:

     PERL5LIB = not set
     PERL = /usr/bin/perl

   The Smokeping Makefiles use GNU make functionality.
   Continue installation with

     /usr/bin/gmake install

/usr/bin/gmake install

安装完毕后,需要建立三个目录mkdir {data,cache,var},并确保smokeing进程具有这些目录的读写权限。这些目录一般建立在smokeping的安装目录下,或者htdocs下。

OK 安装完毕 配置之后就可以使用

配置文件在安装目录的etc下

可执行脚本在安装目录的bin下

基本配置

config

主配置文件是etc目录下的config

按照本文的安装路径,配置文件为/usr/local/smokeping/etc/config

如果etc目录下没有config,可以以config.dist为模板拷贝一份cp config.dist config

讲一下常用的配置参数(下面只摘取了部分配置文件内容,不是一个完整的配置文件)

** General ***
http://smokeping.xxx.com/smokeping.cgi  # 访问smokeping网页的URL,必须与web服务器配置一致

*** Database ***
step     = 300  # ping检测的周期,单位s
pings    = 100  # 每个周期内ping的次数
                # 调整step和pings参数 会使之前的监控记录失效(?)

*** Presentation ***
charset = utf-8 # 指定字符集为UTF-8。默认没有该参数,网页上显示的中文是乱码

+ overview      # overview视图的尺寸
width = 1000
height = 150
range = 12h

+ detail        # detail视图的尺寸
width = 1000
height = 200
unison_tolerance = 2

                        # 详细视图中要显示的几个图表,前面的字符串是标题,后面的数字+单位控制时间范围
"Last 3 Hours"    1h    # 最近1小时的丢包率
"Last 24 Hours"   24h
"Last 7 Days"    7d     # 最近7天的丢包率
"Last 30 Days"   30d

*** Slaves ***  # (单节点模式可以不配置slave)
secrets=/usr/local/smokeping/etc/smokeping_secrets  # 用于验证slave的密码文件

+192.168.X.X                # 一个slave节点的配置样例
display_name = 192.168.X.X
color = 00ff00              # slave的丢包率曲线颜色(要与其他节点的曲线颜色有区别)

*** Targets ***     # 配置要监控的目标

+ IDC1
menu = IDC1         # 浏览器左栏的节点名
title = IDC_1       # 标题
remark = IDC_1      # 注释

++ host1
menu = host1
title = host_1
host = 192.168.1.1

++ host2
menu = host2
title = host_2
host = 192.168.1.2
slaves=192.168.X.X  # (单节点模式可以不配置slave)
                    # 这样,在浏览器的左栏会有一个树状的监控对象列表。根节点是IDC1,展开之后可以看到host1、host2。点击host1、host2可以看到详细的监控记录。 其中host2除了有master ping host2的监控图、还有slave ping host2的监控图

启动

运行smokeping

./bin/smokeping

bin是smokeping安装目录的一个子目录

这里的smokeping是一个shell脚本,不带参数运行时,会作为守护进程启动

./bin/smokeping --help可以查看更多参数和用法

其他常用命令

smokeping --restart 重启

smokeping --reload 重载。修改smokeping配置后可以通过reload使配置生效

smokeping --debug-daemon 以调试模式运行

WEB服务器配置

本次使用的web服务器是nginx

虚拟主机(vhost)的配置如下,仅供参考

server
{
      listen       80;
      server_name  smokeping.xxx.com;
      root  /usr/local/smokeping/htdocs/;
      index smokeping.fcgi
      access_log /var/log/smokeping_access.log;
      error_log  /var/log/smokeping_error.log;

      location ~ .*\.(cgi|fcgi)$ 
{
          root  /usr/local/smokeping/htdocs/;
          fastcgi_index smokeping.fcgi;
          fastcgi_pass unix:/tmp/perl-cgi.sock;

          fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
          include fcgi.conf;    # fcgi配置的文件名,安装fcgi支持时自定
      }
}

web服务器必须支持fcgi(perl、fcgi部署以及如何让nginx支持fcgi,此处不讲解)

该配置使用了“smokeping.xxx.com"作为server name,访问该站点时通过域名访问。没有条件做dns解析的话可以做host。

主从

做主从模式,可以在smokeping页面上看到不同节点(master和各slave)ping目标的检测情况,有助于判断故障所在的网络节点

工作模式

多节点的主从模式中,只有master节点上有监控配置文件。slave节点只需要配置验证密码(用于master-slave之间的验证)、在启动smokeping时附上相应的启动参数(参数中包括master的URL等),slave就会在找到master,从master上获取需要检测的节点,在本机(slave)进行ping检测,并将检测结果反馈给master。

master-slave之间信息交流的方式,是通过URL(浏览器访问smokeping的URL)进行的。 所以slave必须能正常访问master端的URL

slave软件安装

从机只需要安装smokeping,不需要web服务器。当然安装smokeping之前需要装好其依赖的软件和perl模块。安装过程与单节点模式的安装过程一样,不赘述

注意除了编译安装smokeping外,也要建立data,var,cache目录

slave配置

slave只需要配置一个密码文件,用于连接master时的验证。不需要做其他配置。

创建密码文件(文件名自定)

echo "******" > /usr/local/smokeping/etc/smokeping_slave_secrets
chmod 600 smokeping_slave_secrets

master配置

创建密码文件

vim smokeping_secrets

${slave_1节点名称}:*******
${slave_2节点名称}:*******

master的密码文件可以配有多个slave的节点和密码,每个以":"分隔的节点名称和密码一行 (这点与slave不同,slave的密码文件中只有一个密码)

修改主配置文件

vim etc/config

# 指定使用的密码文件
*** Slaves ***
secrets=/usr/local/smokeping/etc/smokeping_secrets

# 指定要让slave检测哪些目标
+ IDC1
menu = IDC1
title = DIC1
remark = IDC机房1号
slaves = ${slave节点名称}

两点说明

  1. 只有当slave节点在某些目标的检测配置中被使用,slave端才能成功连上master并进行检测工作
  2. 可以把一个slave配置在一个底层节点上(例如一个受监控的IP),使slave检测该服务器
    也可以把slave配置在一个上层节点上,使slave检测该节点下属的所有服务器

slave启动

bin/smokeping --master-url=http://smokeping.master.com/smokeping.fcgi --cache-dir=/usr/local/smokeping/htdocs/cache/ --shared-secret=/usr/local/smokeping/etc/smokeping_slave_secrets --slave-name=192.168.X.X 

Oh 参数太长,容易断行···

注意几点

--slave-name 节点名称,必须与master端配置的名称一致
--shared-secret=/usr/local/smokeping/etc/smokeping_slave_secrets 指定要使用的密码文件
--cache-dir 必须让进程具有读写权限。smokeping.pid会存放在该目录下

正常启动时的输出

Sent data to Server and got new config in response.
Note: logging to syslog as local0/info.
Daemonizing /usr/local/smokeping/bin/smokeping ...

进阶-优化

设置登录密码

问题

smokeping自身是没有访问控制功能的。能到达master服务器的用户都可以访问监控页面,存在安全隐患

处理

修改nginx的vhost配置,使访问该站点需要验证账户密码

生成验证文件

需要借助apache的工具htpasswd

htpasswd -c ./passwd admin

按照提示输入两次密码,之后会生成一个包含账号(这里的账号是admin)密码(密文)的文件passwd,笔者把生成的文件放到smokeping安装目录的htdocs下面,并设置权限chmod 600 passwd

修改nginx vhost配置

在location{}中加入两行

auth_basic            Restricted;
auth_basic_user_file /usr/local/smokeping/htdocs/passwd;

重启nginx使配置生效,之后登录便会要求验证账号密码

处理主从验证

问题

如果在master的站点配置账号密码验证,smokeping slave端就无法访问master的URL。

启动slave会得到报错

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端的日志也会有报错

2016/09/05 02:05:36 [error] 7667#0: *1774986 no user/password was provided for basic authentication, client: 192.168.X.X, server: xxx.com, request: "POST /smokeping.fcgi HTTP/1.1", host: "xxx.com"

从两端的日志可以得出结论:

master端的web服务器收到来自slave端的连接请求时,要求使用账号密码登录,而slave的请求不带账号密码,所有web服务器拒绝了本次访问

slave由于连不上master,获取不到master上的smokeping配置信息,就判断master上并没有配置该slave,并退出结束进程

处理

从smaleping的启动脚本参数看,让slave带上账号密码去访问master的cgi是没什么希望的了,人家没这功能

只能去掉网站验证的环节了

有几种去掉验证的方式:

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

个人推荐最后一种方法。既实现了业务需求,对安全性的影响也较低

nginx vhost配置IP白名单的方法

vim nginx/vhost/smokeping.conf

在location{}中加入以下部分

satisfy any;
allow 192.168.X.X;  # slave服务器的IP
deny all;

reload nginx使配置生效即可

以后用slave的IP访问该站点,不再需要验证账号密码

关于nginx访问控制(allow、deny等)的更多知识可以学习ngx_http_access_module

其他

关于图表

图中彩色的曲线,是取ping的延时的中位数画出的

posted on 2016-09-11 10:38  IceCrystal27315  阅读(...)  评论(...编辑  收藏

导航

统计