開源監控利器
nagios
實戰
做者:田逸(sery@163.com) from:
http://net.it168.com/a2009/0309/267/000000267878.shtml
俗話說:工欲善其事,必先利其器.要作好系統管理,使本身的工做更輕鬆更有效的話,一個好的監控工具是必不可少的了.在這裏我向你們推薦一款我使用了4年多的、功能強大、可靈活定製的開源監控利器---nagios。
首先,咱們來看實際工做中須要監控的對象有哪些?在這裏我總結出2種類型的監控對象:網絡服務監控及主機資源監控。網絡服務監控可包括主機存活檢查、web服務監控、ftp服務監控、數據庫服務監控、自定義服務監控等;主機資源監控可包括系統負載、當前ip連接數、磁盤空間使用狀況、當前進程數以及自定義的資源監控等。
其次,咱們再來看nagios監控的表現形式。監控的主要目的是當監控的對象發生故障或資源緊張時及時通知相關人員,以便問題獲得迅速的處理。追求的效果就是「在老闆和客戶發現問題以前獲得及時、有效的通知」,假定故障通知來自老闆,我想你們都不會很愉快的。Nagios爲了方便咱們的管理工做,提供了至少3種表現手段:
一、web方式,即經過瀏覽器觀看被監控的對象;如正常狀態下,其狀態(status)是以藍色填充並顯示一個OK。
二、郵件通知,發生故障時,到達設定重試次數和探測間隔時間後發送郵件給管理員或相關人員,報告問題的大體狀況。
三、手機短信,這是很是有用和及時的功能了;晚上熟睡中,再也沒可能看web頁面或查閱郵件,能夠一旦發生故障,手機短信卻能把你隨時喚醒。
通常狀況下,這3者是同時進行的:上班時間開個瀏覽器看頁面顯示、打開郵件程序定時收取郵件、手機24小時在線。
最後,咱們以一個實際場景來展現nagios的強大功能,但願對你們的系統管理工做有所幫助。
場景描述
爲了描述問題方便,咱們假定有5個服務器要監控(web服務器、數據庫服務器、郵件服務器、nfs文件共享服務器),須要對幾個服務器的服務進行監控,同時監控每一個服務器的資源使用狀況,包括負載狀況、磁盤分區使用狀況、總進程數、當前ip鏈接數這個4個項目(固然你也能夠本身寫腳本監控更多的資源對象)。這些服務器除了系統管理員而外,還有其餘用戶(如程序員)對各自的服務器進行維護;當發生故障的時候,維護網站的程序員能收到報警郵件和報警短信,而管理數據庫管理員則無需收到這些報警,同時維護程序的用戶能夠以本身的賬號登錄監控服務器,經過web方式察看本身所管服務器的狀態(只能看本身的而看不到別人管轄服務器的狀態)。
經過上面的描述,咱們能夠整理出下面的表格:
配置好nagios和被監控機器後,其在瀏覽器裏的基本輸出與下圖相似:
Nagios服務器的自我監控實現
要實現資源和服務兩個方面的監控,須要配置服務器端(nagios server)及被監控端(NRPE-nagios remote plugin executor).爲了能順利地、有條理的部署nagios監控平臺,一個好的工做風格是在nagios server自身實現服務和資源的監控,而後再在其餘監控端部署nrpe,從nagios server端用check_nrpe測試經過後,再在nagios server配置文件中逐一增長監控項目。固然若是隻是監控服務而不監控主機資源,則被監控端不作任何nrpe的安裝。爲了方便初學者更容易上手和成功,咱們就從簡單的步驟開始。
1、 配置郵件發送功能
由於報警郵件發送給用戶郵箱後,監控系統自己沒有必要接受別的郵件服務器發送的郵件,所以只須要使用服務器自己自帶的sendmail來發送報警信息便可。用sendmail的另一個目的就是簡便。
若是系統是redhat 或 centos ,只需執行 service sendmail start 啓動守護進程,而後再用dns服務器給它一個合法的域名(即A記錄),立刻就能夠用mail命令來發送測試郵件到你的某個電子郵箱裏了。收到測試郵件,就說明郵件系統配置結束,是否是很容易呢?這裏給一個發送郵件的例子:
mail -s 「This is sery’s nagios test mail」 sery@163.com < install.log
2、測試短信發送
正常狀況下,沒有任何服務器能向手機發送短消息的,要到達這個目的,得花錢購買短信服務(也有些人運用飛信一類的方式來達到這個目的,我的以爲對於運營網站不是太靠譜)。要是在幾年前,本身申請短信通道仍是有可能的,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」 。
3、部署apache
Apache應該是咱們最經常使用的部署了,它能夠被弄得很複雜,但在nagios 這個平臺上,咱們只須要簡單的功能便可,爲了驗證用戶,咱們稍微加一點修改就好了。這樣作也是爲了體現「越簡單越容易的思想」。作得簡單,之後從新部署或恢復就越迅速、越沒壓力[1]。
(一)安裝apache
tar zxvf httpd-
2.2.8
.tar.gz
cd httpd-
2.2.8
./configure --prefix=/usr/local/apache #僅僅須要這麼一個選項
make
make install
(二)檢查apache是否被正確的安裝
1、執行 /usr/local/apache/bin/apachectl –t 檢查apache的配置文件語法是否正確。未經更改的apache配置文件語法顯然是正確無誤的,當咱們對配置文件httpd.conf 或其包含的文件做了更改的時候,最好先運行一下這個命令,它的錯誤輸出能迅速定位配置文件哪裏出現了錯誤。
2、執行命令行 /usr/local/apache/bin/apachectl start 啓動apache守護進程,在別的機器的瀏覽器裏輸入這個服務器的ip地址,看是否能夠正常瀏覽apache的默認頁面—一般是一個「IT works!」。爲了方便之後維護apache 更方便些,咱們能夠修改環境變量文件/etc/profile,在文件的末尾追加行 「export PATH=$PATH:/usr/local/apache/bin 「,保存後執行 source /etc/profile 使其修改當即生效,這樣咱們之後執行apache 啓動之類的命令就沒必要輸很長一串路徑,直接輸入 apachectl start 就能夠了。
(三)修改apache配置文件httpd.conf
1、修改apache運行用戶和組。默認是daemon,須要把它改爲nagios。這樣它纔能有權限訪問咱們安裝的nagios目錄,執行相關的cgi命令,如經過瀏覽器界面關閉nagios、中止某個故障對象發送報警信息等。
2、添加nagios訪問目錄(nagios 的安裝路徑/usr/local/nagios),同時使用http用戶驗證。把下面的內容追加到httpd.conf文件的末尾:
.Alias /nagios/cgi-bin /usr/local/nagios/sbin
<Directory "/usr/local/nagios/sbin">
AuthType Basic
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd
Require valid-user
</Directory>
Alias /nagios /usr/local/nagios/share
<Directory "/usr/local/nagios/share">
AuthType Basic
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd
Require valid-user
</Directory>
照這樣一種方式修改配置文件,保證不會把配置文件改得一塌糊塗,我相信大部分初學者都有把文件修改後而不知道文件自己的原貌。到這步配置文件雖然修改好了,但還不能經過語法檢查,由於有2個與之相關聯的東西還不存在,他們是用戶和組nagios及apache的驗證用戶文件
/usr/local/nagios/etc/htpasswd .
在後續操做中完成這任務後,再驗證不遲。
4、部署nagios服務
(一)
添加賬戶,以用來運行Nagios。固然也能夠用root運行,但出於安全考慮而使用普通賬號來運行,而且不給這個帳號分配shell登陸權限.
一、 linux
增長賬號的操做爲 useradd nagios –s /sbin/nologin 添加賬號就自動生成同名組 nagios。
二、 freebsd
增長賬號的操做爲 pw groupadd nagios ; pw useradd nagios –g nagios –s /sbin/nologin.
注意:不要給nagios用戶設置密碼。
(二)安裝nagios軟件
tar zxvf nagios-2.9.tar.gz
cd nagios-2.9
./configure –prefix=/usr/local/nagios ----with-nagios-user=nagios --with-nagios-group=nagios
make all
make install 執行完這個步驟後,程序會提示依次運行 make install-init , make install-commandmode ,make install-config 這幾個命令。咱們選取其中的兩個來執行:
make install-commandmode
make install-config
跟通常的
gnu
源碼軟件安裝相比,
nagios
的安裝多了幾個步驟(通常的軟件運行到
make install
就算安裝完了)。固然也能夠連這兩步都不執行,用手工賦予目錄或文件權限,再手動建立配置文件,其效果徹底相同。安裝完
nagios
後
,
咱們能夠在安裝目錄
/usr/local/nagios
下生成下面的目錄
:
(三)安裝nagios插件
沒有插件,nagios將什麼做用也沒有,插件也是nagios擴展功能的強大武器,除了下載經常使用的插件外,咱們還能夠根據實際要求編寫本身的插件。Nagios的插件nagios-plugins-
1.4.9
在www.nagios.org上能夠找到,接着咱們用wget下載它。注意:插件與nagios之間的版本關聯不大,不必定非得用nagios-plugins-1.4.9這個版本。下載完成後,安裝它是很簡單的:先執行配置 ./configure –prefix=/usr/local/nagios ,接着編譯安裝 make ; make install便可。這裏須要說明一下的是在配置過程指定的安裝路徑是/usr/local/nagios,而不是/usr/local/nagios-plus,安裝完成後,將在目錄/usr/local/nagios生成目錄libexec(裏面有不少文件),這正是nagios所須要的。
(四)配置nagios
配置是nagios最複雜的部分,讓咱們耐心一些,逐個處理,配置成功也不是什麼難事。剛安裝完成的nagios,其配置文件的目錄是/usr/local/nagios/etc,下圖是其etc目錄的文件:
先把這些文件更名,如 cgi.cfg-sample改爲cgi.cfg ,用命令cp cgi.cfg-sample cgi.cfg …依樣把餘下的幾個*.cfg-sample都複製成*.cfg文件。從nagios2.6版開始,不用修改配置文件localhost.cfg就能夠直接運行../bin/nagios –v nagios.cfg驗證程序是否能正常運行(nagios2.5及之前版本的最小運行的配置文件是minimal.cfg,但須要修改這個文件多處才能驗證成功)。固然,咱們不能期望這個最小的配置文件可以知足實際的需求,所以,須要對現有的配置文件進行修改,其次增長自定義的一些配置文件。經過複製這些自帶的模板文件,咱們能夠得出幾個主要的配置文件,咱們能夠把它歸類爲:
依照這個表格,咱們逐一配置之。
1、修改主配置文件nagios.cfg.基於方便維護的原則,把各個配置目標單獨放在文件中,如聯繫人信息在contacts.cfg中定義。Nagios.cfg文件比較長,我只把修改過的內容貼出來:
#
註釋或刪掉這行
#cfg_file=/usr/local/nagios/etc/localhost.cfg
#
主機配置文件路徑
cfg_file=/usr/local/nagios/etc/hosts.cfg
#//
主機組配置文件路徑
cfg_file=/usr/local/nagios/etc/hostgroups.cfg
#
聯繫人配置文件路徑
cfg_file=/usr/local/nagios/etc/contacts.cfg
#
聯繫組配置文件路徑
cfg_file=/usr/local/nagios/etc/contactgroups.cfg
#
服務配置文件路徑
cfg_file=/usr/local/nagios/etc/services.cfg
#
監視時段配置文件路徑
cfg_file=/usr/local/nagios/etc/timeperiods.cfg
#
在
web
界面下重啓
nagios
、中止主機
/
服務檢查等操做
,.
默認值是
0.
check_external_commands=1
#
根據本身的狀況定這個命令檢查時間間隔
.
默認值是
1
秒
.
command_check_interval=10s
2、修改cgi配置文件cgi.cfg.跟修改nagios.cfg同樣,只貼出被修改之處:
#
若有多個用戶,中間用逗號隔開
authorized_for_system_information=sery
authorized_for_configuration_information=sery
authorized_for_system_commands=sery
authorized_for_all_services=sery
authorized_for_all_hosts=nagiosadmin,sery
authorized_for_all_service_commands=sery
authorized_for_all_host_commands=sery
在這裏指定的用戶」sery」能夠經過瀏覽器操縱nagios服務的關閉、重啓等各類操做。
3、修改commands.cfg配置文件
這個文件已經包含了發送郵件報警的部分,所以只須要再把短信報警的部分加上就能夠了
###### host-notify-by-sms command definition
define command{
command_name host-notify-by-sms
command_line /usr/local/bin/sms.pl $CONTACTPAGER$ "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$"
}
###### service-notify-by-sms command definition
define command{
command_name service-notify-by-sms
command_line /usr/local/bin/sms.pl $CONTACTPAGER$ "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$"
}
第一個塊定義主機報警的內容,即主機發生死機、恢復等狀況發送手機短信報警,其接受者和發送內容由「$..$」定義的宏來決定。第二個塊定義服務報警內容,即監控的服務或監控的主機資源發生故障時發送手機報警短信。Nagios規定,若是探測到被監控的主機停機或不可達,它就再也不探測這個停機主機上的服務。通俗地一點理解:主機都停了,固然服務也跟着停了!另一個須要注意的地方是命令行(command_line)路徑必定要用全路徑,這裏調用的命令就是咱們在全面編寫的那個腳本sms.pl。
四、 新增其餘配置文件
在主配置文件nagios.cfg中,咱們註釋了行 cfg_file=/usr/local/nagios/etc/localhost.cfg ,而使用若干單獨的配置文件來定義各類對象,這樣能夠得到維護方便、書寫規範等諸多方面的好處。這些單獨的配置文件不是天然存在的,咱們須要手工建立並添加內容。固然,一開始咱們並非很清楚怎麼往這些文件裏添加內容,只好回過頭去看官方文檔,天啦,太分散了,盡然不知道怎麼着手了!怎麼辦?打開文件localhost.cfg-sample,內心基本上就有數了:無非是把這個文件拆分開來,造成多個文件嘛!下面我按新添一個主機進入監控的較優方式添加這些配置文件(固然也能夠有其它的順序,這並不影響監控的效果)。好了,咱們先把nagios服務器自己給監控上,這些監控包括:主機存活、web服務監控、磁盤空間監控、負載監控、進程數監控、ip鏈接數監控。
(1)、定義主機配置文件hosts.cfg
define host {
host_name nagios-server
alias nagios server
address 59.26.240.63
contact_groups sagroup
check_command check-host-alive
max_check_attempts 5
notification_interval 10
notification_period 24x7
notification_options d,u,r
}
說明:
●
聯繫組contact_group沒有創建,需在後面的步驟完成。
●
主機檢查命令行通常選擇檢查主機存活check-host-alive。
●
最大嘗試次數最好不要設置爲「1」,通常3-4次比較合理。
●
通知時間間隔notification_interval 根據本身實際狀況設定,它的單位是分鐘。
●
通知選項notification_options 幾個值的意思是 d-down,u-unreacheable,r-recovery.
(2)、定義主機組配置文件hostgroups.cfg
define hostgroup {
hostgroup_name sa-servers
alias sa servers
members nagios-server
}
說明:
●
這個配置文件不是必須的,爲了在瀏覽器裏方便歸類及察看狀態,能夠添加這個文件。
●
主機組的成員必須是在hosts.cfg裏已經定義了的,多個主機成員間用逗號分隔。
(3)、定義聯繫人配置文件contacts.cfg
define contact {
contact_name sery
alias system administrator
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands service-notify-by-email,service-notify-by-sms
host_notification_commands host-notify-by-email,host-notify-by-sms
email sery@163.com
pager 13301000018
}
說明:
●
服務通知選項 w-warning,u-unknown,c-critical,r-recovery.
●
主機通知選項 d-down,u-unreacheable,r-recovery。
●
服務通知命令行及服務通知命令行在配置文件commands.cfg中獲得定義,若是有報警發生,則郵件和手機短信一塊兒發送給相關人,即下兩行定義的email,pager.
●
收報警信息的郵件和手機,一我的若有2個手機,手機號之間有逗號分隔,郵件也如此。
● 若是這裏定義的用戶須要經過瀏覽器察看他所負責的服務器監控狀態的話,還須要 用apache的工具htpasswd增長同名賬號。
(4)、定義聯繫組配置文件contactgroups.cfg
define contactgroup {
contactgroup_name sagroup
alias system administrator group
members sery
}
說明:
●
當有多我的行使一樣的職責時,定義成組是很是有用的。
●
多個成員之間用逗號分隔。
●
成員必須在聯繫人配置文件(contacts.cfg)已經定義。