nagios總結與基本配置模板

jopen 12年前發布 | 83K 次閱讀 系統監控 Nagios

 

目錄

一、簡介:... 3

1、nagios的功能:... 3

2、監控機(可想象為常見服務的服務器):. 3

3、被監控機(可想象為常見服務的客戶端):. 3

4、Nagios定義的監控狀態... 3

二、安裝軟件:... 3

①、nagios. 4

②、nagios-plugins插件... 4

③、修改apache配置(vi httpd.conf... 4

④、增加驗證用戶... 5

⑤、典型配置:... 5

1)預備知識... 5

2)改配置文件... 5

3)修改CGI腳本控制文件cgi.cfg. 6

4)定義監控時間段,創建配置文件timeperiods.cfg. 6

5)定義聯系人,創建配置文件contacts.cfg. 7

6)下面就可以將多個聯系人組成一個聯系人組contactgroups.cfg. 8

7)定義被監控主機,創建文件hosts.cfg. 8

8)與聯系人可以組成聯系人組一樣,多個主機也可以組成主機組. hostgrops.cfg. 9

9)定義監控的項目,也叫服務,services.cfg. 10

10)在運行nagios之前首先做測試... 10

11)作為守護進程后臺啟動nagios. 11

12)查看網頁... 11

. 使用命令和插件監控更多信息... 11

... 13

1).監控nagios-serverftp. 14

2).監控dbpissh. 15

3).監控yahoonIIS.. 15

4).監控nagios-sever的根分區的使用情況. 16

四. 使用NRPE監控LINUX上的”本地信息”... 16

         在被監控主機上... 18

1)增加用戶... 19

2)安裝nagios插件... 19

3)安裝nrpe. 19

4)編輯這個腳本... 20

5)編輯/etc/services文件,增加NRPE服務... 20

6)重啟xinetd服務... 20

7)查看NRPE是否已經啟動... 21

8)測試NRPE是否則正常工作... 21

9)查看NRPE的監控命令... 21

10)安裝check_nrpe插件... 22

11)測試:... 22

12)在commands.cfg中增加對check_nrpe的定義... 22

13)在被監控機上增加check_swap命令的定義... 24

14)在監控機上增加這個監控項目... 24

五、如何監控windows系統的”本地信息”... 25

1)安裝NSClient. 26

①從http://sourceforge.net/projects/nscplus下載NSClient++-0.2.7.zip. 26

②軟件安裝... 26

2)在運行里面輸入services.msc打開”服務”... 27

3)編輯NSClient++下的NSC.ini文件... 27

4)對監控主機的配置... 28

5)定義命令... 28

6)增加監控項目... 29

7)重啟nagios服務來生效,等一會就可以查看頁面了... 30

附錄:. 33

1.重啟nagios的方法... 33

2.不以xinetd的方式運行nrpe. 33

3.有關于check_load的用法及意義... 34


總結

一、簡介:

1nagios的功能:

監控服務和主機

2、監控機(可想象為常見服務的服務器):

安裝了nagios軟件的機器,對監控的數據做處理,并且提供web界面查看和管理.當然也可以對本機自身的信息進行監控.

3、被監控機(可想象為常見服務的客戶端):

安裝了NRPE等客戶端,根據監控機的請求執行監控,然后將結果回傳給監控機.

4Nagios定義的監控狀態

nagios定義了4中監控狀態,代表不同的嚴重級別,除了OK代表正常不用關心外,其余3種都要引起重視.如下表

狀態

</td>

代碼

</td>

顏色

</td> </tr>

正常

</td>

OK

</td>

綠色,

</td> </tr>

警告

</td>

WARNING

</td>

黃色,

</td> </tr>

嚴重

</td>

CRITICAL

</td>

紅色,

</td> </tr>

未知錯誤

</td>

UNKOWN

</td>

深黃色

</td> </tr> </tbody> </table>

二、安裝軟件:

監控機需安裝的軟件有nagiosnagios-pluginsapache(不做介紹)

①、nagios

./configure–prefix=/usr/local/nagios   --enable-embedded-perl --with-httpd-conf=/usr/local/lamp/apache/conf/extra

 (如果apache服務是rpm方式安裝 無須指定--with-httpd-conf)

make all

make install

make install-init

make install-config

make install-commandmode

make install-webconf

②、nagios-plugins插件

./configure     --prefix=/usr/local/nagios/     --with-mysql=/usr/local/mysql --with-nagios-user=nagios     --with-nagiosgroup=nagios   --enable-libtap --enable-extra-opts     --enable-perl-modules

make

make install

③、修改apache配置(vi httpd.conf

ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin

<Directory "/usr/local/nagios/sbin">

    Options ExecCGI

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "Nagios Access"

    AuthType Basic

AuthUserFile /usr/local/nagios/etc/htpasswd

//用于此目錄訪問身份驗證的文件,htpasswd也可以是htpasswd.user

    Require valid-user

</Directory>

Alias /nagios /usr/local/nagios/share

<Directory "/usr/local/nagios/share">

    Options None

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "Nagios Access"

    AuthType Basic

AuthUserFile /usr/local/nagios/etc/htpasswd

//用于此目錄訪問身份驗證的文件,htpasswd也可以是htpasswd.user

    Require valid-user

</Directory>

④、增加驗證用戶

htpasswd -c /usr/local/nagios/etc/htpasswd 用戶名

⑤、典型配置:

1)預備知識

Nagios自己定義了一套規則用于配置文件,其中最重要的概念就是對象”----object.通俗的理解:假定我們首先定義了性別這個對象,它的值只可能是男,,人妖等等,然后定義某人為一個對象,例如張三,定義張三的時候有性別這個屬性,它的值就必須來源了之前定義的性別這個對象,要么是男是女,或者是人妖.

Nagios里面定義了一些基本的對象,一般用到的有:

聯系人

</td>

contact

</td>

出了問題像誰報告?一般當然是系統管理員了

</td> </tr>

監控時間段

</td>

timeperiod

</td>

7X24小時不間斷還是周一至周五,或是自定義的其他時間段

</td> </tr>

被監控主機

</td>

host

</td>

所需要監控的服務器,當然可以是監控機自己

</td> </tr>

監控命令

</td>

command

</td>

nagios發出的哪個指令來執行某個監控,這也是自己定義的

</td> </tr>

被監控的服務

</td>

service

</td>

例如主機是否存活,80端口是否開,磁盤使用情況或者自定義的服務等

</td> </tr> </tbody> </table>

另外,多個被監控主機可以定義為一個主機組,多個聯系人可以被定義為一個聯系人組,多個服務還能定義成一個服務組呢.

回到上面的例子,定義張三需要之前定義的性別,我們定義一個被監控的服務,當然就要指定被監控的主機,需要監控的時間段,要用哪個命令來完成這個監控操作,出了問題向哪個聯系人報告.

所有這些對象絕對多數都是需要我們手動定義的,這就是nagios的安裝顯得復雜的地方.其實了解了原理,做一遍之后余下的工作就是復制粘貼了.

2)修改配置文件

vi /usr/local/nagios/etc/nagios.cfg

//注意文件的路徑

#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

cfg_file=/usr/local/nagios/etc/objects/hosts.cfg

cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg

cfg_file=/usr/local/nagios/etc/objects/services.cfg

cfg_file=/usr/local/nagios/etc/objects/contacts.cfg

cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg

cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg

check_external_commands=1   //允許在web界面下執行重啟nagios、停止主機/服務檢查等操作

command_check_interval=10s根據自己的情況定這個命令檢查時間間隔,不要太長也不要太短)。

3)修改CGI腳本控制文件cgi.cfg

(確保use_authentication=1 //驗證)

//多個用戶之間用逗號隔開(用戶名來自htpasswd,不要添加過多)

authorized_for_system_information=nagiosadmin,用戶名

authorized_for_configuration_information=nagiosadmin,用戶名

authorized_for_system_commands=用戶名 

authorized_for_all_services=nagiosadmin,用戶名

authorized_for_all_hosts=nagiosadmin,用戶名

authorized_for_all_service_commands=nagiosadmin,用戶名

authorized_for_all_host_commands=nagiosadmin,用戶名

4)定義監控時間段,創建配置文件timeperiods.cfg

按照下面的方式簡單的復制修改timeperiod_name和別名就可以創建多個時間段了.

定義了一個監控時間段,它的名稱是24x7,監控的時間是每天全天24小時

define timeperiod{

        timeperiod_name         24x7   //時間段的名稱,這個地方不要有空格

        alias                   別名  //24 Hours A Day,7Days A Week

        sunday                   00:00-24:00

        monday                  00:00-24:00

        tuesday                  00:00-24:00

        wednesday               00:00-24:00

        thursday                 00:00-24:00

        friday                    00:00-24:00

        saturday                 00:00-24:00

        }

</td> </tr> </tbody> </table>

5)定義聯系人,創建配置文件contacts.cfg

(如出現Service notification command ’…’ specified for contact ‘用戶名’is not defined anywhere,請查看’…’是否在commands.cfg中定義了)

按照下面的方式簡單的復制修改用戶名和別名就可以創建多個聯系人了.

define contact{

        contact_name                    用戶名   //聯系人的名稱,這個地方不要有空格

        alias                           別名

        service_notification_period     24x7

        host_notification_period        24x7

        service_notification_options    w,u,c,r

        host_notification_options       d,u,r

        service_notification_commands   notify- service -by-email

        host_notification_commands      notify- host--by-email

        email                           yahoon@test.com

        pager                           1338757xxxx

        address1                        xxxxx.xyyy@icq.com

        address2                        555-555-5555

        }

</td> </tr> </tbody> </table>

service_notification_period     24x7

服務出了狀況通知的時間段,這個時間段就是上面在timeperiods.cfg中定義的.

</td> </tr>

host_notification_period        24x7

主機出了狀況通知的時間段, 這個時間段就是上面在timeperiods.cfg中定義的

</td> </tr>

service_notification_options    w,u,c,r

當服務出現w—報警(warning),u—未知(unkown),c—嚴重(critical),或者r—從異常情況恢復正常,在這四種情況下通知聯系人.

</td> </tr>

host_notification_options       d,u,r

當主機出現d­­­­—當機(down),u—返回不可達(unreachable),r—從異常情況恢復正常,在這3種情況下通知聯系人

</td> </tr>

service_notification_commands   notify- service -by-email

服務出問題通知采用的命令notify-by-email,這個命令是在commands.cfg中定義的,作用是給聯系人發郵件.至于commands.cfg之后將專門介紹

</td> </tr>

host_notification_commands      host-notify-by-email notify- host--by-email

同上,主機出問題時采用的也是發郵件的方式通知聯系人

</td> </tr>

email                           yahoon@test.com

很明顯,聯系的人email地址

</td> </tr>

pager                           1338757xxxx

聯系人的手機,如果支持短信的通知的話,這個就很有用了.

</td> </tr>

alias是聯系人別名,address是地址 意義不大.

</td> </tr> </tbody> </table>

6)下面就可以將多個聯系人組成一個聯系人組contactgroups.cfg

按照下面的方式簡單的復制修改組名和別名就可以創建多個聯系人組了.

define contactgroup{

        contactgroup_name               組名  

//聯系人組的名稱,同樣不能空格

        alias                   別名        //別名

        members                 用戶名 

//組的成員,來自于上面定義的contacts.cfg,如果有多個聯系人則以逗號相隔

        }

</td> </tr> </tbody> </table>

7)定義被監控主機,創建文件hosts.cfg

按照下面的方式簡單的復制修改主機名、IP和別名就可以創建多個被監控主機了.

define host{

        host_name                       主機名

//被監控主機的名稱,最好別帶空格nagios-server

        alias                           別名

        //別名

        address                         IP

        //被監控主機的IP地址

        check_command                   check-host-alive

        //監控的命令check-host-alive,這個命令來自commands.cfg,用來監控主機是否存活

        max_check_attempts              5

        //檢查失敗后重試的次數

        check_period                    24x7

        //檢查的時間段24x7,同樣來自于我們之前在timeperiods.cfg中定義的

contact_groups                  組名

        //聯系人組,上面在contactgroups.cfg中定義的組名

notification_interval           10

        //提醒的間隔,每隔10秒提醒一次

notification_period             24x7

        //提醒的周期, 24x7,同樣來自于我們之前在timeperiods.cfg中定義的

notification_options            d,u,r

//指定什么情況下提醒,具體含義見之前contacts.cfg部分的介紹

        }

</td> </tr> </tbody> </table>

8)與聯系人可以組成聯系人組一樣,多個主機也可以組成主機組. hostgrops.cfg

按照下面的方式簡單的復制修改主機組名、IP和別名就可以創建多個主機組了.

define hostgroup{

        hostgroup_name          主機組名  //主機組名稱

        alias                   別名  //別名

        members                 主機名

//組的成員主機,多個主機以逗號相隔,必須是上面hosts.cfg中定義的

        }

</td> </tr> </tbody> </table>

下面是最關鍵的了,nagios主要是監控一臺主機的各種信息,包括本機資源,對外的服務等等.這些在nagios里面都是被定義為一個個的項目(nagios稱之為服務,為了與主機提供的服務相區別,我這里用項目這個詞),而實現每個監控項目,則需要通過commands.cfg文件中定義的命令.

例如我們現在有一個監控項目是監控一臺機器的web服務是否正常, 我們需要哪些元素呢?最重要的有下面三點:首先是監控哪臺機,然后是這個監控要用什么命令實現,最后就是出了問題的時候要通知哪個聯系人?

9)定義監控的項目,也叫服務,services.cfg

按照下面的方式簡單的復制修改主機名、命令和組名就可以創建多個服務了.

#service definition

define service{

        host_name               主機名

        //被監控的主機,hosts.cfg中定義的

        service_description     check-host-alive

        //這個監控項目的描述(也可以說是這個項目的名稱),可以空格,我們這里定義的是監控這個主機是不是存活

        check_command           check-host-alive

        //所用的命令,commands.cfg中定義的

        max_check_attempts      5

        normal_check_interval   3

        retry_check_interval    2

        check_period            24x7

        //監控的時間段,timeperiods.cfg中定義的

        notification_interval   10

        notification_period     24x7

        //通知的時間段, ,timeperiods.cfg中定義的

        notification_options    w,u,c,r

        //在監控的結果是wucr時通知聯系人,具體含義看前文.

        contact_groups          組名

        //聯系人組,contactgroups.cfg中定義的

        }

</td> </tr> </tbody> </table>

10)在運行nagios之前首先做測試

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

看到下面這些信息就說明沒問題了

Total Warnings: 0

Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

</td> </tr> </tbody> </table>

11)作為守護進程后臺啟動nagios

chkconfig nagios on

etc/init.d/nagios restart

12)查看網頁

登陸http://ip/nagios/

. 使用命令和插件監控更多信息

nagios本身并沒有監控的功能,所有的監控是由插件完成的,插件將監控的結果返回給nagios,nagios分析這些結果,web的方式展現給我們,同時提供相應的報警功能(這個報警的功能也是由插件完成的)

所有的這些插件是一些實現特定功能的可執行程序,默認安裝的路徑是/usr/local/nagios/libexec,可以查看

這些程序都是可以獨立執行的,使用方法可以通過命令名 –h來查看

例如,我們查看check_disk這個插件的用法則可以使用check_disk –h,如下圖

[root@server1 libexec]# ./check_disk -h

check_disk (nagios-plugins 1.4.9) 1.91

This plugin checks the amount of used disk space on a mounted file system

and generates an alert if free space is less than one of the threshold values

Usage: check_disk -w limit -c limit [-p path | -x device] [-t timeout][-m] [-e] [-W limit] [-K limit] [-v] [-q] [-E]

Options:

……以下略

</td> </tr> </tbody> </table>

現在來獨立執行它,例如查看根分區的使用情況,執行

[root@server1 libexec]# ./check_disk -w 10% -c 5%  /

命令的含義是檢查分區/的使用情況,若剩余10%以下,為警告狀態(warning),5%以下為嚴重狀態(critical),執行后我們會看到下面這條信息

DISK WARNING - free space: / 487 MB (6% inode=78%);| /=7449MB;7524;7942;0;8361

說明當前是warning的狀態,空閑空間只有6%.如果nagios收到這些狀態結果就會采取報警等措施了

我們在定義某個監控項目時,所用的監控命令都是來自commands.cfg,這和這些插件有什么關系???想到了吧,commands.cfg中定義的監控命令就是使用的這些插件.舉個例子,之前我們已經不止一次用到了check-host-alive這個命令,打開commands.cfg就可以看到這個命令的定義,如下:

################################################################################

#

# SAMPLE HOST CHECK COMMANDS

#

################################################################################

# This command checks to see if a host is "alive" by pinging it

# The check must result in a 100% packet loss or 5 second (5000ms) round trip

# average time to produce a critical error.

# Note: Only one ICMP echo packet is sent (determined by the '-p 1' argument)

# 'check-host-alive' command definition

define command{

        command_name    check-host-alive

        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1

        }

</td> </tr> </tbody> </table>

command_name    check-host-alive

這句話的意思是定義的命令名是check-host-alive,也就是我們在services.cfg中使用的名稱執行的操作是

$USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1

其中$USER1$是在resource.cfg文件中定義的,代表插件的安裝路徑.就如我們上面看到的那樣$USER1$=/usr/local/nagios/libexec,至于$HOSTADDRESS$,則默認被定義為監控主機的地址.

簡單的說,我們在services.cfg中定義了對dbpi執行check-host-alive命令,實際上就是執行了

/usr/local/nagios/libexec/ check_ping -H dbpiip地址 -w 3000.0,80% -c 5000.0,100% -p 1

實際上check-host-alive只是這一長串命令的簡稱而已,而在services.cfg中都是使用簡稱的.

commands.cfg中定義了很多這樣的命令簡稱.基本上我們常用的監控項目都包含了,例如ftp,http,本地的磁盤,負載等等.

我們再看一個命令,check_local_disk定義如下

# 'check_local_disk' command definition

define command{

        command_name    check_local_disk

        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$

        }

</td> </tr> </tbody> </table>

check_local_disk實際上是執行的check_disk插件.這里的$ARG1$, $ARG2$, $ARG3$是什么意思呢?在之前我們已經提到了這個check_disk這個插件的用法,-w的參數指定磁盤剩了多少是警告狀態,-c的參數指定剩多少是嚴重狀態,-p用來指定監控路徑.

在使用check-host-alive的時候,只需要在services.cfg中直接寫上這個命令名check-host-alive.后面沒任何的參數.而使用check_local_disk則不同,services.cfg中這要這么寫

check_local_disk!10%!5%!/

在命令名后面用!分隔出了3個參數,10%$ARG1$的值,5%$ARG2$的值,/ $ARG3$的值,

我不知道講的是否清楚,頭暈的就在后面提問哈.簡單的一句話就是

services.cfg定義監控項目用某個命令

這個命令必須在commands.cfg中定義

定義這個命令時使用了libexec下的插件

</td> </tr> </tbody> </table>

如果命令不帶$ARG1$就可以在services.cfg中直接使用,如果帶了使用時就帶上參數,!將參數進行

在上篇文章里面,我們已經增加了三個監控項目,分別監控nagios-server,dbpi,yahoon這三臺主機是否存活.現在我對這三臺機器分別做了如下設置

開放nagios-serverftp

開放dbpissh

開放yahoonIIS

這篇文章里面所做的就是對這些服務進行監控,另外我們還要監控nagios-sever的根分區的使用情況.

1).監控nagios-serverftp

編輯services.cfg 增加下面的內容,基本上就是copy上節我們定義監控主機存活的代碼.略做修改.

define service{

        host_name               nagios-server

        要監控的機器,給出機器名,注意必須是hosts.cfg中定義的

        service_description     check ftp

        給這個監控項目起個名字吧,任意起,你自己懂就行

        check_command           check_ftp

        所用的命令,當然必須是commands.cfg中定義了的

        max_check_attempts      5

        normal_check_interval   3

        retry_check_interval    2

        check_period            24x7

        notification_interval   10

        notification_period     24x7

        notification_options    w,u,c,r

        contact_groups          sagroup

        }

</td> </tr> </tbody> </table>

2).監控dbpissh

define service{

        host_name               dbpi

        意義同上

service_description     check-ssh

        意義同上

check_command           check_tcp!22

        ssh所用的tcp22號端口,我就用commands中定義的check_tcp命令.至于!22的意思不用我說了吧.

        max_check_attempts      5

        normal_check_interval   3

        retry_check_interval    2

        check_period            24x7

        notification_interval   10

        notification_period     24x7

        notification_options    w,u,c,r

        contact_groups          sagroup

        }

</td> </tr> </tbody> </table>

3).監控yahoonIIS

define service{

        host_name               yahoon

        service_description     check-http

        check_command           check_http

        max_check_attempts      5

        normal_check_interval   3

        retry_check_interval    2

        check_period            24x7

        notification_interval   10

        notification_period     24x7

        notification_options    w,u,c,r

        contact_groups          sagroup

        }

</td> </tr> </tbody> </table>

4).監控nagios-sever的根分區的使用情況.

define service{

        host_name               nagios-server

        service_description     check disk

        check_command           check_local_disk!10%!5%!/

        max_check_attempts      5

        normal_check_interval   3

        retry_check_interval    2

        check_period            24x7

        notification_interval   10

        notification_period     24x7

        notification_options    w,u,c,r

        contact_groups          sagroup

        }

</td> </tr> </tbody> </table>

修改了配置文件,當然就要重新啟動了,簡單的方法殺掉nagios進程,然后重新啟動

/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

等幾分鐘,你會看到下面這張圖

可以看到我的nagios-seerver上磁盤空間已經不足了,warning.

. 使用NRPE監控LINUX上的本地信息

本部分主要參考了NRPE的官方手冊

對系統為linux的主機dbpi進行如下監控:CPU負載,磁盤容量,登陸用戶數,總進程數,僵尸進程數,swap分區使用情況

書接前文,對于像磁盤容量,cpu負載這樣的本地信息”,nagios只能監測自己所在的主機,而對其他的機器則顯得有點無能為力.畢竟沒得到被控主機的適當權限是不可能得到這些信息的.為了解決這個問題,nagios有這樣一個附加組件----NRPE.用它就可以完成對linux類型主機本地信息的監控.

NRPE的原理如下圖

NRPE總共由兩部分組成:

check_nrpe 插件,位于在監控主機上

NRPE daemon,運行在遠程的linux主機上(通常就是被監控機)

按照上圖,整個的監控過程如下:

nagios需要監控某個遠程linux主機的服務或者資源情況時

1.nagios會運行check_nrpe這個插件,告訴它要檢查什么.

2.check_nrpe插件會連接到遠程的NRPE daemon,所用的方式是SSL

3.NRPE daemon會運行相應的nagios插件來執行檢查

4.NRPE daemon將檢查的結果返回給check_nrpe插件,插件將其遞交給nagios做處理.

注意:NRPE daemon需要nagios插件安裝在遠程的linux主機上,否則,daemon不能做任何的監控.

通過NRPE的檢測分為兩種:

1).直接檢測:檢測的對象是運行NRPE的那臺linux主機的本地資源,原理如下圖

2).間接檢測:當運行nagios的監控主機無法訪問到某臺被監控機,但是運行NRPE的機器可以訪問到時,NRPE就可以充當一個代理,將監控請求發送到被監控機

必須要說明的是,通常被監控機與監控機在同一網絡內,所以這樣的情況很少.下面我講的都是直接檢測.所以我們按照圖示在監控主機(nagios-server)和被監控主機(dbpi,也就是圖中運行NRPEremote linux host)上安裝相應的軟件

①    在被監控主機上

在被監控主機上

1)增加用戶

[root@dbpi root]# useradd nagios

設置密碼

[root@dbpi root]# passwd nagios

2)安裝nagios插件

tar -zxvf nagios-plugins-1.4.9.tar.gz

cd nagios-plugins-1.4.9

./configure

make

make install

chown nagios.nagios /usr/local/nagios

chown -R nagios.nagios /usr/local/nagios/libexec

3)安裝nrpe

tar -zxvf nrpe-2.8.1.tar.gz

cd nrpe-2.8.1

./configure

輸出如下

*** Configuration summary for nrpe 2.8.1 05-10-2007 ***:

 General Options:

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

 NRPE port:    5666

 NRPE user:    nagios

 NRPE group:   nagios

 Nagios user:  nagios

 Nagios group: nagios

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

type 'make all' to compile the NRPE daemon and client.

可以看到NRPE的端口是5666,下一步是make all

</td> </tr> </tbody> </table>

make all

輸出如下

*** Compile finished ***

If the NRPE daemon and client compiled without any errors, you

can continue with the installation or upgrade process.

Read the PDF documentation (NRPE.pdf) for information on the next

steps you should take to complete the installation or upgrade.

</td> </tr> </tbody> </table>

接下來安裝NPRE插件,daemon和示例配置文件

安裝check_nrpe這個插件

make install-plugin

之前說過監控機需要安裝check_nrpe這個插件,被監控機并不需要,我們在這里安裝它是為了測試的目的

make install-daemon         #安裝deamon

make install-daemon-config #安裝配置文件

make install-xinetd      #安裝xinetd腳本

4)編輯這個腳本

vi /etc/xinetd.d/nrpe

# default: on

# description: NRPE (Nagios Remote Plugin Executor)

service nrpe

{

        flags           = REUSE

        socket_type     = stream

        port            = 5666

        wait            = no

        user            = nagios

        group           = nagios

        server          = /usr/local/nagios/bin/nrpe

        server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd

        log_on_failure  += USERID

        disable         = no

        only_from       = 127.0.0.1在后面增加監控主機的地址0.111,以空格間隔

}

</td> </tr> </tbody> </table>

改后

     only_from       = 127.0.0.1 192.168.0.111

5)編輯/etc/services文件,增加NRPE服務

vi /etc/services

增加如下

# Local services

nrpe            5666/tcp                        # nrpe

</td> </tr> </tbody> </table>

6)重啟xinetd服務

[root@dbpi nrpe-2.8.1]# service xinetd restart

7)查看NRPE是否已經啟動

[root@dbpi nrpe-2.8.1]# netstat -at|grep nrpe

tcp        0      0 *:nrpe                  *:*                     LISTEN   

[root@dbpi nrpe-2.8.1]# netstat -an|grep 5666

tcp        0      0 0.0.0.0:5666            0.0.0.0:*               LISTEN  

可以看到5666端口已經在監聽了

8)測試NRPE是否則正常工作

之前我們在安裝了check_nrpe這個插件用于測試,現在就是用的時候.執行

/usr/local/nagios/libexec/check_nrpe -H localhost會返回當前NRPE的版本

[root@dbpi nrpe-2.8.1]# /usr/local/nagios/libexec/check_nrpe -H localhost

NRPE v2.8.1

</td> </tr> </tbody> </table>

也就是在本地用check_nrpe連接nrpe daemon是正常的

:為了后面工作的順利進行,注意本地防火墻要打開5666能讓外部的監控機訪問

/usr/local/nagios/libexec/check_nrpe h查看這個命令的用法

可以看到用法是check_nrpe H 被監控的主機 -c要執行的監控命令

注意:-c后面接的監控命令必須是nrpe.cfg文件中定義的.也就是NRPE daemon只運行nrpe.cfg中所定義的命令

9)查看NRPE的監控命令

cd /usr/local/nagios/etc

vi nrpe.cfg

找到下面這段話

# The following examples use hardcoded command arguments...

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10

command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20

command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/hda1  #注,可以是任意一塊設備(sda1 …

command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z

command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

</td> </tr> </tbody> </table>

紅色部分是命令名,也就是check_nrpe -c參數可以接的內容,等號=后面是實際執行的插件程序(這與commands.cfg中定義命令的形式十分相似,只不過是寫在了一行).也就是說check_users就是等號后面/usr/local/nagios/libexec/check_users -w 5 -c 10的簡稱.

上面這5行定義的命令分別是檢測登陸用戶數,cpu負載,hda1的容量,僵尸進程,總進程數.各條命令具體的含義見插件用法(執行”插件程序名 –h)

由于-c后面只能接nrpe.cfg中定義的命令,也就是說現在我們只能用上面定義的這五條命令.我們可以在本機實驗一下.執行

sesese色

/usr/local/nagios/libexec/check_nrpe  -H localhost -c check_users

</td> </tr>

/usr/local/nagios/libexec/check_nrpe  -H localhost -c check_load

</td> </tr>

/usr/local/nagios/libexec/check_nrpe  -H localhost -c check_hda1

</td> </tr>

/usr/local/nagios/libexec/ check_nrpe -H localhost -c check_zombie_procs

</td> </tr>

/usr/local/nagios/libexec/ check_nrpe -H localhost -c check_total_procs

</td> </tr> </tbody> </table>

上表被標記的部分,將是用于nagios監控機上的services.cfg中的 check_command部分,格式為:

check_nrpecheck_users| check_load| check_hda1| check_zombie_procs| check_total_procs

nagios的監控主機上

之前已經將nagios運行起來了,現在要做的事情是:

– 安裝check_nrpe插件

– 在commands.cfg中創建check_nrpe的命令定義,因為只有在commands.cfg中定義過的命令才能在services.cfg中使用

      創建對被監控主機的監控項目

10)安裝check_nrpe插件

tar -zxvf nrpe-2.8.1.tar.gz

cd nrpe-2.8.1

./configure

make all

make install-plugin

只運行這一步就行了,因為只需要check_nrpe插件

11)測試:

監控機使用check_nrpe被監控機(192.168.0.100)運行的nrpedaemon之間的通信.

[root@server1 nrpe-2.8.1]# /usr/local/nagios/libexec/check_nrpe -H 192.168.0.100

NRPE v2.8.1

</td> </tr> </tbody> </table>

看到已經正確返回了NRPE的版本信息,說明一切正常.

12)commands.cfg中增加對check_nrpe的定義

vi /usr/local/nagios/etc/commands.cfg(確定是在nagios.cfg定義的)

在最后面增加如下內容

########################################################################

#

# NRPE COMMAND

#

########################################################################

# 'check_nrpe ' command definition

define command{

        command_name check_nrpe

        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$

        }

</td> </tr> </tbody> </table>

意義如下

  • command_name check_nrpe

    定義命令名稱為check_nrpe,services.cfg中要使用這個名稱.

    </td> </tr>

    command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$

    這是定義實際運行的插件程序.這個命令行的書寫要完全按照check_nrpe這個命令的用法.不知道用法的就用check_nrpe h查看

    </td> </tr> </tbody> </table>

    -c后面帶的$ARG1$參數是傳給nrpe daemon執行的檢測命令,之前說過了它必須是nrpe.cfg中所定義的那5條命令中的其中一條.services.cfg中使用check_nrpe的時候要用!帶上這個參數

    下面就可以在services.cfg中定義對dbpi主機cpu負載的監控

  • define service{

            host_name               dbpi

    被監控的主機名,這里注意必須是linux且運行著nrpe,而且必須是hosts.cfg中定義的

            service_description     check-load

            監控項目的名稱

            check_command           check_nrpe!${9中的紅色部分}check_load

            監控命令是check_nrpe,是在commands.cfg中定義的,帶的參數是check_load,是在nrpe.cfg中定義的

            max_check_attempts      5

            normal_check_interval   3

            retry_check_interval    2

            check_period            24x7

            notification_interval   10

            notification_period     24x7

            notification_options    w,u,c,r

            contact_groups          sagroup

            }

    </td> </tr> </tbody> </table>

    像這樣將其余四個監控項目加進來.

    之前我們說過了,今天還有一個任務是要監控dbpiswap使用情況.但是很遺憾,nrpe.cfg中默認沒有定義這個監控功能的命令.怎么辦?手動在nrpe.cfg中添加,也就是自定義NRPE命令.

    現在我們要監控swap分區,如果空閑空間小于20%則為警告狀態—warning;如果小于10%則為嚴重狀態—critical.我們可以查得需要使用check_swap插件,完整的命令行應該是下面這樣.

    /usr/local/nagios/libexec/check_swap -w 20% -c 10%

    13在被監控機上增加check_swap命令的定義

    被監控機上增加check_swap命令的定義

    vi /usr/local/nagios/etc/nrpe.cfg

    增加下面這一行

  • command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

    </td> </tr> </tbody> </table>

    我們知道check_swap現在就可以作為check_nrpe-c的參數使用了

    修改了配置文件,當然要重啟.但是

    如果你是以獨立的daemon運行的nrpe,那么需要手動重啟.

    如果你是在xinetd或者inetd下面運行的,則不需要.

    由于我們是xinetd下運行的,所以不需要重啟服務

    14)在監控機上增加這個監控項目

    define service{

            host_name               dbpi

            service_description     check-swap

            check_command           check_nrpe!check_swap

            max_check_attempts      5

            normal_check_interval   3

            retry_check_interval    2

            check_period            24x7

            notification_interval   10

            notification_period     24x7

            notification_options    w,u,c,r

            contact_groups          sagroup

            }

    </td> </tr> </tbody> </table>

    所有的配置文件已經修改好了,現在重啟nagios.殺掉nagios進程,然后再重啟.等上一會你就可以看到下面這個畫面了

    基本上nagios的主要功能就有這些,nagios的使用關鍵在于如何活用那些豐富的插件.nagios可以說是一個對于linux/unix環境支持十分好的程序.對于被監控主機是windows系列相關的文章比較少.我就專門花一章來講述.

    有了下一篇,大家就可以功德圓滿了.

    寫到這里,有幾個我在安裝和使用的幾個小知識點,也可以說是小問題附在此處,歡迎大家批評指教.一般的附錄都是在文章最后,可下一篇是windows相關了,與我要說的這幾個問題沒什么聯系正所謂打鐵趁熱,我就在這里一氣呵成,大家也容易看.

    五、如何監控windows系統的”本地信息”

    細心的朋友可能注意到了,nagioslibexec下有check_nt這個插件,它就是用來檢查windows機器的服務的,其功能類似于上一章講的check_nrpe.不過還需要搭配另外一個軟件NSClient,它則類似于NRPE

    NSClient的原理如下圖

    可以看到,NSClientnrpe最大的區別就是:

    被監控機上安裝有nrpe,并且還有插件,最終的監控是由這些插件來進行的.當監控主機將監控請求發給nrpe,nrpe調用插件來完成監控.

    NSClient則不同,被監控機上只安裝NSClient,沒有任何的插件.當監控主機將監控請求發給NSClient,NSClient直接完成監控,所有的監控是由NSClient完成的.

    這也說明了NSClient的一個很大的問題,不靈活,沒有可擴展性.它只能完成自己本身包含的監控操作,不能由一些插件來擴展.好在NSClient已經做的不錯了,基本上可以完全滿足我們的監控需要.

    1)安裝NSClient

    http://sourceforge.net/projects/nscplus下載NSClient++-0.2.7.zip

    解壓為C:\NSClient++

    打開cmd 切換到C:\NSClient++

    執行nsclient++ /install進行安裝

    執行nsclient++ SysTray 注意大小寫,這一步是安裝系統托盤,時間稍微有點長

    ②軟件安裝

    NSCP-0.4.0.183-Win32.msi,按一般windows軟件進行安裝,即可

    2)在運行里面輸入services.msc打開服務

    看到下圖就說明NSClient服務已經安裝上了

    雙擊打開,登錄標簽,允許服務與桌面交互前打勾

    3)編輯NSClient++下的NSC.ini文件

  • [modules]部分的所有模塊前面的注釋都去掉,除了CheckWMI.dllRemoteConfiguration.dll這兩個

    </td> </tr>

    [Settings]部分設置'password'選項來設置密碼,作用是在nagios連接過來時要求提供密碼.這一步是可選的。

    </td> </tr>

    [Settings]部分'allowed_hosts'選項的注釋去掉,并且加上運行nagios監控主機的IP.我改為如下這樣allowed_hosts=127.0.0.1/32,192.168.0.111 以逗號相隔.這個地方是支持子網的,如果寫成192.168.0.0/24則表示該子網內的所有機器都可以訪問.如果這個地方是空白則表示所有的主機都可以連接上來.注意是[Settings]部分的,因為[NSClient]部分也有這個選項.

    </td> </tr>

    必須保證[NSClient]'port'選項并沒有被注釋,并且它的值是'12489',這是NSClient的默認監聽端口

    </td> </tr> </tbody> </table>

    CMD中執行nsclient++ /start啟動服務,注意所在目錄是C:\NSClient++

    這時在桌面右下角的系統托盤處會出現一個黃色的M字樣的圖標(有的沒有)

    查看服務

    已經正常啟動了.注意服務默認設的是”自動”,也就是說是開機自動啟動的.

    cmd里面執行netstat an可以看到已經開始監聽tcp12489端口了

    這樣外部就可以訪問了嗎?!防火墻也要打開tcp12489端口,否則nagios檢查此服務的時候會報socket 超時錯誤.critical!后果很十分嚴重啊.我就犯了這個錯誤,所以特別強調一下.

    這樣被監控機的配置就搞定了,它就等待nagios發出某個監控請求,然后它執行請求將監控的結果發回到nagios監控主機上.

    4)對監控主機的配置

    接下來就是要配置監控主機了.與之前的nrpe的過程類似,在監控主機上做的就3件事情

    1.安裝監控windows的插件(已經默認安裝了,check_nt)

    2.定義命令

    3.定義要監控的項目

    5)定義命令

    vi /usr/local/nagios/etc/commands.cfg

    增加下面的內容(注意:可能已有了,有就修改)

  • ########################################################################

    #

    # 2007.9.6 add by yahoon

    # CHECK_NT

    # check windows hosts info

    #

    ########################################################################

    define command{

            command_name    check_nt

            command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489  -v $ARG1$ $ARG2$

            }

    </td> </tr> </tbody> </table>

    如果NSClient設置了連接需要密碼,則應寫成如下格式

    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s PASSWORD -v $ARG1$ $ARG2$

    具體含義參考check_nt命令的用法

    6)增加監控項目

    vi /usr/local/nagios/etc/services.cfg

    下面這個服務是監控NSClient的版本

    define service{

            host_name               yahoon

            service_description     check-version

            check_command           check_nt!CLIENTVERSION

            max_check_attempts      5

            normal_check_interval   3

            retry_check_interval    2

            check_period            24x7

            notification_interval   10

            notification_period     24x7

            notification_options    w,u,c,r

            contact_groups          sagroup

            }

    </td> </tr> </tbody> </table>

    同樣的可以增加如下服務(為了篇幅,我只給出最關鍵的check_command這一項)

    1)監控windows服務器運行的時間

    check_command           check_nt!UPTIME

    2)監控Windows服務器的CPU負載,如果5分鐘超過80%則是warning,如果5分鐘超過90%則是critical

    check_command           check_nt!CPULOAD!-l 5,80,90

    3)監控Windows服務器的內存使用情況,如果超過了80%則是warning,如果超過90%則是critical.

    check_command           check_nt!MEMUSE!-w 80 -c 90

    4)監控Windows服務器C:\盤的使用情況,如果超過80%已經使用則是warning,超過90%則是critical

    check_command           check_nt!USEDDISKSPACE!-l c -w 80 -c 90

    :-l后面接的參數用來指定盤符

    5)監控Windows服務器D:\盤的使用情況,如果超過80%已經使用則是warning,超過90%則是critical

    check_command           check_nt!USEDDISKSPACE!-l d -w 80 -c 90

    6)監控Windows服務器的W3SVC服務的狀態,如果服務停止了,則是critical

    check_command           check_nt!SERVICESTATE!-d SHOWALL -l W3SVC

    7)監控Windows服務器的Explorer.exe進程的狀態,如果進程停止了,則是critical

    check_command           check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe

    7)重啟nagios服務來生效,等一會就可以查看頁面了

    (紅色的錯誤是因為我剛把ftp給關了,等會啟動就好了)發現有三個服務的顏色是深黃色,狀態是UNKNOWN,后面的信息是NSClient - ERROR: PDH Collection thread not running

    這問題有點莫明其妙,因為大部分的新增服務都已經可以正常運行了,不要緊,把這句話放到goole里面一看,原來是由于操作系統語言的問題,好像NSClient默認支持的語言并不多.具體信息參考下面這兩個頁面

    http://trac.nakednuns.org/nscp/ticket/54

    http://www.meulie.net/portal_plugins/forum/forum_viewtopic.php?8636

    查看NSClient的日志C:\NSClient++下的nsclient.log,里面信息如下

    2007-09-06 10:38:35: error:.\PDHCollector.cpp:69: Getting counter info...

    2007-09-06 10:38:35: error:.\PDHCollector.cpp:97: Detected language: 0x0804 but it could not be found in: counters.defs

    2007-09-06 10:38:35: error:.\PDHCollector.cpp:98: You need to manually configure performance counters!

    </td> </tr> </tbody> </table>

    注意紅色部分,說是需要我手動配置.按照它的說明打開counters.defs文件,查看一下里面的內容,很容易就知道該怎么改了.結合上面的錯誤信息知道0x0804是當前系統語言”簡體中文”的代碼,推測系統文件和變量應該與原始的英文版都一樣,復制文件里面"English US"那部分內容,再做修改就行.我在counters.defs的最后加上了如下的內容:

    [0x0804]

    Description = "Chinese"

    NT4_SystemTotalProcessorTime = "\System\% Total Processor Time"

    NT4_SystemSystemUpTime = "\System\System Up Time"

    NT4_MemoryCommitLimit = "\Memory\Commit Limit"

    NT4_MemoryCommitByte = "\Memory\Committed Bytes"

    W2K_SystemTotalProcessorTime = "\Processor(_total)\% Processor Time"

    W2K_SystemSystemUpTime = "\System\System Up Time"

    W2K_MemoryCommitLimit = "\Memory\Commit Limit"

    W2K_MemoryCommitByte = "\Memory\Committed Bytes"

    </td> </tr> </tbody> </table>

    OK,再等一會看頁面,發現沒變化,看來這樣依樣畫葫蘆不行啊…不甘心,看看日志,再次打開nsclient.log發現里面的內容沒變.新修改的那部分根本就沒起作用?至少也應該像之前那樣報個ERROR才對啊?修改配置文件之后要干嘛???重啟服務!!!!

    mmc里面重啟NSClient服務,如下圖右擊對應的服務選”重新啟動”

    查看日志,內容如下

  • 2007-09-06 12:32:37: error:.\PDHCollector.cpp:69: Getting counter info...

    2007-09-06 12:32:37: error:.\PDHCollector.cpp:119: Attempting to open counter...

    2007-09-06 12:32:38: error:.\PDHCollector.cpp:122: Counters opend...

    </td> </tr> </tbody> </table>

    看起來沒什么問題(里面的error是引導符,開發這個程序的人下次該換換,正確了就不該是erorr了嘛),這邊看起來沒問題了,可還是要等頁面正常才放心.耐心的等一會,得到了下面的頁面.

    后記:

    羅唆一句,官方文檔是最好的教程.大家可以看到我的所有操作,大部分都是按照官方文檔一步步配置的.而且按照它配置出來的也就基本滿足需要了.了解了整個過程和原理,就可以自己加加減減做修改滿足自己的個性需求,出了問題不要緊,查文檔,google,達到活學活用也不是難事.

    還是那句話,知道了原理,一切就都簡單了.

    最后針對nagios提煉幾個要點

    對于插件要注意使用方法,多用”命令名 –h”看看

    修改了配置文件要重啟服務生效

    碰到問題google一下,別忘記了查看日志

    附錄:

    1.重啟nagios的方法

    之前我說重啟nagios的時候都是用的殺進程的方式,其實也可以不這么做.如果在安裝nagios的時候安裝了啟動腳本就可以使用/etc/init.d/nagios restart 還可以帶的參數有stop, start,status

    如果報錯了,有可能是腳本里面的路徑設置錯誤,解決辦法

    vi /etc/init.d/nagios

    prefix=/usr/local/nagiosaa改為安裝的目錄/etc/init.d/nagios

    </td> </tr> </tbody> </table>

    :nagios安裝的時候說是將腳本安裝到了/etc/rc.d/init.d,其實這和/etc/init.d是一個目錄

    2.不以xinetd的方式運行nrpe

    因為我們按照nrpe的安裝文檔安裝下來,nrpe是在xinetd下面運行的,個人比較喜歡像nagios那樣以單獨的daemon來運行.這樣比較好控制.

    方法:

    編輯 /etc/servicesnrpe注釋掉

  • # Local services

    #nrpe           5666/tcp                        # nrpe

    </td> </tr> </tbody> </table>

    編輯 nrpe.cfg,增加監控主機的地址

    # NOTE: This option is ignored if NRPE is running under either inetd or xinetd

    allowed_hosts=127.0.0.1,192.168.0.111

    注意兩個地址以逗號隔開

    </td> </tr> </tbody> </table>

    以單獨的daemon啟動nrpe

    [root@dbpi etc]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

    查看

    [root@dbpi etc]# ps -ef|grep nrpe

    nagios   22125     1  0 14:04 ?        00:00:00 [nrpe]

    [root@dbpi nagios]# netstat -an|grep 5666

    tcp        0      0 0.0.0.0:5666            0.0.0.0:*               LISTEN  

    說明已經正常啟動了

    /etc/rc.d/rc.local里面加入下面一行就實現開機啟動nrpe

    /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg d

    同理要開機運行nagios就在/etc/rc.d/rc.local里面增加下面這行

    /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

    3.有關于check_load的用法及意義

    這個插件是用來檢測系統當前的cpu負載,使用的方法為

    check_load [-r] -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15

    unix里面負載的均值通常表示是1分鐘,5分鐘,15分鐘內平均有多少進程處于等待狀態.

    例如check_load -w 15,10,5 -c 30,25,20這個命令的意義如下

    1分鐘多于15個進程等待,5分鐘多于10,15分鐘多于5個則為warning狀態

    1分鐘多于30個進程等待,5分鐘多于25,15分鐘多于20個則為critical狀態</span>

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!