基於nagios網絡監控平臺的實現--具體事例

Nagios的安裝

本論文以如下三臺主機爲例進行事例搭建監控,三臺主機詳細信息如下

5-1 三臺事例主機詳細信息

主機名

操作系統

IP

作用

nagios-server

redhat 9

192.168.77.128

監控機

linux-client

redhat 9

192.168.77.130

被監控機

window-client

xp

192.168.77.1

被監控機

注:

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

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

準備工作

本監控平臺不需要特別的運行環境支持,只要求操作系統是主流Linux即可,本監控平臺能很好的支持各類Linux的分支系統如RedHat、Fedora、opeensuse、Ubuntu等。在監控環境下,由於主監控機承擔着揭示整個監控系統運行情況的工作,所以需要安裝有ApaChe(或者其他http服務,大多數發行版Linux都已自帶)用來提供一個直觀的界面來查看所有的彙總監控信息。

1.前提條件

基於nagios是在linux主機上的一種開源軟件,所以需要在linux系統的主機上才能搭建。

2.需要的軟件

nagios-2.9.tar.gz(nagios主程序)

nagios-plugins-1.4.9.tar.gz(監控linux主機需要)

nrpe-2.8.1.tar.gz(監控linux主機需要))

3.配置防火牆selinux

如果系統開啓了selinux服務,則默認爲拒絕nagios web cgi程序的運行。從而無法執行監控頁面,通過下面的命令來確認系統關閉了selinux:

#setenforce 0

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


5.1.2安裝依賴包,啓動相關服務

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

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

# yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-server

此外,要想完整的安裝關運行本文中所描述的環境,您得準備一個功能完備的LAMP運行環境。(linux+apache+mysql+php)

2.啓動相關服務

因爲nagios監控系統是基於web頁面形式的,所以需要開始httpd服務,又因爲之後要用到郵件報警所以,也需要郵件服務sendmail開始

5.1.3 Nagios監控系統的編譯安裝

一、添加nagios運行所需要的用戶和組:

# groupadd nagcmd

# useradd -m nagios

# usermod -a -G nagcmd nagios

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

# usermod -a -G nagcmd apache

二、編譯安裝nagios:

# tar zxf nagios-3.1.2.tar.gz

# cd nagios-3.1.2

# ./configure --with-command-group=nagcmd --enable-event-broker

# make all&& make install&& make install-init&& make install-config&& make install-commandmode

說明:第一步執行make install安裝主要的程序、CGI及HTML文件,第二步執行make install-init的步驟,它的作用是把nagios做成一個運行腳本,使nagios隨系統開機啓動,這是一個很方便的措施。第三步執行 make install-config 把配置文件的例子複製到nagios的安裝目錄。執行 make install-commandmode 給外部命令訪問nagios配置文件的權限。


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

# vi /usr/local/nagios/etc/objects/contacts.cfg

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

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

# make install-webconf

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

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

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

# service httpd restart

三、編譯、安裝nagios-plugins

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

# tar zxf nagios-plugins-1.4.13.tar.gz

# cd nagios-plugins-1.4.13

# ./configure --with-nagios-user=nagios --with-nagios-group=nagios

# make&& make install

四、配置並啓動Nagios

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

# chkconfig --add nagios

# chkconfig nagios on

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

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

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

# service nagios start

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

http://192.168.77.128/nagios

5.1.4 Nagios的初始化前配置

1)預備知識

Nagios自己定義了一套規則用於配置文件,其中最重要的概念就是”對象”----object.通俗的理解:假定我們首先定義了”性別”這個對象,它的值只可能是男,女 ,然後定義某人爲一個對象,例如張三,定義張三的時候有”性別”這個屬性,它的值就必須來源了之前定義的性別這個對象,要麼是男是女,在Nagios裏面定義了一些基本的對象,一般用到的有:

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

2)修改配置文件-開啓相應的配置

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

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

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

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

(確保use_authentication=1//驗證)

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

authorized_for_system_information=nagiosadmin,用戶名

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

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

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

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

注意:按照對應的方式簡單的複製修改主機名、IP和別名就可以創建多個被監控主機.

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

注意:按照對應的方式簡單的複製修改主機名、IP和別名就可以創建多個被監控主機組。

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

注意:按照對應的方式簡單的複製修改主機名、命令和組名就可以創建多個服務。並且主機名要與hosts.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,並設置爲開機自動啓動

12)一切配置完成,即可登錄頁面查看監控信息

5.2使用Nrpe插件監控Linux主機上的本地信息

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

其中的具體原理已經在2.5節詳細說明,此節重點說明具體的實現過程。

5.2.1被監控linux主機上的 配置

1)增加用戶並設置密碼

[root@dbpi root]# useradd nagios

[root@dbpi root]# passwd nagios

2)編譯安裝nagios插件nagios-plugins

3)編譯安裝監控插件nrpe

4)編輯這個nrpe腳本

vi /etc/xinetd.d/nrpe

only_from= 127.0.0.1 192.168.77.128(監控主機ip地址)//注意中間用空格而不是逗號間隔

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

Vi /etc/services

Nrpe 5666/tcp

6)重啓xinetd服務

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

7)查看NRPE是否已經啓動

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

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

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

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

9)可查看或添加 NRPE的監控命令//在/usr/local/nagios/etc/目錄下

ps:我的linux服務器端的配置文件代碼如下

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

/usr/local/nagios/etc/objects/localhost.cfg

# Define a host for the local machine
define host{
use         linux-server,hosts-pnp      ; 給網絡設備用的
host_name       HomeSwitch
alias           HomeSwitch
address                192.168.77.128
icon_image              switch.gif
statusmap_image         switch.gd2
2d_coords       100,200
3d_coords       100,200,100
}
define host{
use                     linux-server,hosts-pnp
host_name               monitor
alias                   理工畢業設計
parents         HomeSwitch
address                 192.168.77.128
icon_image              web.gif
statusmap_image         web.gd2
2d_coords       100,300
3d_coords       100,300,100
}
#define host{
#        use                     linux-server
#        host_name               MyGamePC
#        alias                   MyGamePC
#   parents         HomeSwitch
#        address                 127.0.0.1
#        icon_image              server.gif
#        statusmap_image         server.gd2
#   2d_coords       200,300
#   3d_coords       200,300,100
#        }
#define host{
#        use                     linux-server
#        host_name                  HomeRouter
#        alias                   HomeRouter
#   parents         HomeSwitch
#        address                 127.0.0.1
#        icon_image              router.gif
#        statusmap_image         router.gd2
#   2d_coords       200,200
#   3d_coords       200,200,100
#        }
#define host{
#        use                     linux-server
#        host_name                  xDSL
#        alias                   xDSL
#   parents         HomeSwitch
#        address                 127.0.0.1
#        icon_image              router.gif
#        statusmap_image         router.gd2
#   2d_coords       200,100
#   3d_coords       200,100,100
#        }
#define host{
#        use                     linux-server
#        host_name                  Firewall
#        alias                   Firewall
#   parents         HomeRouter
#        address                 127.0.0.1
#        icon_image              router.gif
#        statusmap_image         router.gd2
#   2d_coords       300,200
#   3d_coords       300,200,100
#        }
#define host{
#        use                     linux-server
#        host_name                  RADIUS
#        alias                   RADIUS
#   parents         xDSL,MainSwitch
#        address                 192.168.2.1
#        icon_image              router.gif
#        statusmap_image         router.gd2
#   2d_coords       300,100
#   3d_coords       300,100,100
#        }
#
#define host{
#   use         linux-server        ; 給網絡設備用的
#   host_name       MainSwitch
#   alias           MainSwitch
#   parents         Firewall
#        address                 127.0.0.1
#        icon_image              switch.gif
#        statusmap_image         switch.gd2
#   2d_coords       400,200
#   3d_coords       400,200,100
#   }
#define host{
#        use                     linux-server
#        host_name               IBME450
#        alias                   IBME450
#   parents         MainSwitch
#        address                 127.0.0.1
#        icon_image              server.gif
#        statusmap_image         server.gd2
#   2d_coords       300,300
#   3d_coords       300,300,100
#        }
#define host{
#        use                     linux-server
#        host_name                  SunUltra10
#        alias                   SunUltra10
#   parents         MainSwitch
#        address                 127.0.0.1
#        icon_image              server.gif
#        statusmap_image         server.gd2
#   2d_coords       400,300
#   3d_coords       400,300,100
#        }
#define host{
#        use                     linux-server
#        host_name                  Manager
#        alias                   Manager
#   parents         MainSwitch
#        address                 127.0.0.1
#        icon_image              server.gif
#        statusmap_image         server.gd2
#   2d_coords       500,200
#   3d_coords       500,200,100
#        }
###############################################################################
###############################################################################
#
# HOST GROUP DEFINITION
#
###############################################################################
###############################################################################
# Define an optional hostgroup for Linux machines
define hostgroup{
hostgroup_name  linux-servers ; The name of the hostgroup
alias           Linux Servers ; Long name of the group
members         *     ; Comma separated list of hosts that belong to this group
}
define hostgroup{
hostgroup_name 本地監控機器組
alias   畢業設計服務器
members monitor
}
define servicegroup{
servicegroup_name 系統負荷檢查
alias 負荷檢查
members monitor,進程總數,monitor,登錄用戶數,monitor,根分區,monitor,交換空間利用率
}
define servicegroup{
servicegroup_name 全部聯通性檢查
alias 聯通性檢查
members HomeSwitch,PING,monitor,PING
}
###############################################################################
###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################
###############################################################################
# Define a service to "ping" the local machine
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                       *
service_description             PING
check_command           check_ping!100.0,20%!500.0,60%
}
# Define a service to check the disk space of the root partition
# on the local machine.  Warning if < 20% free, critical if
# < 10% free space on partition.
define service{
use                             local-service         ; Name of service template to use
host_name                       monitor
service_description             根分區
check_command           check_local_disk!20%!10%!/
}
# Define a esrvice to check the number of currently logged in
# users on the local machine.  Warning if > 20 users, critical
# if > 50 users.
define service{
use                             local-service         ; Name of service template to use
host_name                       monitor
service_description             登錄用戶數
check_command           check_local_users!20!50
}
# Define a service to check the number of currently running procs
# on the local machine.  Warning if > 250 processes, critical if
# > 400 users.
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                       monitor
service_description             進程總數
check_command           check_local_procs!250!400!RSZDT
}
# Define a service to check the load on the local machine.
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                      monitor
service_description             系統負荷
check_command           check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
# Define a service to check the swap usage the local machine.
# Critical if less than 10% of swap is free, warning if less than 20% is free
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                      monitor
service_description             交換空間利用率
check_command           check_local_swap!20!10
}
# Define a service to check SSH on the local machine.
# Disable notifications for this service by default, as not all users may have SSH enabled.
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                      monitor
service_description             SSH
check_command           check_tcp!22!1.0!10.0
notifications_enabled       0
}
# Define a service to check HTTP on the local machine.
# Disable notifications for this service by default, as not all users may have HTTP enabled.
define service{
use                             local-service,services-pnp        ; Name of service template to use
host_name                       monitor
service_description             HTTP
check_command           check_http
notifications_enabled       0
}
#網卡流量
define service{
use                             local-service,services-pnp
host_name monitor
service_description check_traffic
check_command check_traffic
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
}

/usr/local/nagios/etc/objects/mylinux-client.cfg

define host{
use         linux-server
host_name   mylinux-client
alias       mylinux
address     192.168.77.130
#小太陽圖標畫圖
process_perf_data  1
action_url  /nagios/pnp/index.php?host=$HOSTNAME$
}
define service{
use                 generic-service
#使用的是/usr/local/nagios /etc/objects/templates.cfg中所定義的
host_name           mylinux-client
service_description Swap Usage
check_command       check_nrpe!check_swap
}
define service{
use                 generic-service
host_name           mylinux-client
service_description Current Load
check_command       check_nrpe!check_load
}
define service{
use                 generic-service
host_name           mylinux-client
service_description Partition Usage
check_command       check_nrpe!check_disk
}
define service{
use                 generic-service
host_name           mylinux-client
service_description Current Users
check_command       check_nrpe!check_users
}
define service{
use                 generic-service
host_name           mylinux-client
service_description Total Processes
check_command       check_nrpe!check_total_procs
}
define service{
use                 generic-service
host_name           mylinux-client
service_description PING
check_command       check_nrpe!check_ping
}
define service{
use                    generic-service
host_name            mylinux-client
service_description  httpd
check_command     check_http! -H 192.168.77.130
#此時ip爲監控對方客戶端ip!
}

5.2.2 Nagios的監控主機上的配置

因爲之前監控主機上,已經將nagios運行起來了,現在要做的事情是:

1) 安裝check_nrpe插件並測試與被監控linux主機的聯通性

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

/usr/local/nagios/libexec/check_nrpe -H 192.168.77.130

注意:監控主機與被監控主機使用的nrpe版本要一致!

2) 在commands.cfg中創建check_nrpe的命令定義

因爲只有在commands.cfg中定義過的命令才能在services.cfg中使用

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

define command{

command_name check_nrpe

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

}


3)在services.cfg文件中創建對被監控主機的監控項目

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

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

增加下面這一行

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

注意:如果你是以獨立的daemon運行的nrpe,那麼需要手動重啓.如果你是在xinetd或者inetd下面運行的,則不需要.由於我們是xinetd下運行的,所以不需要重啓服務

5.3使用NSClient插件監控windows主機系統

NSClient的原理如下圖

根據前幾個章節的具體描述可以看到,NSClient與nrpe最大的區別就是:

被監控機上安裝有nrpe,並且還有插件,最終的監控是由這些插件來進行的.當監控主機將監控請求發給nrpe後,nrpe調用插件來完成監控.NSClient則不同,被監控機上只安裝NSClient,沒有任何的插件.當監控主機將監控請求發給NSClient後,NSClient直接完成監控,所有的監控是由NSClient完成的.這也說明了NSClient的一個很大的問題,不靈活,沒有可擴展性.它只能完成自己本身包含的監控操作,不能由一些插件來擴展.好在NSClient已經做的不錯了,基本上可以完全滿足我們的監控需要.

監控 Windows 服務必須在被監控端裝有插件程序,基於我校監控系統對所有 windows 服務器安全保護措施,在實現過程中僅以個人主機爲被監控的windows客戶端。:

5.3.1 Windows 服務器被監控主機的配置

1.下載安裝NSClient

http://sourceforge.net/projects/nscplus下載並解壓安裝,按一般windows軟件進行安裝即可。

2.在運行裏面輸入services.msc打開”服務” 看到下圖就說明NSClient服務已經安裝上了

spacer.gif

3. 修改NSCliet++ 的配置文件NES.ini,默認安裝在C盤下

在[modules]選項裏,啓用所有註釋的配置命令,但保留 CheckWMI.dll 和 RemoteConfiguration.dll 的註釋。

4.更改[Settings]選項

修改 allowd_host=192.168.77.128 //nagios 服務器的 ip 地址

5.修改[NSClient]選項

啓用 port=12489 的配置,系統通過端口 12489 偵聽,系統中取消對該端口的限制後再執行 nsclient 命令。

6.重啓服務,確認服務開啓,並處於監聽狀態

我的電腦—右鍵管理—服務和應用程序—啓動NSClient++服務,打開cmd執行netstat –an查看監聽狀態

5.3.2 Nagios 服務器監控主機端的配置

對監控主機的配置

與之前的nrpe的過程類似,在監控主機上做的就3件事情

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

2.定義命令

3.定義要監控的項目

第一種方法:如果只是定義一臺windows主機,那麼可以使用templates.cfg裏面的windows配置板,此處我只定義一臺windows主機,所以我使用模板

1.首先更改nagios.cfg配置文件,讓其支持windows.cfg定義對象,找到41行,去掉前面#

2.查看nagios的命令配置定義對象,看是否有check_nt的定義,如果沒有,自行加入(此處commands.cfg文件中已有定義,不用自己編寫)

3.定義主機,編輯objects/windows.cfg文件,此文件中,只需更改29行的ip地址即可,改成被監控端windows的(由於此文件中已經寫好要監控的東西,所以不用再另行編寫,如果想定義此文件中沒有的內容,可自動編寫)

Vim  /usr/local/nagios/etc/objects/windows.cfg

define host{
use     windows-server,hosts-pnp    ; Inherit default values from a template
host_name   zangwinserver   ; The name we're giving to this host
alias       My Windows Server   ; A longer name associated with the host
address     192.168.77.1; IP address of the host
process_perf_data 1
action_url /nagios/pnp/index.php?host=$HOSTNAME$
}
define hostgroup{
hostgroup_name  windows-servers ; The name of the hostgroup
alias       Windows Servers ; Long name of the group
}
define service{
use         generic-service
host_name       zangwinserver
service_description NSClient++ Version
check_command       check_nt!CLIENTVERSION
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description Uptime
check_command       check_nt!UPTIME
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description CPU Load
check_command       check_nt!CPULOAD!-l 5,80,90
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description Memory Usage
check_command       check_nt!MEMUSE!-w 80 -c 90
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description C:\ Drive Space
check_command       check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description W3SVC
check_command       check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description Explorer
check_command       check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
}


4.最後檢查配置是否正確,並重啓nagios服務。


5.4 監控網絡核心交換機配置

1)編輯 Nagios 的主配置文件:

root@sz-yunfan:~# vi /usr/local/nagios/etc/nagios.cfg

啓用下面這行配置

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

2)配置 Nagios

需要做些對象定義用於監控新的交換機與路由器等網絡設備。

打開 switch.cfg 配置文件進行配置

# vi /usr/local/nagios/etc/objects/switch.cfg

對被監控的交換機加一個新的主機對象定義。 編輯主機對象中的 host_name、alias 和 address 值。

define host{

use generic-switch

host_name 交換機名稱

alias 交換機別名

address 核心交換機ip地址

hostgroups 主機組成員

}

3)監控丟包率和 RTA

增加服務定義配置,用於監控被 Nagios 監控主機到交換機的丟包率和平均回包週期 RTA,檢測週期一般是每 5 分鐘。

define service{

use generic-service

host_name RG6806E

service_description PING

check_command check_ping! 200.0,20%! 600.0,60%

normal_check_interval 5

retry_check_interval 1

}

Nagios 監控系統實現了網絡服務系統重要信息的監控,提供了可靠的、穩定的應用服務,保證了網絡服務的正常運行。解決了日常網絡服務器管理的繁雜工作,釋放了大量的人工管理工作時間。 Nagios 監控系統能準確記錄、定位並及時報警,爲解決網絡操作系統故障提供了寶貴的時間,同時也將故障導致服務中斷的時間降低至最低。有效、可靠的報警爲網絡服務的正常運行提供了良好的保障。

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

define host{
use     generic-switch,hosts-pnp        ; Inherit default values from a template
host_name   switch      ; The name we're giving to this switch
alias       Linksys SRW224P Switch  ; A longer name associated with the switch
address     192.168.32.25       ; IP address of the switch
hostgroups  switches        ; Host groups this switch is associated with
}
define hostgroup{
hostgroup_name  switches        ; The name of the hostgroup
alias       Network Switches    ; Long name of the group
}
define service{
use         generic-service,services-pnp    ; Inherit values from a template
host_name       switch  ; The name of the host the service is associated with
service_description PING        ; The service description
check_command       check_ping!200.0,20%!600.0,60%  ; The command used to monitor the service
normal_check_interval   5       ; Check the service every 5 minutes under normal conditions
retry_check_interval    1       ; Re-check the service every minute until its final/hard state is determined
}
#監控SNMP狀態信息
# Monitor uptime via SNMP
define service{
use         generic-service ; Inherit values from a template
host_name       switch
service_description Uptime
check_command       check_snmp! -C public -o sysUpTime.0
}
監控端口帶寬和流量
define service{
use         generic-service ; Inherit values from a template
host_name       linksys-srw224p
service_description Port 1 Link Status
check_command       check_snmp!-C public -o ifOperStatus.1 -r 1 -m RFC1213-MIB
}
# Monitor bandwidth via MRTG logs
define service{
use         generic-service ; Inherit values from a template
host_name       linksys-srw224p
service_description Port 1 Bandwidth Usage
#check_command      check_local_mrtgtraf!/var/lib/mrtg/192.168.20.25_1.log!AVG!1000000,1000000!5000000,5000000!10
}

5.5 監控網絡核心路由器配置

5.5 nagios報警功能

5.5.1郵箱報警方式

Nagios 的報警功能一直是它最強大的地方,Nagios 默認使用mail 命令發送報警郵件,RedHat默認安裝並啓動了sendmail,使用郵件報警,可以使用139 郵箱的短信通知功能,如此可以省得很大一部分資金的開銷,測試你的Nagios 是否可以正常發送郵件:

[root@Nagios-Server ~]# echo "hehe" | mail -s "test" [email protected]

如果測試沒問題,你的Nagios 配置也沒有問題,就可以正常使用了。

注意:發送的郵件一般會被當做垃圾郵件,存放在垃圾郵件箱。

5.5.2飛信報警方式

1.安裝飛信機器人程序。

# tar -zxvf fetion_linux_2010...tar.gz(現在飛信用的是新版本)

# cp sms /usr/local/nagios/libexec

然後拷貝Library32下的所有庫文件到 /lib 以及/usr/lib。 現在可以測試飛信是否能發信息。

# /usr/local/nagios/libexec/sms -f 號碼 -p 飛信的密碼 -t 接受信息的手機號碼 -m ″信息內容″

注意:只能給好友發信息,發送成功後系統會有相應的提示。 可以使用 /usr/local/nagios/libexec/sms --help 獲得飛信的使用幫助。

2.增加Nagios監控服務器的飛信報警命令。

(1)修 改/usr/local/nagios/etc/objects/command.cfg 文件在郵件報警相關定義 “# ′notify-service-by-email′”後,加入飛信報警的定義。

#notify-host-by-sms

define command{

command_name notify-host-by-sms

command_line /usr/local/nagios/libexec/sms -f號碼 -p 飛信密碼 -t $CONTACTPAGER$ -m ″$HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ on $TIME$ result is $SERVICEOUTPUT$″ $CONTACTPAGER$

}

#notify-service-by-sms

define command{

command_name notify-service-by-sms

command_line /usr/local/nagios/libexec/sms -f號碼 -p 飛信密碼 -t $CONTACTPAGER$ -m ″$HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ on $TIME$ result is $SERVICEOUTPUT$″ $CONTACTPAGER$

}

(2) 修 改/usr/local/nagios/etc/objects/contacts.cfg 文 件 , 定義報警短信的接受人。@163.com,報警短信接收手機號爲18238811

define contact{

contact_name zang

use generic-contact

alias System-Admin

email [email protected]

pager

}

然後把zang添加到組中。

define contactgroup{

contactgroup_name admins

alias Nagios Administrators

members zang

}

(3)修 改/usr/local/nagios/etc/objects/templates.cfg模 版 文 件 。

增加飛信報警。

service_notification_commands notify-service-by-sms, noti-fy-service-by-email

host_notification_commands notify-host-by-sms, notify-service-by-email

保存以上修改後,重啓Nagios服務。 至此基於飛信報警的Nagios服務器配置成功。 現在可以把Nagios監控的一個服務關閉,測試飛信報警。

在複雜的大型網絡的管理中,利用飛信和Nagios網絡監控系統進行管理,網絡管理人員可大大減輕工作量,提高工作效率,最重要的是能夠及時發現網絡的異常,快速處理故障,保證正常教學工作的有效進行。

5.5.3關閉報警

報警是使用率最高的功能了,如果某些服務器需要送修,如果預期進行某些主機和服務的維護工作,我們可以提前關閉該主機或者服務的報警功能,不然你的郵箱會不停的接受報警郵件,默認5 分鐘發送一封報警郵件,直到恢復爲止(Nagios 誓不罷休的精神值得我們應用到學習中)。在Services 標籤下,點擊相應的服務名稱,在右側點擊Disable notifications for this service,直接提交即可關閉,完成後,返回Services 標籤,你會發現,在該服務前面有個小喇叭的符號,上面有個紅色的X。

四、Nagios性能分析圖表的實現
1)安裝PNP支持包rrdtool工具
[root@localhost aaa]# tar zxf rrdtool-1.4.5.tar.gz
[root@localhost aaa]# cd rrdtool-1.4.5
[root@localhost rrdtool-1.4.5]# ./configure --prefix=/usr/local/rrdtool ; make ; make install
2)安裝PNP
[root@localhost rrdtool-1.4.5]# cd /aaa/
[root@localhost aaa]# tar zxf pnp-0.4.13.tar.gz
[root@localhost aaa]# cd pnp-0.4.13
[root@localhost pnp-0.4.13]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata ; make all ; make install ; make install-config ; make install-init
3)配置PNP
A,創建默認配置文件
[root@localhost pnp-0.4.13]# cd /usr/local/nagios/etc/pnp/
[root@localhost pnp]# cp process_perfdata.cfg-sample process_perfdata.cfg
[root@localhost pnp]# cp npcd.cfg-sample npcd.cfg
[root@localhost pnp]# cp rra.cfg-sample rra.cfg
[root@localhost pnp]# chown -R nagios:nagios /usr/local/nagios/etc/pnp/
B,修改process_perfdata.cfg
[root@localhost pnp]# vi /usr/local/nagios/etc/pnp/process_perfdata.cfg
44 LOG_LEVEL = 2
4)修改Nagios主配置文件
A,增加小太陽圖標
[root@localhost pnp]# cd /usr/local/nagios/etc/
[root@localhost etc]# vi templates.cfg
define host{
name hosts-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$
process_perf_data 1
}
define service{
name services-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
process_perf_data 1
}
B、修改nagios.cfg
找到如下幾行去掉註釋
[root@localhost etc]# vi nagios.cfg
833 process_performance_data=1
845 host_perfdata_command=process-host-perfdata
846 service_perfdata_command=process-service-perfdata
C、修改commands.cfg
# 'process-host-perfdata' command definition
define command{
command_name process-host-perfdata
command_line /usr/bin/perl  /usr/local/nagios/libexec/process_perfdata.pl  
}

# 'process-service-perfdata' command definition
define command{
command_name process-service-perfdata
command_line /usr/bin/perl  /usr/local/nagios/libexec/process_perfdata.pl
}
D、修改hosts.cfg文件和services.cfg文件
[root@localhost ~]# vi /usr/local/nagios/etc/objects/hosts.cfg
define host{
use linux-server,hosts-pnp
host_name web
alias benet-web
address 192.168.1.1
}
define host{
use linux-server,hosts-pnp
host_name mysql
alias benet-mysql
address 192.168.1.2
}
define hostgroup{
hostgroup_name sa-servers
alias sa servers
members web,mysql
}
[root@localhost ~]# vi /usr/local/nagios/etc/objects/services.cfg
################- benet web -##########################
define service{
use local-service,services-pnp
host_name web
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service,services-pnp
host_name web
service_description SSH
check_command check_ssh
}
點擊小太陽,出現對主機或服務的監控頁面


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