Nagios是一款開(kāi)源的免費(fèi)網(wǎng)絡(luò)監(jiān)視工具,能有效監(jiān)控Windows、Linux和Unix的主機(jī)狀態(tài),交換機(jī)路由器等網(wǎng)絡(luò)設(shè)備,打印機(jī)等。在系統(tǒng)或服務(wù)狀態(tài)異常時(shí)發(fā)出郵件或短信報(bào)警第一時(shí)間通知網(wǎng)站運(yùn)維人員,在狀態(tài)恢復(fù)后發(fā)出正常的郵件或短信通知。
Nagios是一個(gè)監(jiān)視系統(tǒng)運(yùn)行狀態(tài)和網(wǎng)絡(luò)信息的監(jiān)視系統(tǒng)。Nagios能監(jiān)視所指定的本地或遠(yuǎn)程主機(jī)以及服務(wù),同時(shí)提供異常通知功能等。
Nagios可運(yùn)行在Linux/Unix平臺(tái)之上,同時(shí)提供一個(gè)可選的基于瀏覽器的WEB界面以方便系統(tǒng)管理人員查看網(wǎng)絡(luò)狀態(tài),各種系統(tǒng)問(wèn)題,以及日志等等。
Nagios所需要的運(yùn)行條件是機(jī)器必須可以運(yùn)行Linux(或是Unix變種)并且有C語(yǔ)言編譯器。你必須正確地配置TCP/IP協(xié)議棧以使大多數(shù)的服務(wù)檢測(cè)可以通過(guò)網(wǎng)絡(luò)得以進(jìn)行。你需要但并非必須正確地配置Nagios里的CGIs程序,而一旦你要使用CGI程序時(shí),你必須要安裝以下這些軟件...一個(gè)WEB服務(wù)(最好是Apache)
1.安裝基礎(chǔ)支持套件和添加用戶
nagios需要一些基礎(chǔ)支持套件才能運(yùn)行,如apache,gcc,glibc,gd庫(kù)等。
添加一個(gè)名為nagios的用戶用以專門跑nagios
添加nagcmd用戶組,用以通過(guò)web頁(yè)面提交外部控制命令
將nagios用戶加入nagcmd組
將apache用戶加入nagcmd組
2.安裝nagios
這時(shí)nagios基本已經(jīng)安裝完成,默認(rèn)安裝后的配置文件用于啟動(dòng)nagios是沒(méi)有問(wèn)題的。
修改nagiosadmin這行其中的郵件地址為你的email地址,以將報(bào)警郵件發(fā)到你的郵箱
安裝nagios的web接口
設(shè)置登陸web界面時(shí)HTTP驗(yàn)證的賬號(hào)密碼
3. 安裝nagios-plugins
nagios-plugins是nagios官方提供的一套插件程序,nagios監(jiān)控主機(jī)的功能其實(shí)都是通過(guò)執(zhí)行插件程序來(lái)實(shí)現(xiàn)的。
4.安裝nagios-snmp-plugins
nagios-snmp-plugins是一套用Perl編寫的通過(guò)SNMP方式監(jiān)控主機(jī)的插件程序。
配置這些插件的使用時(shí)需要配置cpan,CPAN是Comprehensive Perl Archive Network的縮寫.。它是一個(gè)巨大的Perl軟件收藏庫(kù),收集了大量有用的Perl模塊(modules)及其相關(guān)的文件。這里主要是使用Perl-Net-SNMP模塊。有兩種方式安裝:
A)通過(guò)CPAN來(lái)安裝
B) 手工安裝
首先去官方網(wǎng)站下載以下幾個(gè)模塊
Crypt::DES
Digest::MD5
Digest::SHA1
Digest::HMAC
Net::SNMP
下載后對(duì)于每個(gè)模塊依次按照下面的方式安裝
表示模塊名,具體請(qǐng)按上面提到的模塊替換
注意:Net::SNMP模塊必須在最后安裝。至此Net::SNMP手動(dòng)安裝完畢
執(zhí)行nagios-snmp-plugins安裝腳本,執(zhí)行之后會(huì)將插件命令安裝到/usr/local/nagios/libexec下
5.其他設(shè)置
至此nagios基本已經(jīng)安裝完畢,但這時(shí)還不能馬上啟動(dòng)nagios,需要以下設(shè)置。
將nagios添加到服務(wù)中
檢測(cè)nagios的配置是否正確,在后面配置nagios過(guò)程中我們?yōu)榱藱z測(cè)配置的是否正確需要不斷執(zhí)行該命令來(lái)檢查配置文件。
#service nagios start 啟動(dòng)nagios
需要注意的是,Centos默認(rèn)打開(kāi)了selinux并且運(yùn)行于強(qiáng)制安全模式,這將導(dǎo)致在打開(kāi)nagios的web界面時(shí)會(huì)出現(xiàn)Internet Server Error的錯(cuò)誤。
查看是否運(yùn)行于強(qiáng)制模式,結(jié)果為1表示是
更改selinux運(yùn)行于寬容模式
但是這個(gè)設(shè)置重啟后就會(huì)失效,如需要重啟后保持該設(shè)置需要修改/etc/sysconfig/selinux,將其中的SELINUX= enforcing更改為SELINUX= permissive并重啟系統(tǒng)。當(dāng)然你也可以改成disable禁用selinux。
也可以不更改selinux的運(yùn)行模式,解決辦法為:
6.實(shí)現(xiàn)MSN報(bào)警
要實(shí)現(xiàn)MSN報(bào)警需要使用phpmsnclass,這是一個(gè)用php實(shí)現(xiàn)的msn機(jī)器人程序。
下載phpmsnclass,此文件為7zip壓縮格式,需要安裝7z
phpmsnclass需要php支持,安裝php,這里為了方便就直接完成LAMP環(huán)境的安裝
安裝mysql數(shù)據(jù)庫(kù),后面安裝cacti需要
由于安全原因請(qǐng)將mysql設(shè)置為只監(jiān)聽(tīng)在127.0.0.1上,并刪除mysql庫(kù)中默認(rèn)的除了外的所有用戶,相關(guān)設(shè)置請(qǐng)見(jiàn)以前的關(guān)于postfix安裝中的設(shè)置。
msn報(bào)警有2種方式,一種是直接使用php進(jìn)行登陸驗(yàn)證發(fā)送消息,另外一個(gè)是以msn機(jī)器人的形式發(fā)送,將消息存儲(chǔ)在目錄內(nèi)。這里采用第二種。
下面把msnbot.php, config.php和msn.class.php拷貝到/var/spool/msnbot/
這個(gè)機(jī)器人的工作原理是如果要發(fā)送消息,就調(diào)用php生成消息文件到
/var/spool/msnbot/spool目錄中,發(fā)送程序檢查到該目錄有新文件就會(huì)模擬msn登陸和發(fā)信將信息發(fā)送出去。
在配置文件中設(shè)置MSN的賬號(hào)和密碼(以后報(bào)警通過(guò)這個(gè)MSN發(fā)出)
在啟動(dòng)函數(shù)里執(zhí)行的php文件前要加上php (php后有空格)
下面發(fā)個(gè)消息測(cè)試一下
如果成功接收到信息說(shuō)明配置正確,此步驟到此結(jié)束,后面的能讓Nagios使用MSN進(jìn)行報(bào)警的功能需要到Nagios里設(shè)置了。
如果需要支持離線消息即當(dāng)你在離線狀態(tài)下也能接收到機(jī)器人的信息,需要使用MSNP15協(xié)議,修改相關(guān)發(fā)信的php文件將聲明新類的地方new MSN的第一個(gè)參數(shù)改為MSNP15
nagios目錄結(jié)構(gòu)比較清晰,安裝后下面一共有bin etc libexec sbin share var幾個(gè)目錄,其中配置文件都存放在etc目錄下,bin下存放的是nagios的相關(guān)命令,sbin下存放的是通過(guò)web方式外部執(zhí)行的cgi,libexec存放的是所有插件,而var則存放的是log和pid文件等。而實(shí)現(xiàn)監(jiān)控都是依靠執(zhí)行插件來(lái)實(shí)現(xiàn)的。
要實(shí)現(xiàn)監(jiān)控,需要在nagios中定義一個(gè)service,在這個(gè)service中指定監(jiān)控對(duì)象和監(jiān)控命令以及報(bào)警機(jī)制等。Nagios的配置關(guān)系可以按照?qǐng)D1所示來(lái)做說(shuō)明:
nagios的配置也比較清晰明了,etc目錄下默認(rèn)有objects目錄和一些配置文件,其中objects里放的是主配置文件nagios.cfg包含進(jìn)去的配置文件。在nagios.cfg中既可以指定單獨(dú)包含一個(gè)cfg,也可以指定一個(gè)包含目錄,即該目錄下所有的cfg文件都會(huì)包含進(jìn)來(lái)。
首先我們配置下主配置文件,為了目錄的清晰我們自己建立一些目錄來(lái)存放相關(guān)的配置文件,比如建立commands目錄存放命令,建立services目錄存放服務(wù),建立hosts目錄存放主機(jī),在nagios.cfg文件中找到cfg_file的部分,下面是一個(gè)示例,實(shí)際部署的時(shí)候可以按照你自己的情況去設(shè)置:cfg_file=/usr/local/nagios/etc/objects/commands.cfg 包含配置文件,下同
這里先說(shuō)明一下,監(jiān)控都是依靠插件去完成的,舉個(gè)例子說(shuō)明,如我們要監(jiān)控60.222.111.83這臺(tái)服務(wù)器的虛擬內(nèi)存,當(dāng)達(dá)到70%的時(shí)候狀態(tài)為警告,達(dá)到90%的時(shí)候?yàn)閲?yán)重。這個(gè)依靠這個(gè)插件來(lái)完成。
其中-H參數(shù)表示主機(jī)地址,-C參數(shù)表示SNMP團(tuán)體名稱,-2表示使用SNMP v2協(xié)議,-w為warning(警告)狀態(tài)的閾值,-c表示為critical(嚴(yán)重)狀態(tài)的閾值
要用nagios實(shí)現(xiàn)監(jiān)控某主機(jī),就是要實(shí)現(xiàn)用nagios調(diào)用這樣的命令即可。
配置resource.cfg,文件內(nèi)容:
[root@localhost etc]# cat resource.cfg |grep -v '#'| sed /^$/d //查看resource.cfg配置
$USER1$=/usr/local/nagios/libexec
$USER7$=-C mypublic -2
這里其實(shí)是定義兩個(gè)變量$USER1$和$USER7$,因?yàn)樵诤竺娑xcommand的時(shí)候插件的路徑是絕對(duì)路徑,為了節(jié)省輸入直接可以用$USER1$代替/usr/local/nagios/libexec。而SNMP插件的命令行中的參數(shù)需要設(shè)置SNMP相關(guān)的信息,為節(jié)省輸入這里用$USER7$來(lái)代替
-C mypublic -2。大家可對(duì)照上面檢測(cè)60.222.111.83的虛擬內(nèi)存的例子結(jié)合來(lái)加以理解。
下面我們來(lái)定義一個(gè)command用以監(jiān)控,仍然以在nagios中實(shí)現(xiàn)監(jiān)控60.222.111.83這臺(tái)主機(jī)的虛擬內(nèi)存為例說(shuō)明。為了目錄結(jié)構(gòu)的清晰,我們將command的定義都放到commands目錄下。在commands下建立一個(gè)cfg后綴的文件
其中的$USER1$和$USER7$即為我們?cè)谏厦娴膔esource.cfg中定義的兩個(gè)變量,$HOSTADDRESS$為我們?cè)谙旅嬉x的主機(jī)。
這樣我們完成對(duì)一個(gè)service的定義,定義監(jiān)控對(duì)象我們這里是定義了3個(gè)組,即屬于這3個(gè)組的所有主機(jī)都會(huì)檢測(cè)虛擬內(nèi)存(注意:組必須在其他文件中事先定義好)。當(dāng)然你也可以用host_name針對(duì)主機(jī)作為檢測(cè)對(duì)象(多主機(jī)用逗號(hào)分隔)。監(jiān)控周期和報(bào)警周期我們?cè)O(shè)置的都是24x7,這個(gè)會(huì)在后面去定義。定義報(bào)警狀態(tài)中的w表示warning,u表示unknown,c表示critial,r表示recovery(即恢復(fù)后是否發(fā)送通知);報(bào)警選項(xiàng)一般生產(chǎn)環(huán)境下設(shè)置w,c,r即可。最后我們看到實(shí)現(xiàn)監(jiān)控的主體部分
check_command check_snmp_storage!-m "^Virtual Memory$"!70!90
定義實(shí)現(xiàn)這個(gè)檢測(cè)的命令,check_snmp_storage即為我們上面在commands里定義的命令名,
!表示帶入的參數(shù),這里有三個(gè)!表示帶入三個(gè)參數(shù)到command里,每個(gè)參數(shù)之間用!分隔,這里表示第一個(gè)參數(shù)為-m “^Virtual Memory$”,第二個(gè)參數(shù)為70,第三個(gè)參數(shù)為90。
這里的$ARG1$即表示參數(shù)1,$ARG2即表示參數(shù)2,$ARG3$即表示參數(shù)3
而$HOSTADDRESS$是我們定義的檢測(cè)對(duì)象,它的值就是我們的主機(jī)IP地址;$USER1$和$USER7$為在resource.cfg里的定義。
而這個(gè)命令就是我們實(shí)現(xiàn)監(jiān)控83的虛擬內(nèi)存的命令!
設(shè)置3個(gè)參數(shù)是為了靈活的針對(duì)不同主機(jī)的調(diào)用,如果你對(duì)不同的主機(jī)設(shè)置的閾值不同,只需要對(duì)不同的主機(jī)定義不同的service即可,command是可以通用的!而這里的參數(shù)1也是為了實(shí)現(xiàn)不同的功能而設(shè)置的,這個(gè)腳本還可以檢測(cè)物理內(nèi)存,如果我們把參數(shù)1的值設(shè)置為”^Phisical Memory$”就可以針對(duì)物理內(nèi)存進(jìn)行檢測(cè)!定義command的時(shí)候參數(shù)的個(gè)數(shù)的設(shè)定是你可以根據(jù)需要設(shè)置的。只需要在后面service中能將參數(shù)值代到command中最終能實(shí)現(xiàn)你要檢測(cè)的命令即可。到此為止你可以感受到nagios的靈活性了吧。
到這里我們基本實(shí)現(xiàn)了nagios的監(jiān)控功能,下面我們繼續(xù)來(lái)看看其他設(shè)置。在定義host的時(shí)候我們有個(gè)主機(jī)模板的設(shè)置,這個(gè)設(shè)置的定義在object/template.cfg中定義的,這是一個(gè)系統(tǒng)自帶的配置文件,關(guān)于我們所使用的Windows-Server的模板定義內(nèi)容為:
上面我在該配置文件中增加了notify-service-by-msn和notify-service-by-msn的兩種報(bào)警命令
而關(guān)于報(bào)警的周期設(shè)置在objects下的timeperiods.cfg中,如我們上面在service里定義的7x24的報(bào)警周期設(shè)置內(nèi)容為
通過(guò)這里我們可以靈活設(shè)置報(bào)警時(shí)間以和報(bào)警方式結(jié)合,如周末和休息時(shí)間設(shè)置報(bào)警為發(fā)送短信和郵件,工作時(shí)間設(shè)置為發(fā)送郵件和MSN報(bào)警方式。
定義了4種報(bào)警命令,后面兩種msn報(bào)警是我添加的;郵件報(bào)警是使用系統(tǒng)自帶的sendmail來(lái)發(fā)送郵件的(注意要啟動(dòng)sendmail服務(wù)),而msn報(bào)警是使用我們上面所配置的msn機(jī)器人發(fā)送的報(bào)警信息。
至此,整個(gè)nagios的監(jiān)控和報(bào)警機(jī)制了解完畢。注意我們?cè)谂渲眠^(guò)程中的任何改動(dòng)都記得要去通過(guò)/usr/local/nagios/bin/nagios –c /usr/local/nagios/etc/nagios.cfg以檢查配置文件是否正確,如果正確則可以重啟nagios加載新配置(service nagios restart)
第三部分 安裝cacti
Cacti的運(yùn)行需要AMP(Apache + MySQL + PHP), RRDTool , net-snmp , AMP環(huán)境我們?cè)谏厦嬉呀?jīng)配置。
安裝rrdtool,rrdtool不能直接通過(guò)yum安裝,可以加入Dag RPM Repository以便讓yum能找到rrdtool
安裝cacti
下面開(kāi)始導(dǎo)入數(shù)據(jù)庫(kù),mysql數(shù)據(jù)庫(kù)的基本安全配置這里不做說(shuō)明,請(qǐng)參考以前的postfix郵件安裝文檔中的mysql設(shè)置部分。
mysql>create databasecacti; // 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)供cacti使用
mysql>usecacti;
Mysql>source /usr/local/cacti/cacti.sql // 導(dǎo)入mysql數(shù)據(jù)庫(kù)
Mysql>grant all privileges oncacti.* tocacti@localhostidentified by ‘cactipass’;
添加一個(gè)數(shù)據(jù)庫(kù)賬號(hào)cacti密碼為cactipass 用以訪問(wèn)cacti庫(kù)
Mysql>flush privileges; //刷新權(quán)限信息
Apache設(shè)置
#vi /etc/http/conf.d/cacti.conf //編輯cacti站點(diǎn)的配置文件,文件內(nèi)容如下:
Alias /cacti "/usr/local/wwwroot/cacti"
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
修改cacti的配置文件
修改其中的數(shù)據(jù)庫(kù)連接信息,設(shè)置好數(shù)據(jù)庫(kù)主機(jī)地址,用戶,密碼信息。
至此安裝完成,訪問(wèn)根據(jù)提示安裝cacti(ip換成你對(duì)應(yīng)的主機(jī)ip地址)
接下來(lái)安裝cacti的插件管理
復(fù)制相關(guān)文件到cacti下
第四部分 整合cacti和nagios
整合cacti和nagios是利用了cacti的一個(gè)插件nagios for cacti,它的原理是將nagios的數(shù)據(jù)通過(guò)ndo2db導(dǎo)入到mysql數(shù)據(jù)庫(kù)(cacti的庫(kù)中),然后cacti讀取數(shù)據(jù)庫(kù)信息將nagios的結(jié)果展示出來(lái)。
1.安裝ndoutils
首先需要安裝ndoutils以將nagios的數(shù)據(jù)能導(dǎo)入到mysql數(shù)據(jù)庫(kù)中。
修改nagios主配置文件
添加以下內(nèi)容
check_external_commands=1
command_check_interval=-1
event_broker_options=-1
broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg
process_performance_data=1
添加的內(nèi)容至此結(jié)束
2.安裝php-json
npc展示部分用到j(luò)son,需要在php中安裝php-json的支持,centos 5下的php 版本默認(rèn)是5.1.6 不帶json支持,無(wú)法簡(jiǎn)單地通過(guò)yum install php5-json方式來(lái)安裝。
#cd ~/downloads
編譯前初始化php環(huán)境
重啟apache
為了驗(yàn)證是否成功可使用phpinfo查看是否已支持json
3.安裝npc
啟用cacti的插件功能,以admin用戶登陸cacti,在console中的user management里對(duì)admin的用戶權(quán)限進(jìn)行編輯,勾選上Plugin Management,然后到插件管理中心安裝并啟用NPC即可。
至此完成nagios和cacti的整合。。
2009年08月13日,企業(yè)監(jiān)控系統(tǒng) Nagios 3.2.0 發(fā)布。
2010年10月05日,Nagios 3.2.3 發(fā)布,企業(yè)級(jí)監(jiān)控系統(tǒng)。
2012年05月08日,Nagios 3.4.0 發(fā)布,企業(yè)級(jí)監(jiān)控系統(tǒng)。
2012年05月14日,Nagios 3.4.1 發(fā)布。
2012年12月01日,Nagios 3.4.3 發(fā)布,企業(yè)級(jí)監(jiān)控系統(tǒng).
2013年01月18日,Nagios 3.4.4 發(fā)布,企業(yè)級(jí)監(jiān)控系統(tǒng)。
2013年03月18日,Nagios 3.5.0 發(fā)布,企業(yè)級(jí)監(jiān)控系統(tǒng)。
2013年09月20日,Nagios4.0.0 發(fā)布。
2013年10月15日,Nagios4.0.1發(fā)布。
2013年11月25日,Nagios4.0.2發(fā)布。
2014年02月18日,Nagios4.0.3發(fā)布。
2014年03月14日,Nagios4.0.4發(fā)布。
2014年04月11日,Nagios4.0.5發(fā)布。
2014年04月29日,Nagios4.0.6發(fā)布。
2014年06月03日, Nagios4.0.7發(fā)布,從本版本開(kāi)始國(guó)內(nèi)出現(xiàn)了持續(xù)中文漢化版
2014年08月12日,Nagios4.08發(fā)布。
2015年08月18日,Nagios4.1.0發(fā)布,這個(gè)版本最好不要用,參考如下面的版本。
2015年08月19日,緊急發(fā)布Nagios4.1.1版本,修改4.1.0嚴(yán)重出現(xiàn)的問(wèn)題CGi讀取配置問(wèn)題、指令!使
Nagios不工作問(wèn)題
Nagios 可以監(jiān)控的功能有:
1、監(jiān)控網(wǎng)絡(luò)服務(wù)(SMTP、POP3、HTTP、NNTP、PING等);
2、監(jiān)控主機(jī)資源(處理器負(fù)荷、磁盤利用率等);
3、簡(jiǎn)單地插件設(shè)計(jì)使得用戶可以方便地?cái)U(kuò)展自己服務(wù)的檢測(cè)方法;
4、并行服務(wù)檢查機(jī)制;
5、具備定義網(wǎng)絡(luò)分層結(jié)構(gòu)的能力,用"parent"主機(jī)定義來(lái)表達(dá)網(wǎng)絡(luò)主機(jī)間的關(guān)系,這種關(guān)系可被用來(lái)發(fā)現(xiàn)和明晰主機(jī)宕機(jī)或不可達(dá)狀態(tài);
6、當(dāng)服務(wù)或主機(jī)問(wèn)題產(chǎn)生與解決時(shí)將告警發(fā)送給聯(lián)系人(通過(guò)EMail、短信、用戶定義方式);
7、可以定義一些處理程序,使之能夠在服務(wù)或者主機(jī)發(fā)生故障時(shí)起到預(yù)防作用;
8、自動(dòng)的日志滾動(dòng)功能;
9、可以支持并實(shí)現(xiàn)對(duì)主機(jī)的冗余監(jiān)控;
10、可選的WEB界面用于查看當(dāng)前的網(wǎng)絡(luò)狀態(tài)、通知和故障歷史、日志文件等;
11、可以通過(guò)手機(jī)查看系統(tǒng)監(jiān)控信息;
12、可指定自定義的事件處理控制器;