0.參考文件
http://wenku.baidu.com/view/950fbb0a79563c1ec5da71b1
http://aaaxiang000.blog.163.com/blog/static/20634912201188696910/
http://my.oschina.net/lxcong/blog/150617#OSC_h1_20
1.為ubuntu設置固定ip地址
參考文獻:http://hi.baidu.com/futuremeng/item/ce1604ee467d0b0f570f1d30
在安裝好ubuntu以后,系統默認是使用DHCP自動獲取ip地址。對ubuntu的ip地址修改都在/etc/network/interfaces這個文件下面。
在ubuntu下運行如下命令:
#sudo vim /etc/network/interfaces
使用vim來進行編輯,我們可以看到默認配置如下圖所示:
上述的最后兩條命令就表示是使用DHPC自動獲取ip方式。
auto eth0
iface eth0 inet dhcp
現在我們要為其設置靜態ip地址,設置方式如下,
運行#sudo vim /etc/network/interfaces。修改文件如下:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 #iface eth0 inet dhcp iface eth0 inet static address 10.138.16.245 netmask 255.255.255.240 gateway 10.138.16.254
最后使用下面的命令使網絡設置生效:
sudo /etc/init.d/networking restart
2.安裝smokeping
首先在ubuntu下運行如下命令,安裝預備程序對於所有選項都選擇Y,表示安裝
sudo aptitude install rrdtool apache2 fping echoping libapache2-mod-speedycgi libwww-perl libsocket6-perl libnet-telnet-perl libnet-dns-perl libnet-ldap-perl libio-socket-ssl-perl libauthen-radius-perl libcgi-perl librrds-perl librrdp-perl
--------------------------------------------------------------------------
PS:2014-2-27
1.今天發現aptitude命令在ubuntu當中是有問題的,查了一下發現好像是ubuntu有bug,建議不要使用apttitude,直接使用apt-get這個命令。
2.還有一個就是上面的這些依賴包可能有問題,我又參考了Install and configure Smokeping on Ubuntu 12.04 LTS 這篇博客,在另外一台機器上面安裝了smokeping,它所使用的依賴包如下:
sudo apt-get install smokeping curl libauthen-radius-perl libnet-ldap-perl libnet-dns-perl libio-socket-ssl-perl libnet-telnet-perl libsocket6-perl libio-socket-inet6-perl apache2
3.還有我在bitnami的機器上面安裝smokeping失敗,總是無法打開,后來查了一下發現是因為bitnami中使用的是apache2.4,而smokeping更加兼容apche2.2版本。或者也有可能bitnami當中對apache做了修改,而smokeping在這個基礎上安裝不兼容,anyway,smokeping不能在bitnami上面部署。
---------------------------------------------------------------------------------------
然后在運行smokeping安裝命令
sudo apt-get install smokeping
最后使用在瀏覽器上面輸入:http://[IP]/cgi-bin/smokeping.cgi進行訪問,如果輸入這個地址以后出現sendmail錯誤的,還需要安裝sendmail,命令如下:
sudo apt-get install sendmail
3.中文支持
3.1中文文字
如果Targets 文件中出現中文,需要修改Presentation 文件,
#sudo vim /etc/smokeping/config.d/Presentation
設定 charset = UTF8 。在設定完畢以后,我們再次打開Targets文件,如果文件出現亂碼, 需要全部重新編輯才可以,也就是說再一次以utf-8的格式輸入一次中文。重啟smokeping ,刷新界面,中文就不會出現亂碼了。如下圖所示:
ps:2014-2-27
其實也可以不用重新輸入一遍,我們可以將Target文件拷貝出來,在我們的windows操作系統上面用notepad++打開,然后執行以下步驟
- ctrl+a全選所有問題
- ctrl+x剪切所有內容
- notepad++中選中“格式->以UTF-8無BOM格式編碼”
- ctrl+v將內容粘貼回來。
- 保存,並將Target文件拷貝會/etc/smokeping/config.d/Targets目錄下。
- 如果使用secureCRT打開,還需要修改其編碼方式,參考:securecrt中文亂碼以及ubuntu設置locale
3.2圖片的中文支持
如果想要圖rrd圖片也支持中文,那么就需要中文字體包了,
sudo apt-get install ttf-wqy-zenhei
如果你跟我一樣是處於離線環境,可以下載一個文泉驛字體安裝包再安裝。具體安裝方法參考我另外一篇博客:ubuntu單獨安裝字體包。我也將字體安裝包以及依賴包放到百度雲盤上面了,下載地址:http://pan.baidu.com/s/1hqsUORi 。
然后修改smokeping的Graphs.pm這個文件,如果找不到的話可以通過find命令查到
enadmin@BJCGNMON01:/etc/smokeping/config.d$ sudo find / -name Graphs.pm [sudo] password for enadmin: /home/enadmin/Graphs.pm /usr/share/perl5/Smokeping/Graphs.pm
通過查找命令我們知道需要修改“/usr/share/perl5/Smokeping/Graphs.pm”這個文件,我們找到RRDs::graph,然后在里面插入如下語句:
'--font TITLE:20:"WenQuanYi Zen Hei Mono"',
if ($mode =~ /[anc]/){ my $val = 0; for my $host (@hosts){ my ($graphret,$xs,$ys) = RRDs::graph ("dummy", '--start', $tasks[0][1], '--end', $tasks[0][2], '--font TITLE:20:"WenQuanYi Zen Hei Mono"', "DEF:maxping=$cfg->{General}{datadir}${host}.rrd:median:AVERAGE", 'PRINT:maxping:MAX:%le' ); my $ERROR = RRDs::error(); return "<div>RRDtool did not understand your input: $ERROR.</div>" if $ERROR; $val = $graphret->[0] if $val < $graphret->[0]; } $val = 1e-6 if $val =~ /nan/i; $max = { $tasks[0][1] => $val * 1.5 }; }
如果你Smokeping的安裝路徑不是上述安裝路徑,你可以在ubuntu下搜索Graphs.pm這個文件,在查到路徑以后在去編輯文件。
sudo find / -name Graphs.pm
4.添加smokeping節點
在ubuntu執行以下命令來編輯配置文件:
sudo vim /etc/smokeping/config.d/Targets
按照樣例我們添加節點的ip地址
+ Gansu //注意,這里加號后面的必須是英文,不能是中文 menu = 甘肅 title = 甘肅 ++ Daliang //同樣,這里‘++’后面的必須是英文,+和++后面的內容是不會被現實的,只是起一個命名的作用。 menu =大梁 title =大梁:10.138.1.11 host = 10.138.1.11 alerts = someloss
在添加完畢以后重啟smokeping,執行以下mingling:
#sudo /etc/init.d/smokeping restart
ps:添加三級目錄
前面的配置是二級目錄,其實smokeping是可以配置三級目錄的,如下所示:
+ yiji menu = 一級 title = 一級 ++ erji menu = 二級 title = 二級 +++ sanji menu = sanji title =sanji:10.138.16.54 host = 10.138.16.54 alerts = someloss
5.郵件告警配置:
5.1概述
smokeping默認使用郵件進行alert,也可以直接調用外部程序進行IM的報警,也就是說你只需要寫一個簡單的shell腳本,就可以實現smokeping的MSN 、 gtalk 、飛信等IM、短信報警了。如果要配置smokeping的告警功能,我們需要修改/etc/smokeping/config.d/Alerts這個配置文件,我的配置文件如下:
*** Alerts *** to = |/etc/smokeping/alert.sh from = aaa@126.com +someloss type = loss # in percent pattern = >90%,*12*,>90%,*12*,>90% edgetrigger = yes comment = loss 3 times in a row +rttbad type = rtt # in milliseconds pattern = ==S,>50,>50 edgetrigger = yes comment = route # This rule checks for 3 periods (3 * 5min default) where # the rtt is >70ms +rttdetect type = rtt # in milli seconds pattern = >70,>70,>70 edgetrigger = yes comment = On backup circuit maybe?
5.1.1配置觸發腳本
"to" 選項,默認是要填入一個email地址的,但是只要在"="后面加上"|",后面再跟你自定義的腳本路徑,就可以調用自己的腳本進行alert了。
比如我們這里的/etc/smokeping/alert.sh就是我自己定義的告警腳本。這個腳本會讀入5個[或者6個]參數:name-of-alert, target, loss-pattern, rtt-pattern, hostname,[raise],自己選擇要使用的參數即可,我的alert.sh腳本內容如下所示,之所以打印出所有的參數,是為了看看每個參數都是些什么內容。
#!/bin/sh echo "$2 got smokeping $1 from Monitor Server, The $2 IP is: $5........name-of-alert:$1, target:$2, loss-pattern:$3, rtt-pattern:$4, hostname:$5,[raise]:$6" |mutt -s "smokeping alert $2" xwdreamer@126.com
5.1.2設置發件人郵箱
"from"選項中填入我們的發件人郵箱地址。
5.1.3設置告警出發類型
smokeping的告警分為條件觸發和邊界觸發,所謂條件觸發就是只要滿足條件就會觸發,比如我們ping不通一個站點,那么smokeping就一直發告警,直到能夠ping通為止;還有一種是邊界觸發,所謂邊界觸發就是只在狀態發生改變的時候發出告警。這樣斷開的時候發一封郵件,恢復的時候再發一封郵件。我們這里就是要使用邊界觸發,所以設置“edgetrigger” = yes。
alert的類型我們主要使用"loss"和"rtt"兩種(當然還有更多更復雜的類型)。上面的alert類型當中,我只用了someloss這個類型,具體解釋是只要在12次測試當中,如果出現3次丟包,並且丟包率達到90%,那么就告警。下面我再給出一些其他規則的告警觸發條件解釋:
#如果在12次檢查中出現了3次丟包的情況(不論丟多少個包),就進行alert; +someloss type = loss # in percent pattern = >0%,*12*,>0%,*12*,>0% comment = loss 3 times in a row #如果連續出現兩次50毫秒以上的延時,就進行alert; +rttbad type = rtt # in milliseconds pattern = ==S,>50,>50 comment = route #之前5次檢查延時都少於10毫秒,前6次檢查延時都少於100毫秒,第7次開始連續3次檢查延時都大於100毫秒的話,就進行alert。 +rttdetect type = rtt # in milliseconds pattern = <10,<10,<10,<10,<10,<100,>100,>100,>100 comment = routing messed up again ?
5.2smokeping與msmtp的集成
smokeping默認的郵件告警是使用sendmail來實現的,如果想直接通過smpt發送郵件需要修改源代碼,覺得這樣不方便,后來找了一些資料,使用msmtp來實現。所以首先安裝msmtp+mutt環境,參考:ubuntu下msmtp+mutt的安裝和配置 。在這篇博客中提到,哪個用戶要使用msmtp和mutt,那么哪個用戶就必須對.msmtprc和.muttrc這兩個文件有讀寫的權限。現在我們要smokeping程序中調用mutt和msmtp命令,那么運行smokeping程序的用戶就必須對.msmtprc和.muttrc這兩個文件有讀寫的權限。
5.3查看smokeping進程所屬的用戶
enadmin@cgnmon:~/test$ ps -aux | grep smokeping Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html 105 1265 0.0 1.0 142248 22244 ? Ss 09:04 0:00 /usr/sbin/smokeping [FPing] enadmin 1930 0.0 0.0 11700 964 pts/0 S+ 09:29 0:00 grep --color=auto smokeping
從上面我們可以看到smokeping進程的用戶是105,那么105具體指誰呢,我們可以在/etc/passwd(還有一個/etc/shadow)當中查看。如下所示,我們執行
vi /etc/passwd
發現一個用戶叫做smokeping:x:105,這個105用戶就是smokeping用戶,我們同樣能夠在這個下找到root賬戶和enadmin賬戶。
enadmin@cgnmon:~/test$ vi /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:103::/home/syslog:/bin/false messagebus:x:102:105::/var/run/dbus:/bin/false whoopsie:x:103:106::/nonexistent:/bin/false landscape:x:104:109::/var/lib/landscape:/bin/false enadmin:x:1000:1000:enadmin,,,:/home/enadmin:/bin/bash smokeping:x:105:114:SmokePing daemon,,,:/var/lib/smokeping:/bin/false smmta:x:106:115:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false smmsp:x:107:116:Mail Submission Program,,,:/var/lib/sendmail:/bin/false sshd:x:108:65534::/var/run/sshd:/usr/sbin/nologin ftp:x:109:117:ftp daemon,,,:/srv/ftp:/bin/false ntp:x:110:118::/home/ntp:/bin/false openldap:x:111:119:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false
但是我們發現這個smokeping用戶的后綴是/bin/false,這個后綴表示此賬戶是無法登陸的,如果要想使用smokeping登陸,或者進入到smokeping賬戶目錄下,那么必須讓這個賬戶變為可登陸。那么如何設置呢,我們可以參考enadmin賬戶的后綴,他的后綴都是/bin/bash,那么我們就將smokeping賬戶的后綴修改為/bin/bash,然后重啟一下即可。具體參考:系統賬戶更改為可登陸賬戶
5.4修改.msmtprc和.muttrc這兩個文件的權限
在我們搭建好msmpt和mutt環境以后,