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