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-server的ftp. 14

2).監控dbpi的ssh. 15

3).監控yahoon的IIS.. 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


總結

一、簡介:
1、nagios的功能:
監控服務和主機

2、監控機(可想象爲常見服務的服務器):
安裝了nagios軟件的機器,對監控的數據做處理,並且提供web界面查看和管理.當然也可以對本機自身的信息進行監控.

3、被監控機(可想象爲常見服務的客戶端):
安裝了NRPE等客戶端,根據監控機的請求執行監控,然後將結果回傳給監控機.

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

狀態

代碼

顏色

正常

OK

綠色,

警告

WARNING

黃色,

嚴重

CRITICAL

紅色,

未知錯誤

UNKOWN

深黃色

二、安裝軟件:
監控機:需安裝的軟件有nagios、nagios-plugins和apache(不做介紹)

①、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裏面定義了一些基本的對象,一般用到的有:

聯繫人

contact

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

監控時間段

timeperiod

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

被監控主機

host

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

監控命令

command

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

被監控的服務

service

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

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

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

所有這些對象絕對多數都是需要我們手動定義的,這就是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

}

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 [email protected]

pager 1338757xxxx

address1 [email protected]

address2 555-555-5555

}

service_notification_period 24x7

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

host_notification_period 24x7

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

service_notification_options w,u,c,r

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

host_notification_options d,u,r

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

service_notification_commands notify- service -by-email

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

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

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

email [email protected]

很明顯,聯繫的人email地址

pager 1338757xxxx

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

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

6)下面就可以將多個聯繫人組成一個聯繫人組contactgroups.cfg
按照下面的方式簡單的複製修改組名和別名就可以創建多個聯繫人組了.

define contactgroup{

contactgroup_name 組名

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

alias 別名 //別名

members 用戶名

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

}

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部分的介紹

}

8)與聯繫人可以組成聯繫人組一樣,多個主機也可以組成主機組. hostgrops.cfg
按照下面的方式簡單的複製修改主機組名、IP和別名就可以創建多個主機組了.

define hostgroup{

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

alias 別名 //別名

members 主機名

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

}

下面是最關鍵的了,用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中定義的

}

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

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:

……以下略

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

[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

}

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 dbpi的ip地址 -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$

}

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下的插件

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


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

開放nagios-server的ftp

開放dbpi的ssh

開放yahoon的IIS

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

1).監控nagios-server的ftp
編輯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

}

2).監控dbpi的ssh
define service{

host_name dbpi

意義同上

service_description check-ssh

意義同上

check_command check_tcp!22

ssh所用的tcp的22號端口,我就用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

}

3).監控yahoon的IIS
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

}

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

}

修改了配置文件,當然就要重新啓動了,簡單的方法殺掉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,也就是圖中運行NRPE的remote 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

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.

接下來安裝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,以空格間隔

}

改後

only_from = 127.0.0.1 192.168.0.111

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

增加如下

# Local services

nrpe 5666/tcp # nrpe

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

也就是在本地用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

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

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

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

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

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

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

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

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

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

check_nrpe!check_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

看到已經正確返回了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$

}

意義如下

command_name check_nrpe

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

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

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

-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

}

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

之前我們說過了,今天還有一個任務是要監控dbpi的swap使用情況.但是很遺憾,在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%

我們知道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

}

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

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

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

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

五、如何監控windows系統的”本地信息”
細心的朋友可能注意到了,在nagios的libexec下有check_nt這個插件,它就是用來檢查windows機器的服務的,其功能類似於上一章講的check_nrpe.不過還需要搭配另外一個軟件NSClient,它則類似於NRPE

NSClient的原理如下圖


可以看到,NSClient與nrpe最大的區別就是:

被監控機上安裝有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.dll和RemoteConfiguration.dll這兩個

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

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

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

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


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


查看服務


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

在cmd裏面執行netstat –an可以看到已經開始監聽tcp的12489端口了


這樣外部就可以訪問了嗎?錯!防火牆也要打開tcp的12489端口,否則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$

}

如果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

}

同樣的可以增加如下服務(爲了篇幅,我只給出最關鍵的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!

注意紅色部分,說是需要我手動配置.按照它的說明打開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"

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...

看起來沒什麼問題(裏面的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

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

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

方法:

編輯 /etc/services將nrpe註釋掉

# Local services

#nrpe 5666/tcp # nrpe

編輯 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

注意兩個地址以逗號隔開

以單獨的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狀態
 

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