天天看點

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

③、修改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

④、增加驗證使用者

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

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

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

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

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

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

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

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

很明顯,聯系的人email位址

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

alias是聯系人别名,address是位址 意義不大.

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

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

define contactgroup{

contactgroup_name 組名

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

alias 别名 //别名

members 使用者名

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

7)定義被監控主機,建立檔案hosts.cfg

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

define host{

host_name 主機名

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

//别名

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

這句話的意思是定義的指令名是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

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上節我們定義監控主機存活的代碼.略做修改.

host_name nagios-server

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

service_description check ftp

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

check_command check_ftp

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

contact_groups sagroup

2).監控dbpi的ssh

host_name dbpi

意義同上

service_description check-ssh

check_command check_tcp!22

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

3).監控yahoon的IIS

host_name yahoon

service_description check-http

check_command check_http

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

service_description check disk

check_command check_local_disk!10%!5%!/

修改了配置檔案,當然就要重新啟動了,簡單的方法殺掉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

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

輸出如下

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

*** 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插件

隻運作這一步就行了,因為隻需要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的版本資訊,說明一切正常.

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

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

在最後面增加如下内容

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

# NRPE COMMAND

# 'check_nrpe ' command definition

command_name check_nrpe

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

意義如下

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

這是定義實際運作的插件程式.這個指令行的書寫要完全按照check_nrpe這個指令的用法.不知道用法的就用check_nrpe –h檢視

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

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

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

service_description check-load

監控項目的名稱

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

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

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

之前我們說過了,今天還有一個任務是要監控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)在監控機上增加這個監控項目

service_description check-swap

check_command check_nrpe!check_swap

所有的配置檔案已經修改好了,現在重新開機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

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的版本

service_description check-version

check_command check_nt!CLIENTVERSION

同樣的可以增加如下服務(為了篇幅,我隻給出最關鍵的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注釋掉

#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

說明已經正常啟動了

在/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裡面增加下面這行

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

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

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

在unix裡面負載的均值通常表示是1分鐘,5分鐘,15分鐘内平均有多少程序處于等待狀态.

繼續閱讀