Linux下Nagios的安裝與配置


一、Nagios概述


1、簡介


    Nagios是插件式的結構,它本身沒有任何監控功能,所有的監控都是通過插件進行的,因此其是高度模塊化和富於彈性的。Nagios監控的對象可分爲兩類:主機和服務。主機通常指的是物理主機,如服務器、路由器、工作站和打印機等,這裏的主機也可以是虛擬設備,如xen虛擬出的Linux系統;而服務通常指某個特定的功能,如提供http服務的httpd進程等。而爲了管理上的方便,主機和服務還可以分別被規劃爲主機組和服務組等。


    Nagios不監控任何具體數值指標(如操作系統上的進程個數),它僅用四種抽象屬性對被監控對象的狀態進行描述:OK、WARNING, CRITICAL和UNKNOWN。於是,管理員只需要對某種被監控對象的WARNING和CRITICAL狀態的閾值進行關注和定義即可。Nagios通過將WARTING和CRTICAL的閾值傳遞給插件,並由插件負責某具體對象的監控及結果分析,其輸出信息爲狀態信息(OK,WARNING,CRITICAL或UNKOWN)以及一些附加的詳細說明信息。


2、特性


    由上述說明可以,Nagios是極富彈性的,其監控功能完全可以按照管理員的期望進行。此外,它外提供了對問題的自動響應能力和一個功能強大的通知系統。所有這些功能的實現是基於一個結構明晰的對象定義系統和少數幾個對象類型實現的。


1) 命令(Commands)


    “命令”用於定義Nagios如何執行某特定的監控工作。它是基於某特定的Nagios插件定義出的一個抽象層,通常包含一組要執行的操作。


2)時段(Time periods)


    “時段”用於定義某“操作”可以執行或不能執行的日期和時間跨度,如工作日內的每天8:00-18:00等;


3)聯繫人和聯繫人組(Contacts and contact groups)


    “聯繫人”用於定義某監控事件的通知對象、要通知的信息以及這些接收通知者何時及如何接收通知;一個或多個聯繫人可以定義爲聯繫人組,而一個聯繫人也可以屬於多個組;


4) 主機和主機組(Host and Host groups)


    “主機”通常指某物理主機,其包括此主機相關的通知信息的接收者(即聯繫人)、如何及何時進行監控的定義。主機也可以分組,即主機組(host groups),一個主機可同時屬於多個組;


5) 服務(Services)


    “服務”通常指某主機上可被監控的特定的功能或資源,其包括此服務相關的通知信息的接收者、如何及何時進行監控等。服務也可以分組,即服務組(Service groups),一個服務可同時屬於多個服務組;


3、依賴關係


    Nagios的強大功能還表現在其成熟的依賴關係系統上。比如,某路由設備故障必然會導致關聯在其上的其它主機無法被正常訪問,如果不能定義這些設備間的依賴關係,那麼監控系統上必然會出現大量的設備故障信息。而Nagios則通過依賴關係來描述網絡設備的拓撲結構,並能夠實現在某設備故障時不再對依賴於此設備的其它設備進行檢測,從而避免了無謂的故障信息,方便管理員及時定位並排除故障。此外,Nagios的依賴關係還可以在服務級別上實現,如果某服務依賴於其它服務時,也能實現類似主機依賴關係的功能。


4、宏


    Nagios還能夠使用宏,並且宏的定義在整個Nagios系統中具有一致性。宏是能夠用於對象定義中的變量,其值通常依賴於上下文。在“命令”中定義的宏,相對於主機、服務或其它許多參數來說,其值會隨之不同。比如,某命令可以根據向其傳遞的IP地址的不同來監控不同的主機。


5、計劃中宕機


    Nagios還提供了調度性計劃中的宕機機制,管理員可以週期性的設定某主機或服務爲計劃中的不可用狀態。這種功能可以阻止Nagios在調度宕機時段通知任何信息。當然,這也可以讓Nagios自動通知管理員該進行主機或服務維護了。


6、軟狀態和硬狀態(Soft and Hard States)


    如上所述,Nagios的主要工作是檢測主機或服務的狀態,並將其存儲下來。某一時刻,主機或服務狀態僅可以是四種可用狀態之一,因此,其狀態能夠正確反映主機或服務的實際狀況就顯得特別關鍵。爲了避免某偶然的臨時性或隨機性問題,Nagios引入了軟狀態和硬狀態。在實際的檢測中,Nagios一旦發現某主機或服務的狀態爲UNKOWN或不同於上一次檢測時的狀態,其將會對此主機或服務進行多次測試以確保此狀態的變動是非偶然性的。具體共要做出幾次測試是可以配置的,在這個指定次數的測試時段內,Nagios假設此變化後的狀態爲軟件狀態。一旦測試完成後狀態仍然爲新變的狀態時,此狀態就成了硬狀態。


二、安裝配置Nagios


1、Nagios程序簡介


    Nagios通常由一個主程序(Nagios)、一個插件程序(Nagios-plugins)和四個可選的ADDON(NRPE、NSCA、NSClient++和NDOUtils)組成。Nagios的監控工作都是通過插件實現的,因此,Nagios和Nagios-plugins是服務器端工作所必須的組件。而四個ADDON中,NRPE用來在監控的遠程Linux/Unix主機上執行腳本插件以實現對這些主機資源的監控;NSCA用來讓被監控的遠程Linux/Unix主機主動將監控信息發送給Nagios服務器(這在冗餘監控模式中特別要用到);NSClient++是用來監控Windows主機時安裝在Windows主機上的組件;而NDOUtils則用來將Nagios的配置信息和各event產生的數據存入數據庫,以實現這些數據的快速檢索和處理。這四個ADDON(附件)中,NRPE和NSClient++工作於客戶端,NDOUtils工作於服務器端,而NSCA則需要同時安裝在服務器端和客戶端。

wKiom1R5e7fgpovGAAG7T00x0KE229.jpg


    目前,Nagios只能安裝在Linux系統主機上,其編譯需要用到gcc。同時,如果打算使用web界面的管理工具的話,還需要有apache服務器和GD圖形庫的支持。


2、安裝前的準備工作


(1)解決安裝Nagios的依賴關係:


Nagios基本組件的運行依賴於httpd、gcc、gd。可以通過以下命令來檢查nagios所依賴的rpm包是否已經完全安裝:

[root@DB2 ~]# yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-devel mysql-server


說明:以上軟件包您也可以通過編譯源代碼的方式安裝,只是後面許多要用到的相關文件的路徑等需要按照您的源代碼安裝時的配置逐一修改。此外,您還得按需啓動必要的服務,如httpd等。


(2)添加nagios運行所需要的用戶和組:

[root@DB2 ~]# groupadd nagcmd

[root@DB2 ~]# useradd -G nagcmd nagios

[root@DB2 ~]# passwd nagios


把apache加入到nagcmd組,以便於在通過web Interface操作nagios時能夠具有足夠的權限:


[root@DB2 ~]# usermod -a -G nagcmd apache


3、編譯安裝nagios:


[root@DB2 ~]# tar -zxf nagios-3.3.1.tar.gz 

[root@DB2 ~]# cd nagios

[root@DB2 nagios]# ./configure --with-command-group=nagcmd --enable-event-broker

*** Configuration summary for nagios 3.3.1 07-25-2011 ***:


 General Options:

 -------------------------

        Nagios executable:  nagios

        Nagios user/group:  nagios,nagios

       Command user/group:  nagios,nagcmd

            Embedded Perl:  no

             Event Broker:  yes

        Install ${prefix}:  /usr/local/nagios

                Lock file:  ${prefix}/var/nagios.lock

   Check result directory:  ${prefix}/var/spool/checkresults

           Init directory:  /etc/rc.d/init.d

  Apache conf.d directory:  /etc/httpd/conf.d

             Mail program:  /bin/mail

                  Host OS:  linux-gnu


 Web Interface Options:

 ------------------------

                 HTML URL:  http://localhost/nagios/

                  CGI URL:  http://localhost/nagios/cgi-bin/

 Traceroute (used by WAP):  



Review the options above for accuracy.  If they look okay,

type 'make all' to compile the main program and CGIs.

[root@DB2 nagios]# make all

*** Compile finished ***


If the main program and CGIs compiled without any errors, you

can continue with installing Nagios as follows (type 'make'

without any arguments for a list of all possible options):


  make install

     - This installs the main program, CGIs, and HTML files


  make install-init

     - This installs the init script in /etc/rc.d/init.d


  make install-commandmode

     - This installs and configures permissions on the

       directory for holding the external command file


  make install-config

     - This installs *SAMPLE* config files in /usr/local/nagios/etc

       You'll have to modify these sample files before you can

       use Nagios.  Read the HTML documentation for more info

       on doing this.  Pay particular attention to the docs on

       object configuration files, as they determine what/how

       things get monitored!


  make install-webconf

     - This installs the Apache config file for the Nagios

       web interface


  make install-exfoliation

     - This installs the Exfoliation theme for the Nagios

       web interface


  make install-classicui

     - This installs the classic theme for the Nagios

       web interface



*** Support Notes *******************************************


If you have questions about configuring or running Nagios,

please make sure that you:


     - Look at the sample config files

     - Read the documentation on the Nagios Library at:

           http://library.nagios.com


before you post a question to one of the mailing lists.

Also make sure to include pertinent information that could

help others help you.  This might include:


     - What version of Nagios you are using

     - What version of the plugins you are using

     - Relevant snippets from your config files

     - Relevant error messages from the Nagios log file


For more information on obtaining support for Nagios, visit:


       http://support.nagios.com


*************************************************************


Enjoy.

[root@DB2 nagios]# make install

*** Main program, CGIs and HTML files installed ***


You can continue with installing Nagios as follows (type 'make'

without any arguments for a list of all possible options):


  make install-init

     - This installs the init script in /etc/rc.d/init.d


  make install-commandmode

     - This installs and configures permissions on the

       directory for holding the external command file


  make install-config

     - This installs sample config files in /usr/local/nagios/etc


make[1]: Leaving directory `/root/nagios'

[root@DB2 nagios]# make install-init

/usr/bin/install -c -m 755 -d -o root -g root /etc/rc.d/init.d

/usr/bin/install -c -m 755 -o root -g root daemon-init /etc/rc.d/init.d/nagios


*** Init script installed ***

[root@DB2 nagios]# make install-commandmode

/usr/bin/install -c -m 775 -o nagios -g nagcmd -d /usr/local/nagios/var/rw

chmod g+s /usr/local/nagios/var/rw


*** External command directory configured ***

[root@DB2 nagios]# make install-config

/usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/etc

/usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/etc/objects

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/nagios.cfg /usr/local/nagios/etc/nagios.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/cgi.cfg /usr/local/nagios/etc/cgi.cfg

/usr/bin/install -c -b -m 660 -o nagios -g nagios sample-config/resource.cfg /usr/local/nagios/etc/resource.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/template-object/templates.cfg /usr/local/nagios/etc/objects/templates.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/template-object/commands.cfg /usr/local/nagios/etc/objects/commands.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/template-object/contacts.cfg /usr/local/nagios/etc/objects/contacts.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/template-object/timeperiods.cfg /usr/local/nagios/etc/objects/timeperiods.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/template-object/localhost.cfg /usr/local/nagios/etc/objects/localhost.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/template-object/windows.cfg /usr/local/nagios/etc/objects/windows.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/template-object/printer.cfg /usr/local/nagios/etc/objects/printer.cfg

/usr/bin/install -c -b -m 664 -o nagios -g nagios sample-config/template-object/switch.cfg /usr/local/nagios/etc/objects/switch.cfg


*** Config files installed ***


Remember, these are *SAMPLE* config files.  You'll need to read

the documentation for more information on how to actually define

services, hosts, etc. to fit your particular needs.


爲email指定您想用來接收nagios警告信息的郵件地址,默認是本機的nagios用戶:

[root@DB2 nagios]# vi /usr/local/nagios/etc/objects/contacts.cfg

email                           nagios@localhost       #這個是默認設置


在httpd的配置文件目錄(conf.d)中創建Nagios的Web程序配置文件:

[root@DB2 nagios]# cd /etc/httpd/conf.d/

[root@DB2 nagios]# make install-webconf

/usr/bin/install -c -m 644 sample-config/httpd.conf /etc/httpd/conf.d/nagios.conf


*** Nagios/Apache conf file installed ***


創建一個登錄nagios web程序的用戶,這個用戶帳號在以後通過web登錄nagios認證時所用:


[root@DB2 nagios]# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

New password: 

Re-type new password: 

Adding password for user nagiosadmin


以上過程配置結束以後需要重新啓動httpd:

[root@DB2 nagios]# service httpd restart

Stopping httpd: [  OK  ]

Starting httpd: httpd: apr_sockaddr_info_get() failed for DB2

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

[  OK  ]


Apache的安裝:

[root@DB2 ~]# wget http://archive.apache.org/dist/httpd/httpd-2.2.23.tar.gz

[root@DB2 ~]# tar -zxf httpd-2.2.23.tar.gz 

[root@DB2 ~]# cd httpd-2.2.23

[root@DB2 httpd-2.2.23]# ./configure --prefix=/usr/local/apache2 

[root@DB2 httpd-2.2.23]# make && make install


[root@DB2 php-5.6.2]# yum -y install libxml2

[root@DB2 php-5.6.2]# yum install libxml2-devel -y


PHP的安裝:

[root@DB2 ~]# wget http://cn2.php.net/distributions/php-5.6.2.tar.gz

[root@DB2 ~]# tar zxf php-5.6.2.tar.gz 

[root@DB2 ~]# cd php-5.6.2

[root@DB2 php-5.6.2]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs

Generating files

configure: creating ./config.status

creating main/internal_functions.c

creating main/internal_functions_cli.c

+--------------------------------------------------------------------+

| License:                                                           |

| This software is subject to the PHP License, available in this     |

| distribution in the file LICENSE.  By continuing this installation |

| process, you are bound by the terms of this license agreement.     |

| If you do not agree with the terms of this license, you must abort |

| the installation process at this point.                            |

+--------------------------------------------------------------------+


Thank you for using PHP.


config.status: creating php5.spec

config.status: creating main/build-defs.h

config.status: creating scripts/phpize

config.status: creating scripts/man1/phpize.1

config.status: creating scripts/php-config

config.status: creating scripts/man1/php-config.1

config.status: creating sapi/cli/php.1

config.status: creating sapi/cgi/php-cgi.1

config.status: creating ext/phar/phar.1

config.status: creating ext/phar/phar.phar.1

config.status: creating main/php_config.h

config.status: executing default commands

[root@DB2 php-5.6.2]# make && make install

Build complete.

Don't forget to run 'make test'.


Installing PHP SAPI module:       apache2handler

/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' libphp5.la /usr/local/apache2/modules

/usr/local/apache2/build/libtool --mode=install cp libphp5.la /usr/local/apache2/modules/

cp .libs/libphp5.so /usr/local/apache2/modules/libphp5.so

cp .libs/libphp5.lai /usr/local/apache2/modules/libphp5.la

libtool: install: warning: remember to run `libtool --finish /root/php-5.6.2/libs'

chmod 755 /usr/local/apache2/modules/libphp5.so

[activating module `php5' in /usr/local/apache2/conf/httpd.conf]

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

Installing PHP CLI binary:        /usr/local/php/bin/

Installing PHP CLI man page:      /usr/local/php/php/man/man1/

Installing PHP CGI binary:        /usr/local/php/bin/

Installing PHP CGI man page:      /usr/local/php/php/man/man1/

Installing build environment:     /usr/local/php/lib/php/build/

Installing header files:          /usr/local/php/include/php/

Installing helper programs:       /usr/local/php/bin/

  program: phpize

  program: php-config

Installing man pages:             /usr/local/php/php/man/man1/

  page: phpize.1

  page: php-config.1

Installing PEAR environment:      /usr/local/php/lib/php/

[PEAR] Archive_Tar    - installed: 1.3.12

[PEAR] Console_Getopt - installed: 1.3.1

[PEAR] Structures_Graph- installed: 1.0.4

[PEAR] XML_Util       - installed: 1.2.3

[PEAR] PEAR           - installed: 1.9.5

Wrote PEAR system config file at: /usr/local/php/etc/pear.conf

You may want to add: /usr/local/php/lib/php to your php.ini include_path

/root/php-5.6.2/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin

ln -s -f /usr/local/php/bin/phar.phar /usr/local/php/bin/phar

Installing PDO headers:          /usr/local/php/include/php/ext/pdo/



4、編譯、安裝nagios-plugins


nagios的所有監控工作都是通過插件完成的,因此,在啓動nagios之前還需要爲其安裝官方提供的插件。

[root@DB2 ~]# tar zxf nagios-plugins-1.4.15.tar.gz 

[root@DB2 ~]# cd nagios-plugins-1.4.15

[root@DB2 nagios-plugins-1.4.15]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios

[root@DB2 nagios-plugins-1.4.15]# make && make install


5、配置並啓動Nagios


(1)把nagios添加爲系統服務並將之加入到自動啓動服務隊列:

[root@DB2 ~]# chkconfig --add nagios

[root@DB2 ~]# chkconfig --level 35 nagios on

[root@DB2 ~]# chkconfig --list nagios

nagios          0:off   1:off   2:off   3:on    4:on    5:on    6:off


(2)檢查其主配置文件的語法是否正確:

[root@DB2 nagios]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg


(3)如果上面的語法檢查沒有問題,接下來就可以正式啓動nagios服務了:

[root@DB2 nagios]# service nagios start

Starting nagios: done.


(4)配置selinux

如果您的系統開啓了selinux服務,則默認爲拒絕nagios web cgi程序的運行。您可以通過下面的命令來檢查您的系統是否開啓了selinux:

[root@DB2 ~]# getenforce


如果上面命令的結果顯示開啓了selinux服務,您可以通過下面的命令暫時性的將其關閉:

[root@DB2 ~]# setenforce 0


[root@DB2 ~]# service iptables stop

iptables: Setting chains to policy ACCEPT: filter [  OK  ]

iptables: Flushing firewall rules: [  OK  ]

iptables: Unloading modules: [  OK  ]

[root@DB2 ~]# set enforce 0


如果您想在以後完全關閉selinux,可以通過編輯/etc/sysconfig/selinux文件,將其中的selinux後面的值“force”修改爲“disable”即可。


當然,您也可以通過以下方式將nagios的CGI程序運行於SELinux/targeted模式而不用關閉selinux:

[root@DB2 ~]# chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin

[root@DB2 ~]# chcon -R -t httpd_sys_content_t /usr/local/nagios/share


(5)通過web界面查看nagios:


http://192.168.123.132/nagios


登錄時需要指定前面設定的web認證帳號和密碼。


wKiom1R5l06iHFB3AAEhHuw5evI770.jpg


wKioL1R5mB6jUsNhAAUXnds-Ycw483.jpg


注意:爲了nagios系統的安全,建議您使用信息摘要強認證模式(如MD5),強制使用web的TSL/SSL安全通訊模式,並且通過訪問控制列表設定能訪問nagios的web界面的客戶端地址。


四、配置Nagios


1、Nagios的主配置文件

Nagios的主配置文件爲nagios.cfg,其語法非常簡潔,通常#開頭的行爲註釋行,而參數的設置格式爲<parameter>=<value>;其中,有些參數是可以重複出現的。其中常用的參數說明如下:


log_file: 設定Nagios的日誌文件;

cfg_file: Nagios對象定義的相關文件,此參數可重複使用多次以指定多個文件;

cfg_dir:  設定Nagios對象定義的相關文件所在的目錄,此目錄中的所有文件都會被作爲對象定義的文件;此參數可重複使用多次以指定多個目錄;

resource_file: 設定Nagios附加的宏定義的相關文件;

status_file: 設定Nagios存儲所有主機和服務當前狀態信息的文件;

status_update_interval: 設定status_file指定的文件中狀態信息的更新頻率;

service_check_timeout: 設定服務檢測的超時時間,默認爲60秒;

host_check_timeout: 設定主機檢測的超時時間,默認爲30秒;

notification_timeout: 設定通知信息發送嘗試的超時時間,默認爲30秒;


2、resource_file和宏定義

在主配置文件中,參數resource_file用於定義所有用戶變量(即“宏”)的存儲文件,它用於存儲對象定義中的可以訪問的額外信息,如訪問某服務的密碼等;因此,這些信息通常都是些敏感數據,一般不允許通過Web接口來訪問。此文件中可以定義的宏可多達32個,它們分別爲$USER1$,$USER2$...$USER32,這些宏一般在check命令中引用。通常情況下$USER1$用於引用Nagios插件所在目錄這個路徑信息,因此,一般不建議修改其值。


Nagios事先定義了許多宏,它們的值通常依賴於其上下文。如下:


HOSTNAME: 用於引用host_name指定所定義的主機的主機名;每個主機的主機名都是唯一的;

HOSTADDRESS: 用於引用host對象中的address指令的值,它通常可以爲IP地址或主機名;

HOSTDISPLAYNAME: 用於引用host對象中alias指令的值,用以描述當前主機,即主機的顯示名稱;

HOSTSTATE:某主機的當前狀態,爲UP,DOWN,UNREACHABLE三者之一;

HOSTGROUPNAMES: 用於引用某主機所屬的所有主機組的簡名,主機組名稱之間以逗號分隔;

LASTHOSTCHECK:用於引用某主機上次檢測的時間和日期,Unix時間戳格式;

LISTHOSTSTATE:用於引用某主機前一次檢測時的狀態,爲UP,DOWN或UNREACHABLE三者之一;

SERVICEDESC: 用於引用對應service對象中的desccription指令的值;

SERVICESTATE: 用於引用某服務的當前狀態,爲OK,WARNING,UNKOWN或CRITICAL四者之一;

SERVICEGROUPNAMES: 用於引用某服務所屬的所有服務組的簡名,服務組名稱之間以逗號分隔;

CONTACTNAME: 用於引用某contact對象中contact_name指令的值;

CONTACTALIAS: 用於引用某contact對象中alias指令的值;

CONTACTEMAIL: 用於引用某contact對象中email指令的值;

CONTACTGROUPNAMES: 用於引用某contact所屬的所有contact組的簡名,contact組名稱之間以逗號分隔;


Nagios 3還支持自定義宏,只是它的定義和使用方式比較獨特。管理員可以在某類型對象的定義中使用額外的指令,並能夠在命令中使用特別格式的宏來引用此指令的值。其引用方式根據對象類型的不同也有所不同,具體如下:


$_HOST<variable>$ – 引用在主機對象中定義的指令的值;

$_SERVICE<variable>$ – 引用在服務對象中定義的指令的值;

$_CONTACT<variable>$ – 引用在聯繫人對象中定義的指令的值;


一個簡單的例子如下:


如某主機定義爲:

define host

  {

    host_name somemachine

    address 10.0.0.1

    _MAC 12:34:56:78:90:ab

    check_command check-host-by-mac

  }


對應的檢測命令則可以定義爲:

  define command

  {

    command_name check-host-by-mac

    command_line $USER1$/check_hostmac -H $HOSTADDRESS$ -m $_HOSTMAC$

  }



3、定義主機對象

“主機”指的是被監控的機器,可是物理主機,也可以是虛擬設備。一個主機對象的定義至少應該包含一個簡名(short name)、一個別名、一個IP地址和用到的檢測命令。此外,很多時候,其定義中還應該包含監控時段、聯繫人及要通知的相關問題、檢測的頻率、重試檢測的方式、發送通知的頻率等。具體的各指令及說明請參見官方文檔:http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html#host。


一個主機定義的例子:

define host

{

host_name webserver1

hostgroups webservers

alias www.magedu.com

address 172.16.100.11

check_command check-host-alive

check_interval 5

retry_interval 1

max_check_attempts 5

check_period 24x7

contact_groups linux-admins

notification_interval 30

notification_period 24x7

notification_options d,u,r

}


其中的notification_options用於指定當主機處於什麼狀態時應該發送通知。其各狀態及其表示符如下:

d —— DOWN

u —— UNREACHABLE

r —— UP(host recovery)

f —— flapping

s —— 調試宕機時間開始或結束

主機可以被劃分成組,這些組即主機組。每一個主機組對象一般包含一個全局唯一的簡名、一個描述名以及屬於這個組的成員。此外,一個主機組的成員也可以是其它主機組。主機組的定義例子如下:


define hostgroup

{

hostgroup_name webservers

alias Linux web servers

members webserver1

}


4、定義服務對象

“服務”即某“主機”所提供的功能或資源對象,如HTTP服務、存儲空間資源或CPU負載等。服務附屬於主機,每一個服務使用服務名來標識,此服務名要求在特定的主機上具有唯一性。每一個服務對象還通常定義一個檢測命令及如何進行問題通知等。


define service

{

host_name webserver1

service_description www

check_command check_http

check_interval 10

check_period 24x7

retry_interval 3

max_check_attempts 3

notification_interval 30

notification_period 24x7

notification_options w,c,u,r

contact_groups linux-admins

}


其中的notification_options用於指定當服務處於什麼狀態時應該發送通知。其各狀態及其表示符如下:

w —— WARNING

u —— UNKNOWN

c —— CRITICAL

r —— OK(recovery)

f —— flapping

s —— 調試宕機時間開始或結束

與主機對象有所不同的是,有時個,多個主機可能會提供同樣的服務,比如多臺服務器同時提供Web等。因此,在定義服務對象時,其host_name可以爲逗號隔開的多個主機。


服務可以被劃分成組,這些組即服務組。每一個服務組對象一般包含一個全局唯一的簡名、一個描述名以及屬於這個組的成員。此外,一個服務組的成員通常是某主機上的某服務,其指定時使用<host>,<service>的格式,多個服務也使用逗號分隔。服務組的定義例子如下:


define servicegroup

{

servicegroup_name webservices

alias All services related to web

members webserver1,www,webserver2,www

}



5、定義命令對象

“命令”用於描述如何對主機或服務進行狀態檢測。服務對象的定義包含兩個指令:名字(command_name)和命令行(command_line);名字用於標識此命令對象,命令行則是執行檢測時真正要執行的命令。


當命令對象用於檢測其它對象時,其通常需要用到額外的參數以標識要檢測的某特定對象,此時,命令對象需要以command_name[!arg1][!arg2][...]的語法格式進行引用。因此,命令對象的定義中,命令行指令中通常會用到宏$ARG1$, $ARG2$...,對應用於接收[!arg1][!arg2][...]傳遞而來的參數。


如下命令對象的定義:

define command

{

command_namecheck_local_swap

command_line$USER1$/check_swap -w $ARG1$ -c $ARG2$

}


如下的服務中使用上面定義的命令對象來檢測服務對象:


define service

{

    host_name  localhost

    service_description  Swap Usage

check_command check_local_swap!20!10

  }


6、定義“時段”對象


“時段”用於定義某“操作”可以執行或不能執行的日期和時間跨度,如工作日內的每天8:00-18:00等,其可以在多個不同的操作中重複引用。一個時段對象的定義包含一個全局唯一的名稱標識及一個或多個時間跨度。例如:


define timeperiod

{

timeperiod_name workinghours

alias Working Hours, from Monday to Friday

monday 09:00-17:00

tuesday 09:00-17:00

wednesday 09:00-17:00

thursday 09:00-17:00

friday 09:00-17:00

}


其中,時間的指定格式有許多方式:

日曆時間:格式爲YYYY-MM-DD,如2012-04-21;

日期:如 April 21;

每月的某一天:如 day 21,指每月的21號;

每月的第幾個周幾:如 saturday 1,指每月的第一個星期六;

星期幾:如monday, tuesday等;


7、定義聯繫人對象

“聯繫人”對象用於定義某主機設備的擁有者或某問題出現時接受通知者。聯繫人對象的定義包含一個全局唯一的標識名稱、一個描述名及一個或多個郵件地址等。此外,其通常還應該包括對相應的主機或服務出現故障時所用到的通知命令。例如:


define contact

{

contact_name mageedu

alias Mage Education

email [email protected]

host_notification_period  workinghours

service_notification_period  workinghours

host_notification_options  d,u,r

service_notification_options  w,u,c,r

host_notification_commands     host-notify-by-email

service_notification_commands   notify-by-email

}


聯繫人也可劃分爲組,即聯繫人組。一個聯繫人組對象包含一個全局惟一的標識名稱,一個描述名稱和屬於此聯繫人組的聯繫人成員(members)或其人聯繫人組成員(contactgroup_members)。例如:


define contactgroup

{

contactgroup_name linux-admins

alias Linux Administrators

members magedu, mageedu

}


在主機或服務對象的定義中,既可以指定聯繫人,也可以指定聯繫人組。當然,某主機的問題聯繫人與其上運行的服務的聯繫人也可以不同。



8、模板及對象繼承

Nagios通過功能強大的繼承引擎來實現基於模板的對象繼承。這就意味着可以定義將某類型的對象的通用屬性組織起來定義爲對象模板,並在定義其類型中的對象時直接從此模板繼承其相關屬性的定義。定義對象模板的方法很簡單,通常只需要在定義某類型對象時使用register指令並將其值設定爲0即可。對象模板的名稱通常使用name指令定義,這與某特定類型對象使用的指令也有所不同。而定義此種類型的對象時,只需要使用use指令並將其值設定爲對應模板的名稱即可。例如:


define host

{

name generic-server

check_command check-host-alive

check_interval 5

retry_interval 1

max_check_attempts 5

check_period 24x7

notification_interval 30

notification_period 24x7

notification_options d,u,r

register 0

}


define host

{

use generic-server

name webserver1

alias Web Server 01

address 172.16.100.11

contact_groups linux-admins

}


一個對象在定義時也以同時繼承多個模板,此時只需要爲use指令指定以逗號分隔的多個模板名稱即可。同時,Nagios也支持模板的多級繼承。



9、依賴關係

爲了描述Nagios對象間的依賴關係,這裏要用到兩個術語:master(被依賴的主機或服務)和dependent(依賴關係中的依賴於master的Nagios對象)。Nagios可以定義對象間的彼此依賴性,也可以爲某對象定義其父對象,甚至也可以指定此依賴關係生效的時段。下面是一個關於依賴關係定義的例子:


define hostdependency

{

dependent_host_name backuphost

host_name ***server1

dependency_period maintenancewindows

}


其中host_name用於定義master主機,dependent_host_name定義dependent主機。而在依賴關係的定義中,通常還會用到execution_failure_criteria定義master主機爲何種狀態時不再對依賴於此master的主機進行檢測,notification_failure_criteria用於定義master處於何種狀態時不會發送dependent相關的主機問題通知到聯繫人。


服務間依賴關係的定義類似於主機間的依賴關係,例如:


define servicedependency

{

host_name mysqlserver

service_description mysql

dependent_hostgroup_name apacheservers

dependent_service_description webservice

execution_failure_criteria c,u

notification_failure_criteria c,u,w

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章