linux下构建Smokeping网络监控平台
一. Smokeping 简介
1.1 Smokeping简介:
Smokeping 是rrdtool 的作者Tobi Oetiker 的作品,是用Perl 写的,主要是监视网络性能,包括常规的ping,用echoping监控www 服务器性能,监视dns 查询性能,监视ssh 性能等。底层也是rrdtool做支持,特点是画的图非常漂亮,网络丢包和延迟用颜色和阴影来表示。
1.2 Smokeping 架构组件
Smokeping 有以下组件组成:RRDtool、Fping、Echoping、Curl、Dig、SSh、Perl 模块,Perl、SpeedyCGI、Apache 等。
master/slave 的工作方式,可以在多个节点收集同一个监测点的数据;
1.3 Smokeping 相关资源
1> Smokeping 官方网站:http://oss.oetiker.ch/smokeping/2> Smokeiping 相关文档下载:http://down.51cto.com/data/432197
3> Smokeiping 相关软件下载地址:http://down.51cto.com/data/432183
二.Smokeping 安装
2.1 准备工作[root@smokeping ~]# uname -a
Linux smokeping.junjie.com 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux
[root@smokeping ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
[root@smokeping ~]# perl -v
This is perl, v5.8.8 built for i386-linux-thread-multi
….先暂时关闭iptables以及selinux刨除其他影响
构建本地yum数据库
[root@smokeping ~]# cat /etc/yum.repos.d/server.repo
[rhel-server]name=Red Hat Enterprise Linux server
baseurl=file:///mnt/cdrom/Server/ enabled=1 gpgcheck=1 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release [rhel-vt]name=Red Hat Enterprise Linux vt
baseurl=file:///mnt/cdrom/VT/ enabled=1 gpgcheck=1 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release [rhel-cluster]name=Red Hat Enterprise Linux cluster
baseurl=file:///mnt/cdrom/Cluster/ enabled=1 gpgcheck=1 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release [rhel-clusterstorage]name=Red Hat Enterprise Linux clusterstorage
baseurl=file:///mnt/cdrom/ClusterStorage/ enabled=1 gpgcheck=1 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release[root@smokeping ~]#
[root@smokeping ~]# mkdir /mnt/cdrom
[root@smokeping ~]# mount /dev/cdrom /mnt/cdrom/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@smokeping ~]# yum list all
2.2 安装rrdtoolRRDTool 是由Tobias Oetiker 开发的开源软件,它使用RRD(Round Rebin Databases)作为存储格式,Round robin 是一种处理定量数据以及当前元素指针的技术,RRDTool 主要用来跟踪对象的变化情况,生成改对象变化的趋势图。
[root@smokeping ~]# cd /root/smokeping/
[root@smokeping smokeping]# ls
cgilib-0.5.tar.gz
CGI-SpeedyCGI-2.22.tar.gz echoping-6.0.2.tar.gz fping.tar.gz rrdtool-1.4.4.tar.gz smokeping-2.4.2.tar.gz# 安装依赖的软件包:
[root@smokeping smokeping]# yum -y install freetype freetype-devel libpng libpng-devel gd gd-devel libxml2 libxml2-devel libiconv libiconv-devel pango pango-devel qpixman qpixman-devel glib glib-devel cairo cairo-devel libart* gettext gettext-devel libjpeg libjpeg-devel perl-XML-Simple.noarch perl-Crypt-SSLeay perl-Digest-HMAC
使rrdtool支持中文
[root@smokeping smokeping]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"[root@smokeping smokeping]# export LANG="zh_CN.UTF-8"
[root@smokeping smokeping]# yum -y install fonts-chinese
安装rrdtool[root@smokeping smokeping]# tar -zxvf rrdtool-1.4.4.tar.gz -C /usr/local/src/
[root@smokeping smokeping]# cd /usr/local/src/rrdtool-1.4.4/
[root@smokeping rrdtool-1.4.4]# ls
[root@smokeping rrdtool-1.4.4]# sed -i 's/setlocale(LC_NUMERIC, "C")/setlocale(LC_ALL, "zh_CN.UTF-8")/g' src/rrd_graph.c
[root@smokeping rrdtool-1.4.4]# sed -i 's/setlocale(LC_NUMERIC, old_locale)/setlocale(LC_ALL, old_locale)/g' src/rrd_graph.c
[root@smokeping rrdtool-1.4.4]# ./configure --prefix=/usr/local/rrdtool [root@smokeping rrdtool-1.4.4]# make && make install
执行rrdtool 命令,如果出现以下输出,表示安装成功,并列出了该命令的使用帮助。[root@smokeping rrdtool-1.4.4]# cd /usr/local/rrdtool/bin/
[root@smokeping bin]# ll
total 400-rwxr-xr-x 1 root root 95492 Jun 17 09:50 rrdcached
-rwxr-xr-x 1 root root 46362 Jun 17 09:50 rrdcgi
-rwxr-xr-x 1 root root 41520 Jun 17 09:50 rrdtool
-rwxr-xr-x 1 root root 207192 Jun 17 09:50 rrdupdate
[root@smokeping bin]# ./rrdtool
RRDtool 1.4.4 Copyright 1997-2010 by Tobias Oetiker <tobi@oetiker.ch>
Compiled Jun 17 2012 09:50:49Usage: rrdtool [options] command command_options
Valid commands: create, update, updatev, graph, graphv, dump, restore,
last, lastupdate, first, info, fetch, tune,
resize, xport, flushcachedRRDtool is distributed under the Terms of the GNU General
Public License Version 2. (www.gnu.org/copyleft/gpl.html)
For more information read the RRD manpages
[root@smokeping bin]#
2.3安装Fping和Echoping[root@smokeping bin]# cd /root/smokeping/
[root@smokeping smokeping]# tar -zxvf fping.tar.gz -C /usr/local/src/
[root@smokeping smokeping]# cd /usr/local/src/fping-2.4b2_to/
[root@smokeping fping-2.4b2_to]# ./configure
[root@smokeping fping-2.4b2_to]# make && make install
[root@smokeping fping-2.4b2_to]# ln -s /usr/local/fping/sbin/fping /usr/sbin/fping
[root@smokeping fping-2.4b2_to]#cd /root/smokeping/
[root@smokeping smokeping]#tar -zxvf echoping-6.0.2.tar.gz -C /usr/local/src/[root@smokeping smokeping]#cd /usr/local/src/echoping-6.0.2
[root@smokeping echoping-6.0.2]# ./configure
[root@smokeping echoping-6.0.2]# make && make install
2.4 安装cgilib和SpeedyCGI[root@smokeping echoping-6.0.2]# cd /root/smokeping/
[root@smokeping smokeping]# tar -zxvf cgilib-0.5.tar.gz -C /usr/local/src/
[root@smokeping smokeping]# cd /usr/local/src/cgilib-0.5/
[root@smokeping cgilib-0.5]# lscgi.5 cgiGetCookies.3 cgiRedirect.3 cookies.txt
cgi.c cgiGetValue.3 cgiSetHeader.3 CREDITS
cgiDebug.3 cgiGetVariables.3 cgiSetType.3 jumpto.c
cgiFree.3 cgi.h cgitest.c Makefile
cgiFreeList.3 cgiHeader.3 CHANGES readme
cgiGetCookie.3 cgiInit.3 cookies.c
[root@smokeping cgilib-0.5]# [root@smokeping cgilib-0.5]# make[root@smokeping cgilib-0.5]# cp libcgi.a /usr/local/lib
[root@smokeping cgilib-0.5]# cp cgi.h /usr/include/
[root@smokeping cgilib-0.5]# cd /root/smokeping/
[root@smokeping smokeping]# tar -zxvf CGI-SpeedyCGI-2.22.tar.gz -C /usr/local/src/
[root@smokeping smokeping]# cd /usr/local/src/CGI-SpeedyCGI-2.22/
[root@smokeping CGI-SpeedyCGI-2.22]# lsCOPYING Makefile.PL contrib mod_speedycgi speedy_backend util
Changes README docs mod_speedycgi2 speedy_dump
MANIFEST README.html lib speedy src
[root@smokeping CGI-SpeedyCGI-2.22]# perl Makefile.PL
[root@smokeping CGI-SpeedyCGI-2.22]# make[root@smokeping CGI-SpeedyCGI-2.22]# make install
2.5 安装Perl模块 以下全是Smokeping 需要的perl 模块。 [root@smokeping CGI-SpeedyCGI-2.22]# cd[root@smokeping ~]# yum install -y perl-libwww-perl perl-IO-Socket-SSL perl-Net-Telnet perl-Socket6 perl-Net-DNS perl-LDAP perl-libwww-perl perl-IO-Socket-SSL
2.6 安装Smokeping[root@smokeping ~]# cd /root/smokeping/
[root@smokeping smokeping]# tar -zxvf smokeping-2.4.2.tar.gz -C /usr/local/src/
[root@smokeping smokeping]#mv /usr/local/src/smokeping-2.4.2/ /usr/local/smokeping
三. Smokeping 初始化配置 3.1修改smokeping相关文件名在smokeping的子目录中会发现很多“*.dist”命名的文件,这些文件使用的时候请将其改名为“*”并进行配置
[root@smokeping ~]# cd /usr/local/smokeping/
[root@smokeping smokeping]# ls
[root@smokeping smokeping]# cp -a bin/smokeping.dist bin/smokeping[root@smokeping smokeping]# cp -a htdocs/smokeping.cgi.dist htdocs/smokeping.cgi
[root@smokeping smokeping]# cp -a etc/config.dist etc/config
3.2建立相关目录接着建立三个目录用于保存smokeping的数据等,如下所示:
[root@smokeping ~]# mkdir /usr/local/smokeping/data
[root@smokeping ~]# mkdir /usr/local/smokeping/var
[root@smokeping ~]# mkdir /usr/local/smokeping/cache
[root@smokeping ~]# yum install -y httpd[root@smokeping ~]# chown -R apache.apache /usr/local/smokeping
3.3修改配置文件 (1)/usr/local/smokeping/etc/config (somkeping配置基本都在这个文件上) *** General *** owner = xjzhujunjie contact = xjzhujunjie@junjie.commailhost = my.mail.host
sendmail = /usr/lib/sendmail
…imgcache = /usr/local/smokeping/cache
imgurl = cache datadir = /usr/local/smokeping/data piddir = /usr/local/smokeping/varcgiurl = http://192.168.101.81/smokeping/smokeping.cgismokemail = /usr/local/smokeping/etc/smokemail.dist
tmail = /usr/local/smokeping/etc/tmail.dist
*** Presentation ***
template = /usr/local/smokeping/etc/basepage.html.dist
+ charts + FPingbinary = /usr/sbin/fping##修改为实际路径
binary = /usr/local/sbin/fping
把#*** Slaves ***下的所有东西注释掉,这里暂时不采用master/slave模式。
#*** Slaves *** #secrets=/home/oetiker/checkouts/smokeping/trunk/software/etc/smokeping_secrets.dist #+boomer #display_name=boomer #color=0000ff #+slave2 #display_name=another #color=00ff00在Targets下添加监控节点,其中Multi也就是在一张图里画多个监测点的数值:
+ Telecom menu= TeleComtitle = 21ViaNet(China)Telecom
++ xjzhujunjiemenu = xjzhujunjie
title = xjzhujunjie-server
host = 192.168.101.82
++ JiLin menu = JiLintitle = JiLin_219.149.194.1
host = 219.149.194.1
++ TeleComMulti menu = TeleMultititle = 21ViaNet(China) Telecom Network
host = /Telecom/HeiLJ /Telecom/JiLin
(2)/usr/local/smokeping/htdocs/smokeping.cgi注意修改如下内容即可[root@smokeping ~]# vim /usr/local/smokeping/htdocs/smokeping.cgi
use lib qw(/usr/local/rrdtool/lib/perl);
use lib qw(/usr/local/smokeping/lib);
… Smokeping::cgi("/usr/local/smokeping/etc/config"); (3)/usr/local/smokeping/bin/smokeping注意修改如下内容即可:use lib qw(/usr/local/rrdtool/lib/perl);
use lib qw(/usr/local/smokeping/lib);
… Smokeping::main("/usr/local/smokeping/etc/config"); 3.4启动smokeping (1)编写smokeping启动脚本: 赋予可执行权限,并放在/etc/init.d目录下[root@smokeping ~]# vim /etc/init.d/smokeping
#!/bin/bash PIDFILE=/usr/local/smokeping/var/smokeping.pid SMOKEPING=/usr/local/smokeping/bin/smokeping ERROR=0 RUNNING=0 ARGV="$@"if [ "x$ARGV" = "x" ] ; then
ARGS=help fifor ARG in $@ $ARGS
doif [ -f $PIDFILE ] ; then
PID=`cat $PIDFILE`
if kill -0 $PID 2>/dev/null ; then
# smokeping is running
RUNNING=1 else# smokeping not running but PID file exists => delete PID file
rm -f $PIDFILE
RUNNING=0 fi else# smokeping (no pid file) not running
RUNNING=0 ficase $ARG in
start)if [ $RUNNING -eq 0 ] ; then
if $SMOKEPING > /dev/null; then
echo "$0 $ARG: smokeping started"
elseecho "$0 $ARG: smokeping could not be started"
ERROR=1 fi elseecho "$0 $ARG: smokeping is running with PID $PID"
ERROR=2 fi ;; stop)if [ $RUNNING -eq 1 ] ; then
if kill $PID ; then
echo "$0 $ARG: smokeping ($PID) stopped"
rm $PIDFILE
elseecho "$0 $ARG: smokeping could not be stopped"
ERROR=3 fi elseecho "$0 $ARG: smokeping not running"
ERROR=4 fi ;; restart)if [ $RUNNING -eq 1 ] ; then
if $SMOKEPING --restart > /dev/null; then
echo "$0 $ARG: smokeping restarted"
elseecho "$0 $ARG: smokeping could not be started"
ERROR=5 fi else $0 start fi ;; strace_debug)rm -f /tmp/strace_smokeping
if [ $RUNNING -eq 1 ] ; then
if strace -o/tmp/strace_smokeping $SMOKEPING --restart >/dev/null; then
echo "$0 $ARG: smokeping restarted with strace debug in /tmp/strace_smokeping"
elseecho "$0 $ARG: smokeping strace debug could not be started"
ERROR=6 fi elseif strace -o/tmp/strace_smokeping $SMOKEPING >/dev/null; then
echo "$0 $ARG: smokeping started with strace debug in /tmp/strace_smokeping"
elseecho "$0 $ARG: smokeping strace debug could not be started"
ERROR=7 fi fi ;; status)if [ $RUNNING -eq 1 ] ; then
echo "$0 $ARG: smokeping is running with PID ($PID)"
elseecho "$0 $ARG: smokeping is not running"
fi ;; *)echo "usage: $0 (start|stop|restart|status|strace_debug|help)"
cat <<EOF
start - start smokeping
stop - stop smokeping
restart - restart smokeping if running or start if not running
status - show status if smokeping is running or not
help - this screen
EOF ;; esac doneexit $ERROR
[root@smokeping ~]# chmod +x /etc/init.d/smokeping
[root@smokeping ~]# ll /etc/init.d/smokeping
-rwxr-xr-x 1 root root 2109 Jun 16 16:52 /etc/init.d/smokeping
(2)检查smokeping配置文件:[root@smokeping ~]# /usr/local/smokeping/bin/smokeping --check
Configuration file '/usr/local/smokeping/etc/config' syntax OK.
(3)启动smokeping:(无法启动) [root@smokeping ~]# service smokeping startERROR: slave 'boomer' is not defined in the '*** Slaves ***' section!
/etc/init.d/smokeping start: smokeping could not be started
出现错误à将在后面解决…
(4)配置apache /conf/httpd.conf[root@smokeping ~]# vim /etc/httpd/conf/httpd.conf
Alias /smokeping/ "/usr/local/smokeping/htdocs/"
Alias /cache/ "/usr/local/smokeping/cache/"
<Directory "/usr/local/smokeping/htdocs">
Options FollowSymLinks ExecCGI
AllowOverride None
AddHandler cgi-script cgi
Order allow,deny Allow from all </Directory>[root@smokeping ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for smokeping.junjie.com
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
[root@smokeping ~]#
(5)测试。修改完后重启apache,在浏览器输入http://192.168.101.81/smokeping/smokeping.cgi 失败。。。待续。。。 3.5 错误排查与测试:出现错误à将在后面解决…
[root@smokeping ~]# vim /usr/local/smokeping/etc/config
+ FPingbinary = /usr/local/sbin/fping
sourceaddress = 0.0.0.0
*** Slaves *** secrets=/usr/local/smokeping/etc/smokeping_secrets.dist +192.168.101.82 display_name=192.168.101.82 location=junjie color=0000ff ++overrideProbes.FPing.binary = /usr/local/sbin/fping
Probes.FPing.sourceaddress = 192.168.101.82
[root@smokeping ~]# service smokeping restart
ERROR: /usr/local/smokeping/etc/config, line 111: File '/usr/local/smokeping/etc/smokeping_secrets.dist' is world-readable or writable, refusing it
/etc/init.d/smokeping start: smokeping could not be started
[root@smokeping src]# ll /usr/local/smokeping/etc/smokeping_secrets.dist
-rw-r--r-- 1 apache apache 59 Aug 21 2007 /usr/local/smokeping/etc/smokeping_secrets.dist
[root@smokeping src]# chmod 400 /usr/local/smokeping/etc/smokeping_secrets.dist
[root@smokeping src]# ll /usr/local/smokeping/etc/smokeping_secrets.dist
-r-------- 1 apache apache 59 Aug 21 2007 /usr/local/smokeping/etc/smokeping_secrets.dist
[root@smokeping src]#
[root@smokeping ~]# service smokeping restart
WARNING: Hostname 'james.address' does currently not resolve to an IPv6 or IPv4 address
ERROR: slave 'boomer' is not defined in the '*** Slaves ***' section!
/etc/init.d/smokeping start: smokeping could not be started
*** Slaves *** secrets=/usr/local/smokeping/etc/smokeping_secrets.dist +boomer display_name=boomer location=junjie color=00ffff +192.168.101.82 display_name=192.168.101.82 location=junjie color=0000ff ++overrideProbes.FPing.binary = /usr/local/sbin/fping
Probes.FPing.sourceaddress = 192.168.101.82
+slave2 display_name=another color=00ff00[root@smokeping ~]# service smokeping restart
/etc/init.d/smokeping start: smokeping started
[root@smokeping ~]#
[root@smokeping ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: apr_sockaddr_info_get() failed for smokeping.junjie.com
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
出现错误à成功解决
四. Smokeping 的其它配置 4.1 监控节点的增加
[root@smokeping ~]# vim /usr/local/smokeping/etc/config
+ xjzhujunjiemenu = xjzhujunjie
title = xjzhujunjie-server
################web server###############
++ junjie-web menu = junjie-webtitle = xjzhujunjie 网站 192.168.101.82
host = 192.168.101.82
[root@smokeping ~]# service smokeping stop
/etc/init.d/smokeping: line 14: gt: command not found
/etc/init.d/smokeping: line 14: /dev/null: Permission denied
/etc/init.d/smokeping stop: smokeping not running
[root@smokeping ~]# service smokeping start
WARNING: Hostname 'james.address' does currently not resolve to an IPv6 or IPv4 address
/etc/init.d/smokeping start: smokeping started4.2 报警设置 smokeping的alert设置有点复杂,但是却很好用,设置很灵活,考虑得很周全。它可以使用邮件进行alert,也可以直接调用外部程序进行IM的报警。在我们的监控中主要是采用邮件报警。报警参数设置如下,哪个节点需要报警增加alerts = manyloss即可
[root@smokeping ~]# vim /usr/local/smokeping/etc/config
*** Alerts ***to = xjzhujunjie@junjie.com
from = xjzhujunjie@junjie.com
+someloss type = losspattern = >0%,*30*,>0%,*30*,>0% # in percent
comment = loss 1 packages in 30 continuous 3 times.
+manyloss type = losspattern = >15%,*30*,>15%,*30*,>15% # in percent
comment = loss 5 packages in 30 continuous 3 times.
+rttbad type = rttpattern = ==S,>50,>50 # in milliseconds
comment = For more than two consecutive 50-millisecond delay.
[root@smokeping ~]# service smokeping stop
/etc/init.d/smokeping: line 14: gt: command not found
/etc/init.d/smokeping: line 14: /dev/null: Permission denied
/etc/init.d/smokeping stop: smokeping not running
[root@smokeping ~]# service smokeping start
WARNING: Hostname 'james.address' does currently not resolve to an IPv6 or IPv4 address
/etc/init.d/smokeping start: smokeping started
(1)to 表示接受所有报警的邮箱,如果需要在特定的节点报警发送到特定的邮箱则在该节点上增加alertee = xjzhujunjie@junjie.com 即可。
(2)manyloss 表示30个包丢15%的情况 连续出现3次就发报警。
(3)someloss 表示30个包丢1个,连续出现3次就发送报警;rttbad表示连续两个包延迟超过50ms就发送报警。
4.3 画图设置 Smokeping默认设置中是每5分钟画一次图,每5分钟发送20个ping包。网络工程师认为5分钟发送20个ping包太少,建议改为5分钟100个。画图的颜色等也要进行相应的更改: 在Database中,step =300 pings =20 改为 step = 300 pings =100 从图上可以看到,slave主机会自己去检查监测点的情况(loss and rtt),并将数值提交给master主机(通过smokeping.cgi)。值得注意的是,slave并不需要config文件,每次slave提交完数据以后,会询问master它自己的配置文件是否有修改,如果有修改的话slave会进行更新。其它关于smokeping的使用,待续…….
《完》
--xjzhujunjie --2012/06/16Smokeiping 相关文档下载:http://down.51cto.com/data/432197
Smokeiping 相关软件包下载地址:http://down.51cto.com/data/432183