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