linux下构建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=1gpgcheck=1gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release[rhel-vt]

name=Red Hat Enterprise Linux vt

baseurl=file:///mnt/cdrom/VT/enabled=1gpgcheck=1gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release[rhel-cluster]

name=Red Hat Enterprise Linux cluster

baseurl=file:///mnt/cdrom/Cluster/enabled=1gpgcheck=1gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release[rhel-clusterstorage]

name=Red Hat Enterprise Linux clusterstorage

baseurl=file:///mnt/cdrom/ClusterStorage/enabled=1gpgcheck=1gpgkey=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 安装rrdtool

RRDTool 是由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.gzechoping-6.0.2.tar.gzfping.tar.gzrrdtool-1.4.4.tar.gzsmokeping-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:49

Usage: rrdtool [options] command command_options

Valid commands: create, update, updatev, graph, graphv, dump, restore,

last, lastupdate, first, info, fetch, tune,

resize, xport, flushcached

RRDtool 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]# ls

cgi.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]# ls

COPYING 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 = xjzhujunjiecontact = xjzhujunjie@junjie.com

mailhost = my.mail.host

sendmail = /usr/lib/sendmail

imgcache = /usr/local/smokeping/cache

imgurl = cachedatadir = /usr/local/smokeping/datapiddir = /usr/local/smokeping/var

cgiurl = 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+ FPing

binary = /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也就是在一张图里画多个监测点的数值:

+ Telecommenu= TeleCom

title = 21ViaNet(China)Telecom

++ xjzhujunjie

menu = xjzhujunjie

title = xjzhujunjie-server

host = 192.168.101.82

++ JiLinmenu = JiLin

title = JiLin_219.149.194.1

host = 219.149.194.1

++ TeleComMultimenu = TeleMulti

title = 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

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

for ARG in $@ $ARGS

if [ -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 else

# smokeping (no pid file) not running

RUNNING=0

case $ARG in

start)

if [ $RUNNING -eq 0 ] ; then

if $SMOKEPING /dev/null; then

echo $0 $ARG: smokeping started

else

echo $0 $ARG: smokeping could not be started

ERROR=1 else

echo $0 $ARG: smokeping is running with PID $PID

ERROR=2 stop)

if [ $RUNNING -eq 1 ] ; then

if kill $PID ; then

echo $0 $ARG: smokeping ($PID) stopped

rm $PIDFILE

else

echo $0 $ARG: smokeping could not be stopped

ERROR=3 else

echo $0 $ARG: smokeping not running

ERROR=4 restart)

if [ $RUNNING -eq 1 ] ; then

if $SMOKEPING –restart /dev/null; then

echo $0 $ARG: smokeping restarted

else

echo $0 $ARG: smokeping could not be started

ERROR=5 else $0 start 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

else

echo $0 $ARG: smokeping strace debug could not be started

ERROR=6 else

if strace -o/tmp/strace_smokeping $SMOKEPING /dev/null; then

echo $0 $ARG: smokeping started with strace debug in /tmp/strace_smokeping

else

echo $0 $ARG: smokeping strace debug could not be started

ERROR=7 status)

if [ $RUNNING -eq 1 ] ; then

echo $0 $ARG: smokeping is running with PID ($PID)

else

echo $0 $ARG: smokeping is not running

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

esac done

exit $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 start

ERROR: 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,denyAllow 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

+ FPing

binary = /usr/local/sbin/fping

sourceaddress = 0.0.0.0

*** Slaves ***secrets=/usr/local/smokeping/etc/smokeping_secrets.dist+192.168.101.82display_name=192.168.101.82location=junjiecolor=0000ff++override

Probes.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+boomerdisplay_name=boomerlocation=junjiecolor=00ffff+192.168.101.82display_name=192.168.101.82location=junjiecolor=0000ff++override

Probes.FPing.binary = /usr/local/sbin/fping

Probes.FPing.sourceaddress = 192.168.101.82

+slave2display_name=anothercolor=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

+ xjzhujunjie

menu = xjzhujunjie

title = xjzhujunjie-server

################web server###############

++ junjie-webmenu = junjie-web

title = 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 started

4.2 报警设置smokeping的alert设置有点复杂,但是却很好用,设置很灵活,考虑得很周全。它可以使用邮件进行alert,也可以直接调用外部程序进行IM的报警。在我们的监控中主要是采用邮件报警。报警参数设置如下,哪个节点需要报警增加alerts = manyloss即可

[root@smokeping ~]# vim /usr/local/smokeping/etc/config

*** Alerts ***

to = xjzhujunjie@junjie.com

from = xjzhujunjie@junjie.com

+somelosstype = loss

pattern = 0%,*30*, 0%,*30*, 0% # in percent

comment = loss 1 packages in 30 continuous 3 times.

+manylosstype = loss

pattern = 15%,*30*, 15%,*30*, 15% # in percent

comment = loss 5 packages in 30 continuous 3 times.

+rttbadtype = rtt

pattern = ==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/16

Smokeiping 相关文档下载:http://down.51cto.com/data/432197

Smokeiping 相关软件包下载地址:http://down.51cto.com/data/432183 哪里会顾得上这些。等到时间将矛盾一层层降解为流言是非误解过结

linux下构建Smokeping网络监控平台推荐

相关文章:

你感兴趣的文章:

标签云: