1. smokeping簡介
smokeping是一款監(jiān)控網(wǎng)絡(luò)狀態(tài)和穩(wěn)定性的開源軟件(它是rrdtool的作者開發(fā)的)刊侯,通過它可以監(jiān)控到公司IDC的網(wǎng)絡(luò)狀況章办,如延時(shí),丟包率滨彻,是否BGP多線等藕届;
smokeping會向目標(biāo)設(shè)備和系統(tǒng)發(fā)送各種類型的測試數(shù)據(jù)包,測量亭饵、記錄休偶,并通過rrdtool制圖方式,圖形化地展示網(wǎng)絡(luò)的時(shí)延情況辜羊,進(jìn)而能夠清楚的判斷出網(wǎng)絡(luò)的即時(shí)通信情況踏兜;通過smokeping來監(jiān)控IDC機(jī)房網(wǎng)絡(luò)質(zhì)量情況,可以從監(jiān)控圖上的延時(shí)與丟包情況分辨出機(jī)房的網(wǎng)絡(luò)是否穩(wěn)定八秃,是否為多線碱妆,是否為BGP機(jī)房以及到各城市的三個(gè)運(yùn)行商網(wǎng)絡(luò)各是什么情況。如果出現(xiàn)問題昔驱,可以有針對性的去處理疹尾;如果選擇新機(jī)房的時(shí)候,還可以根據(jù)smokeping的監(jiān)控結(jié)果來判斷這個(gè)機(jī)房是否適合。
需要注意的是:smokeping監(jiān)控的是網(wǎng)絡(luò)穩(wěn)定性航棱,而cacti或zabbix監(jiān)控的是帶寬使用情況(即進(jìn)出口流量)
2. 部署smokeping
2.1. 環(huán)境準(zhǔn)備
[root@linux-node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@linux-node1 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
[root@linux-node1 ~]# getenforce
Disabled
2.2. 安裝rrdtool與依賴庫
[root@linux-node1 ~]# yum install -y fping perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-RadiusPerl perl-IO-Socket-SSL perl-Socket6 perl-CGI-SpeedyCGI perl-FCGI perl-CGI-SpeedCGI perl-Time-HiRes perl-ExtUtils-MakeMaker perl-RRD-Simple rrdtool rrdtool-perl curl fping echoping httpd httpd-devel gcc make wget libxml2-devel libpng-devel glib pango pango-devel freetype freetype-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel mod_fastcgi
2.3. 下載與安裝smokeping
[root@linux-node1 ~]# cd /usr/local/src/
[root@linux-node1 src]# wget https://oss.oetiker.ch/smokeping/pub/smokeping-2.6.11.tar.gz
[root@linux-node1 src]# tar xf smokeping-2.6.11.tar.gz
[root@linux-node1 src]# cd smokeping-2.6.11
[root@linux-node1 smokeping-2.6.11]# ./configure --prefix=/usr/local/smokeping
# 如果是第一次安裝smokeping程序睡雇,一般會出現(xiàn)報(bào)錯(cuò),說沒有perl模塊支持饮醇,需要安裝模塊后在執(zhí)行安裝程序
** Aborting Configure ******************************
If you know where perl can find the missing modules, set
the PERL5LIB environment variable accordingly.
FIRST though, make sure that 'perl' starts the perl
binary you want to use for SmokePing.
Now you can install local copies of the missing modules
by running
./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty
The RRDs perl module is part of RRDtool. Either use the rrdtool
package provided by your OS or install rrdtool from source.
If you install from source, the RRDs module is located
PREFIX/lib/perl
2.4. 安裝依賴的Perl模塊
[root@linux-node1 smokeping-2.6.11]# cat PERL_MODULES
FCGI
CGI
CGI::Fast
Config::Grammar
Digest::HMAC_MD5
Net::Telnet
Net::OpenSSH
Net::SNMP
Net::LDAP
Net::DNS
IO::Pty
LWP
# 指定perl源安裝perl模塊
[root@linux-node1 smokeping-2.6.11]# vim ./setup/sdbs.inc
………………省略內(nèi)容………………
function perlmodule (){
path=$1;shift
pack=${1:-""}
[ -e $PREFIX/bin/cpanm ] || wget --no-check-certificate -O $PREFIX/bin/cpanm cpanmin.us && chmod 755 $PREFIX/bin/cpanm
cpanm --mirror http://mirrors.aliyun.com/CPAN/ "$path$pack"
[ "$KEEP" = "YES" ] || rm -rf $PREFIX/work $PREFIX/latest-build
}
[root@linux-node1 smokeping-2.6.11]# ./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty
[root@linux-node1 smokeping-2.6.11]# ./configure --prefix=/usr/local/smokeping
………………省略內(nèi)容………………
** 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
[root@linux-node1 smokeping-2.6.11]# /usr/bin/gmake install
報(bào)錯(cuò)處理:
報(bào)錯(cuò)1:
Can't locate Sys/Syslog.pm in @INC (@INC contains: /usr/local/smokeping/thirdparty/lib/perl5/x86_64-linux-thread-multi /usr/local/smokeping/thirdparty/lib/perl5 ../lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ../lib/Smokeping.pm line
解決:yum install -y perl-Sys-Syslog
報(bào)錯(cuò)2:smokeping_config.pod around line 81: alternative text 'the master/slave mode' contains non-escaped | or /
POD document had syntax errors at /bin/pod2man line 69.
https://github.com/oetiker/SmokePing/issues/23
3. 配置smokeping
3.1. 創(chuàng)建相關(guān)目錄
[root@linux-node1 smokeping-2.6.11]# cd /usr/local/smokeping
[root@linux-node1 smokeping]# mkdir cache data var
3.2. 創(chuàng)建日志文件
[root@linux-node1 smokeping-2.6.11]# touch /var/log/smokeping.log
3.3. 目錄文件授權(quán)
[root@linux-node1 smokeping-2.6.11]# chown apache:apache cache data var
[root@linux-node1 smokeping-2.6.11]# chown apache:apache /var/log/smokeping.log
3.4. 修改配置文件
[root@linux-node1 smokeping]# cd /usr/local/smokeping/htdocs/
[root@linux-node1 htdocs]# mv smokeping.fcgi.dist smokeping.fcgi
[root@linux-node1 htdocs]# cd /usr/local/smokeping/etc
[root@linux-node1 etc]# mv config.dist config
[root@linux-node1 etc]# cp config config.bak
# 修改cgiurl它抱,修改為本機(jī)的IP地址或者是域名
[root@linux-node1 etc]# sed -i 's#some.url#smokeping.cainaio.com#' /usr/local/smokeping/etc/config
# 默認(rèn)檢測時(shí)間 300 秒修改 60 秒
[root@linux-node1 etc]# sed -i 's#300#60#g' /usr/local/smokeping/etc/config
# 默認(rèn) 60 秒 ping 20 次,修改為 60 秒 ping 60 次
[root@linux-node1 etc]# sed -i 's#pings = 20#pings = 60#' /usr/local/smokeping/etc/config
# 圖像瀏覽界面的中文支持
[root@linux-node1 etc]# yum -y install wqy-zenhei-fonts.noarch
[root@linux-node1 etc]# vim /usr/local/smokeping/etc/config
charset = utf-8 //第50行下面添加此行內(nèi)容
# 編輯Graphs.pm
[root@linux-node1 etc]# vim /usr/local/smokeping/lib/Smokeping/Graphs.pm
'--font TITLE:20:"WenQuanYi Zen Hei Mono"', //第147行下面插入邊一行內(nèi)容
# 配置完成之后修改密碼文件權(quán)限
[root@linux-node1 etc]# chmod 600 /usr/local/smokeping/etc/smokeping_secrets.dist
3.5. 修改apache的配置
[root@linux-node1 etc]# vim /etc/httpd/conf.d/smokeping.conf
Alias /cache "/usr/local/smokeping/cache/"
Alias /cropper "/usr/local/smokeping/htdocs/cropper/"
Alias /smokeping "/usr/local/smokeping/htdocs/smokeping.fcgi"
<Directory "/usr/local/smokeping">
AllowOverride all
Options -Indexes +FollowSymlinks
AddHandler cgi-script .fcgi .cgi
Require all granted
DirectoryIndex smokeping.fcgi
</Directory>
3.6. 添加測試數(shù)據(jù)
接著進(jìn)行測試數(shù)據(jù)的自定義(可以將smokeping部署在公司網(wǎng)絡(luò)下朴艰,然后自定義監(jiān)控各個(gè)IDC的網(wǎng)絡(luò)情況观蓄,監(jiān)控設(shè)置如下定義)
[root@linux-node1 etc]# vim /usr/local/smokeping/etc/config # 在最后面添加
+ Other
menu = 三大網(wǎng)絡(luò)監(jiān)控
title = 監(jiān)控統(tǒng)計(jì)
++ dianxin
menu = 電信網(wǎng)絡(luò)監(jiān)控
title = 電信網(wǎng)絡(luò)監(jiān)控列表
host = /Other/dianxin/dianxin-bj /Other/dianxin/dianxin-hlj /Other/dianxin/dianxin-tj /Other/dianxin/dianxin-sc /Other/dianxin/dianxin-sh /Other/dianxin/dianxin-gz
+++ dianxin-bj
menu = 北京電信
title = 北京電信
alerts = someloss
host = 202.96.199.133
+++ dianxin-hlj
menu = 黑龍江電信
title = 黑龍江電信
alerts = someloss
host = 219.147.198.242
+++ dianxin-tj
menu = 天津電信
title = 天津電信
alerts = someloss
host = 219.150.32.132
+++ dianxin-sc
menu = 四川電信
title = 四川電信
alerts = someloss
host = 61.139.2.69
+++ dianxin-sh
menu = 上海電信
title = 上海電信
alerts = someloss
host = 116.228.111.118
+++ dianxin-gz
menu = 廣東電信
title = 廣東電信
alerts = someloss
host = 113.111.211.22
++ liantong
menu = 聯(lián)通網(wǎng)絡(luò)監(jiān)控
title = 聯(lián)通網(wǎng)絡(luò)監(jiān)控列表
host = /Other/liantong/liantong-bj /Other/liantong/liantong-hlj /Other/liantong/liantong-tj /Other/liantong/liantong-sc /Other/liantong/liantong-sh /Other/liantong/liantong-gz
+++ liantong-bj
menu = 北京聯(lián)通
title = 北京聯(lián)通
alerts = someloss
host = 61.135.169.121
+++ liantong-hlj
menu = 黑龍江聯(lián)通
title = 黑龍江聯(lián)通
alerts = someloss
host = 202.97.224.69
+++ liantong-tj
menu = 天津聯(lián)通
title = 天津聯(lián)通
alerts = someloss
host = 202.99.96.68
+++ liantong-sc
menu = 四川聯(lián)通
title = 四川聯(lián)通
alerts = someloss
host = 119.6.6.6
+++ liantong-sh
menu = 上海聯(lián)通
title = 上海聯(lián)通
alerts = someloss
host = 210.22.84.3
+++ liantong-gz
menu = 廣東聯(lián)通
title = 廣東聯(lián)通
alerts = someloss
host = 221.5.88.88
++ yidong
menu = 移動網(wǎng)絡(luò)監(jiān)控
title = 移動網(wǎng)絡(luò)監(jiān)控列表
host = /Other/yidong/yidong-bj /Other/yidong/yidong-hlj /Other/yidong/yidong-tj /Other/yidong/yidong-sc /Other/yidong/yidong-sh /Other/yidong/yidong-gz
+++ yidong-bj
menu = 北京移動
title = 北京移動
alerts = someloss
host = 221.130.33.52
+++ yidong-hlj
menu = 黑龍江移動
title = 黑龍江移動
alerts = someloss
host = 211.137.241.35
+++ yidong-tj
menu = 天津移動
title = 天津移動
alerts = someloss
host = 211.137.160.5
+++ yidong-sc
menu = 四川移動
title = 四川移動
alerts = someloss
host = 218.201.4.3
+++ yidong-sh
menu = 上海移動
title = 上海移動
alerts = someloss
host = 117.131.19.23
+++ yidong-gz
menu = 廣東移動
title = 廣東移動
alerts = someloss
host = 211.136.192.6
- 修改fping位置
修改smokeping的config配置文件中fping路徑
[root@linux-node1 etc]# which fping
/sbin/fping
[root@linux-node1 etc]# vim /usr/local/smokeping/etc/config
binary = /sbin/fping
4. 啟動smokeping
啟動httpd和smokeping服務(wù)
# 最好將httpd.conf中的ServerName www.example.com:80這一行的注釋打開
[root@linux-node1 ~]# systemctl start httpd.service
[root@linux-node1 ~]# /usr/local/smokeping/bin/smokeping
設(shè)置smokeping開機(jī)啟動
[root@linux-node1 ~]# echo "/usr/local/smokeping/bin/smokeping" >> /etc/rc.local
設(shè)置smokeping環(huán)境變量
[root@linux-node1 ~]# echo 'export PATH=/usr/local/smokeping/bin/:$PATH' >> /etc/profile
5. 訪問smokeping
本地hosts綁定smokeping.cainaio.com,然后訪問上面部署的smokeping界面:
http://smokeping.cainaio.com/smokeping (首次訪問祠墅,采集數(shù)據(jù)需要一段時(shí)間侮穿,等一會就會有數(shù)據(jù)圖形展示)
以上為實(shí)驗(yàn)環(huán)境,可根據(jù)自己實(shí)際的網(wǎng)絡(luò)情況進(jìn)行監(jiān)控配置的修改毁嗦。如果按照上面操作后亲茅,直接在網(wǎng)上訪問是十分的不安全,需要加入安全訪問控制
修改apache的smokeping.conf配置
Alias /cache "/usr/local/smokeping/cache/"
Alias /cropper "/usr/local/smokeping/htdocs/cropper/"
Alias /smokeping "/usr/local/smokeping/htdocs/smokeping.fcgi"
<Directory "/usr/local/smokeping">
AllowOverride all
Options All
AddHandler cgi-script .fcgi .cgi
Options -Indexes +FollowSymlinks
DirectoryIndex smokeping.fcgi
AuthName "Smokeping"
AuthType Basic
AuthUserFile /usr/local/smokeping/htdocs/htpasswd
Require valid-user
</Directory>
設(shè)置訪問的用戶名和密碼(比如admin/admin)
[root@linux-node1 ~]# htpasswd -c /usr/local/smokeping/htdocs/htpasswd admin
New password:
Re-type new password:
Adding password for user admin
重啟apache
[root@linux-node1 ~]# systemctl restart httpd.service
再次訪問smokeping界面