運維監控連載:開源監控利器nagios實戰全解
俗話說:工欲善其事,必先利其器.要做好系統管理,使自己的工作更輕松更有效的話,一個好的監控工具是必不可少的了.在這里我向大家推薦一款我使用了4年多的、功能強大、可靈活定制的開源監控利器---nagios。
運維監控Nagios連載1:Nagios服務器的自我監控實現
運維監控Nagios連載2:部署apache服務器
運維監控Nagios連載3:部署、配置Nagios服務
運維監控Nagios連載4:Nagios監控mysql服務器
運維監控Nagios連載5:關鍵應用監控的重要策略
首先,我們來看實際工作中需要監控的對象有哪些?在這里我總結出2種類型的監控對象:網絡服務監控及主機資源監控。網絡服務監控可包括主機存活檢查、web服務監控、ftp服務監控、數據庫服務監控、自定義服務監控等;主機資源監控可包括系統負載、當前ip鏈接數、磁盤空間使用情況、當前進程數以及自定義的資源監控等。
其次,我們再來看nagios監控的表現形式。監控的主要目的是當監控的對象發生故障或資源緊張時及時通知相關人員,以便問題得到迅速的處理。追求的效果就是"在老板和客戶發現問題之前得到及時、有效的通知",假定故障通知來自老板,我想大家都不會很愉快的。Nagios為了方便我們的管理工作,提供了至少3種表現手段:
1、web方式,即通過瀏覽器觀看被監控的對象;如正常狀態下,其狀態(status)是以藍色填充并顯示一個OK。
2、郵件通知,發生故障時,到達設定重試次數和探測間隔時間后發送郵件給管理員或相關人員,報告問題的大致情況。
3、手機短信,這是非常有用和及時的功能了;晚上熟睡中,再也沒可能看web頁面或查閱郵件,可以一旦發生故障,手機短信卻能把你隨時喚醒。
一般情況下,這3者是同時進行的:上班時間開個瀏覽器看頁面顯示、打開郵件程序定時收取郵件、手機24小時在線。
最后,我們以一個實際場景來展示nagios的強大功能,希望對大家的系統管理工作有所幫助。
場景描述
為了描述問題方便,我們假定有5個服務器要監控(web服務器、數據庫服務器、郵件服務器、nfs文件共享服務器),需要對幾個服務器的服務進行監控,同時監控每個服務器的資源使用情況,包括負載情況、磁盤分區使用情況、總進程數、當前ip連接數這個4個項目(當然你也可以自己寫腳本監控更多的資源對象)。這些服務器除了系統管理員而外,還有其他用戶(如程序員)對各自的服務器進行維護;當發生故障的時候,維護網站的程序員能收到報警郵件和報警短信,而管理數據庫管理員則無需收到這些報警,同時維護程序的用戶可以以自己的帳號登陸監控服務器,通過web方式察看自己所管服務器的狀態(只能看自己的而看不到別人管轄服務器的狀態)。
通過上面的描述,我們可以整理出下面的表格:
機器名稱
|
角色
|
可查看狀態及接受報警信息的用戶
|
所需工具
|
Nagios服務器
|
監控端
|
系統管理員(SA)
|
Apache、nagios、nagios plugin、sendmail、perl等
|
郵件服務器
|
被監控端
|
系統管理員、郵件管理員
|
Nrpe、nagios plugin、自定義腳本等
|
數據庫服務器
|
被監控端
|
系統管理員、dba
|
Nrpe、nagios plugin、自定義腳本等
|
Web服務器
|
被監控端
|
系統管理員、webmaster
|
Nrpe、nagios plugin、自定義腳本等
|
Nfs共享服務器
|
被監控端
|
系統管理員
|
Nrpe、nagios plugin、自定義腳本等
|
緩存服務器(squid)
|
被監控端
|
系統管理員、webmaster
|
Nrpe、nagios plugin、自定義腳本等
|
配置好nagios和被監控機器后,其在瀏覽器里的基本輸出與下圖類似:
#p#
Nagios服務器的自我監控實現
要實現資源和服務兩個方面的監控,需要配置服務器端(nagios server)及被監控端(NRPE-nagios remote plugin executor).為了能順利地、有條理的部署nagios監控平臺,一個好的工作風格是在nagios server自身實現服務和資源的監控,然后再在其他監控端部署nrpe,從nagios server端用check_nrpe測試通過后,再在nagios server配置文件中逐一增加監控項目。當然如果只是監控服務而不監控主機資源,則被監控端不做任何nrpe的安裝。為了方便初學者更容易上手和成功,我們就從簡單的步驟開始。
自我監控實現:配置郵件發送功能
因為報警郵件發送給用戶郵箱后,監控系統本身沒有必要接受別的郵件服務器發送的郵件,因此只需要使用服務器本身自帶的sendmail來發送報警信息即可。用sendmail的另外一個目的就是簡便。
如果系統是redhat 或 centos ,只需執行 service sendmail start 啟動守護進程,然后再用dns服務器給它一個合法的域名(即A記錄),馬上就可以用mail命令來發送測試郵件到你的某個電子郵箱里了。收到測試郵件,就說明郵件系統配置結束,是不是很容易呢?這里給一個發送郵件的例子:
mail -s "This is sery's nagios test mail" sery@163.com < install.log
#p#
自我監控實現:測試短信發送
正常情況下,沒有任何服務器能向手機發送短消息的,要到達這個目的,得花錢購買短信服務(也有些人運用飛信一類的方式來達到這個目的,個人覺得對于運營網站不是太靠譜)。要是在幾年前,自己申請短信通道還是有可能的,2005年以后似乎門檻提高了很多。當你付費成功后,短信服務商會給你提供入口及加密關鍵字;然后我們自己寫個腳本就可以發送短信。以下是我的服務器用perl寫的腳本:
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use URI::Escape;
use Digest::MD5;
my ($mobile, $content) = @ARGV;
my $log_control = 1;
my $key = 'Ysdbyhd6T';
my $souce_content = substr($mobile, 0, 8) . substr($mobile, -10, 10) . $key;
my $md5 = Digest::MD5->new;
$md5->add($souce_content);
my $result_conent = uc($md5->hexdigest);
my $url = "http://http.asp.sh.cn/MT.do?Username=sery&Password=([-BVG'0&Mobile=$mobile&Content=$content&Keyword=$result_conent";
my $result = get $url;
if($log_control) {
my $fh;
open($fh, '>> /var/log/sms.log') or die "can't open log: $!";
print $fh join(' ', time, $result, "\n");
close $fh;
}
(以上腳本有宇捷提供)
說明:
1、my $key = 'Ysdbyhd6T'' 短信服務商給的驗證關鍵字。
2、my $url="….." 短信服務商給的用戶名、密碼以及短信服務商的訪問接口(url)全包括在這里了。
我們把這個文件放在目錄 /usr/local/bin/ 下面,把它命名為 sms_send.pl ,用命令 chomod +x /usr/local/bin/sms.pl 給與它執行權限。這個腳本在各種各樣的unix、linux下都可以正常工作,nagios報警短信發送就是靠它了。如果讀者也打算拿這個腳本發送短信的話,只要改一下key值和url值就可以直接使用。
接下來就是驗證是否可以發送短信,執行命令行 /usr/local/bin/sms.pl 13300108888 "It is a test" ,回車后數秒鐘,你的手機應該能收到帶有內容"It is a test"的短信息。為了保證短信服務的可靠性,我做了一個策略:每天下午6點定時給我發一個通知短信;告訴我短信發送是正常的,也是該下班回家了。做法:執行 crontab -e 然后輸入行 00 18 * * * /usr/local/bin/sms.pl 13300108888 "It is Ok" 。
【編輯推薦】