作者 主題: Lab: Nagios 網路監控主機架設  (閱讀 9160 次)

0 會員 與 1 訪客 正在閱讀本文。

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2588
  • 性別: 男
    • 檢視個人資料
    • sakananote
Lab: Nagios 網路監控主機架設
« 於: 2010-08-07 21:24 »
Lab: Nagios 網路監控主機架設

圖文並茂版本請點這邊
https://docs.google.com/document/edit?id=1KdDNSYcMf7aavNtk3yEJKKT9Muqz5lh9HLRM0H_rcN8&hl=zh_TW&authkey=CLLzvZsP

Server
OS: openSUSE 11.3
IP: 192.168.3.128

Linux Client:  192.168.3.130
Windows Client: 192.168.3.129


Part I:  Nagios伺服器的建置
Server:
1. 安裝Nagios 套件
於server 上面使用 one-click install 安裝 Nagios 套件

Nagios
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios.ymp

Nagios Plugins
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios-plugins.ymp

Nagios Addons Extras
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios-plugins-extras.ymp


2.建立nagiosadmin 密碼
第一次建立密碼的時候 請加上 -c 選項,
新增第二個使用者, 則不需要加上 -c ( 會清空現有的密碼)

請於server 上面
#htpasswd2   -c   /etc/nagios/htpasswd.users   nagiosadmin
 輸入密碼
 再次輸入



3.建立nagiosuser 密碼
請於server 上面
#htpasswd2   /etc/nagios/htpasswd.users   nagiosuser
 輸入密碼
 再次輸入



4.檢視並設定開機啟動nagios
#chkconfig  nagios  --list
#chkconfig  nagios  on
#chkconfig  nagios  --list


5.重新啟動.apache2 並設定開機啟動
#rcapache2  restart
#chkconfig   apache2   --list
#chkconfig   apache2   on
#chkconfig   apache2   --list

6.啟動Nagios
#rcnagios   start

7.測試Nagios 主機運作
開啟瀏覽器 於 URL上面輸入 http://127.0.0.1/nagios/
會出現需要授權的視窗
請輸入
使用者名稱  nagiosadmin
密碼  之前設定的密碼
這個時候應該會出現 Nagios 的相關畫面
如下圖所示
可以觀察相關服務狀況
此時會發現 HTTP 呈現警告狀態
原因為 Apache2 有啟動但是沒有預設的網頁
要解除這個情形可以 建立一個預設網頁
#vi   /srv/www/htdocs/index.html
加入
代碼: [選擇]
<html> It works ! </html>


受監控的相關主機都會被紀錄在 /etc/nagios/nagios.cfg
Linux 的本機的監控設定也是設定於 /etc/nagios/nagios.cfg 內的
 # Definitions for monitoring the local (Linux) host
 cfg_file=/etc/nagios/objects/localhost.cfg


故可以得知之後要監控的主機,
相關的設定檔都要放在 /etc/nagios/objects 資料夾內,
且於/etc/nagios/nagios.cfg 要有cfg_file=xxxx.cfg的設定



另外如果要檢視 Nagios 設定有沒有問題
可以使用
#nagios  -v   /etc/nagios/nagios.cfg
來觀察匯入那些設定檔, 以及有沒有問題


更多的文件也可以參考這邊
http://wiki.nagios.org/index.php/Main_Page



**修改通知 e-mail **
# vi /etc/nagios/objects/contacts.cfg
修改預設的  e-mail
define contact{
        contact_name    nagiosadmi    ; Short name of user
        use    generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias       Nagios Admin            ; Full name of user
        email  sakana@study-area.org ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }
檢視 Nagios 設定有沒有問題
#nagios  -v   /etc/nagios/nagios.cfg


重新啟動 Nagios
#rcnagios   restart


**以上 Nagios 伺服器建置完成**




Part II: Nagios 用戶端-- Linux 伺服器用戶端建置
1.安裝 nagios-nrpe套件
請於Client端啟動 YaST 軟體管理


#yast2  sw_single
並搜尋 nrpe 應該就會看到
nagios-nrpe 套件
nagios-plugins-nrpe 套件
→ 安裝 → 套用
( 或是考慮使用 #yast  -i  nagios-nrpe  nagios-plugins-nrpe)
(根據官方的說法是 相較於 check_by_ssh 的方式比較省資源)


2.設定nagios-nrpe 套件
(另外最好去確認 /etc/services 有沒有 nrpe 5666/tcp # nagios nrpe 的設定)
#grep  5666  /etc/services


修改設定檔 允許 Nagios 伺服器連線
# vi  /etc/nagios/nrpe.cfg
代碼: [選擇]
allowed_hosts=127.0.0.1,192.168.3.128
這邊要注意 127.0.0.1後面要加上 逗點 , 然後主機 IP 不能有空格
不然會出現沒有辦法建立 SSL HandShake
(這個部份可以解釋, 如果nrpe是使用 SystemV 的形式啟動後面都會出現不能建立SSL Handshake ,但是以Xinetd 就不會)



#rcnrpe   start


4.測試nagios-nrpe
設定完成之後 可以於本機及遠端測試


請於Client 端
執行 check_nrpe 測試, 成功應該會出現 NRPE的版本
# /usr/lib/nagios/plugins/check_nrpe   -H   localhost
NRPE v2.12


*************************************************************
請於 Server 端

安裝 nagios-nrpe 套件
#yast  -i  nagios-nrpe
#yast  -i  nagios-plugins-nrpe

針對 nagios client 測試 nagios-nrpe 成功應該會出現 NRPE的版本
#/usr/lib/nagios/plugins/check_nrpe  -H  192.168.3.130
NRPE v2.12
*************************************************************


接下來來測試本機相關資訊

請於 Client 端
執行相關測試
線上使用者人數
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_users

平均負載
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_load

目前使用的process
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_total_procs

Zombie Process
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_zombie_procs

磁碟狀況
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_hda1
(這個部份command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
因為現在 IDE的硬碟以及使用 Kernel 2.6.20 以前的主機越來越少, 所以應該是對應到 /dev/sda1)
故可以修改 /etc/nagios/nrpe.cfg 內的 command 對應
(複製原來的 hda1 改為要監控的 Partition)

#vi   /etc/nagios/nrpe.cfg
代碼: [選擇]
#command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
command[check_sda2]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda2
command[check_sda3]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda3
command[check_ssh]=/usr/lib/nagios/plugins/check_ssh   localhost
command[check_smtp]=/usr/lib/nagios/plugins/check_smtp  localhost
(針對想要加入的指令 可以參考 /usr/lib/nagios/plugins 目錄)


重新啟動 nrpe 服務( 修改完 /etc/nagios/nrpe.cfg 請記得重新啟動服務)
#rcnrpe  restart


再次測試
# /usr/lib/nagios/plugins/check_nrpe -H localhost -c check_sda2
# /usr/lib/nagios/plugins/check_nrpe -H localhost -c check_sda3



另外於 Server端測試 相關的指令
#/usr/lib/nagios/plugins/check_nrpe  -H  192.168.3.130   -c  check_sda3
#/usr/lib/nagios/plugins/check_nrpe  -H  192.168.3.130   -c  check_sda3





Part III: 將linux 伺服器(Nagios Client)加入到 Nagios監控範圍
*************************************************************
請於Server上面

複製 windows 的設定檔 來當成 linux server的設定檔

# cp  /etc/nagios/objects/windows.cfg   /etc/nagios/objects/linux.cfg



修改 /etc/nagios/objects/linux.cfg 內的設定 加上主機名稱 及 修改為Client 的IP
#vi   /etc/nagios/objects/linux.cfg
將原來的
代碼: [選擇]
define host{
use windows-server ; Inherit default values from a template
host_name winserver ; The name we're giving to this host
alias My Windows Server ; A longer name associated with the host
address 192.168.1.2 ; IP address of the host
}

改為 (定義遠端Linux主機的名稱及IP)

define host{
use   linux-server ; 這邊的名稱要參照 template 內的名稱,故不能亂取
host_name   suseserver130 ; The name we're giving to this host 主機名稱(簡稱)
alias  openSUSE Server2 ; A longer name associated with the host 主機名稱(長)
address 192.168.3.130 ; IP address of the host
}


接下來處理服務的部份, 因為所有要監控的服務都會認主機名稱
使用 :%s/winserver/suseserver130/gc 將 define service{ } 內的
 host_name winserver
改為
 host_name suseserver130


接下來定義群組

將原來的

代碼: [選擇]
define hostgroup{
hostgroup_name  windows-servers ; The name of the hostgroup
alias   Windows Servers ; Long name of the group
}


改為

define hostgroup{
hostgroup_name  suse-servers ; The name of the hostgroup 可自行定義的群組名稱(短)
alias  SUSE Servers ; Long name of the group 可自行定義的群組名稱(長)
members   suseserver130 ;群組內的主機, 故要把相關的host_name寫入
}



設定要監控的服務
將define service{ } 內的 service_description 及 check_command
修改(由check_nt 改為check_nrpe)


代碼: [選擇]
define service{
use   generic-service
host_name   suseserver130
service_description  NSClient++ Version
check_command  check_nt!CLIENTVERSION
}

改為(以線上使用者為例)

define service{
use generic-service
host_name suseserver130
service_description Online Users
check_command check_nrpe!check_users
}



define service{
        use                     generic-service
        host_name               suseserver130
        service_description     Check /
        check_command           check_nrpe!check_sda2
        }
define service{
        use                     generic-service
        host_name               suseserver130
        service_description     Check /home
        check_command           check_nrpe!check_sda3
        }
define service{
        use                     generic-service
        host_name               suseserver130
        service_description     Check Load
        check_command           check_nrpe!check_load
        }
define service{
        use                     generic-service
        host_name               suseserver130
        service_description     Total_Procs
        check_command           check_nrpe!check_total_procs
        }
define service{
        use                     generic-service
        host_name               suseserver130
        service_description     Check SSH
        check_command           check_nrpe!check_ssh
        }
define service{
        use                     generic-service
        host_name               suseserver130
        service_description     Check SMTP
        check_command           check_nrpe!check_smtp
        }

請注意主機名稱需對應 define host { } 區段內的 host_name


整理一下對應關係
Server:
/etc/nagios/object/linux.cfg

Client:
/etc/nagios/nrpe.cfg



**設定 NRPE 指令對應**
修改 /etc/nagios/objects/commands.cfg 加入 check_nrpe 的指令對應

# vi   /etc/nagios/objects/commands.cfg
加入
代碼: [選擇]
# 'check_nrpe' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}



**設定 Nagios 載入 linux.cfg **
最後修改 /etc/nagios/nagios.cfg 內的設定 讓 linux.cfg 設定載入, 可以監控nagios Clinet

#vi   /etc/nagios/nagios.cfg
加入
代碼: [選擇]
#Definitions for monitoring the Linux server
 cfg_file=/etc/nagios/objects/linux.cfg


確認設定檔是否無誤
# nagios   -v   /etc/nagios/nagios.cfg

重新啟動 nagios 使其生效
#rcnagios   restart

(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)




Part IV: Nagios 用戶端-- Windows 伺服器/ Windows PC用戶端建置

1.安裝 NSClient++ 軟體
請於 Window 伺服器 或是用戶端

開啟瀏覽器 連線至 NSClient++ 的專案網頁下載軟體
http://sourceforge.net/projects/nscplus/

依造機器的平台 x86 or x86_64 下載軟體 這邊以0.3.8-Win32 為例
http://downloads.sourceforge.net/project/nscplus/nscplus/NSClient%2B%2B%200.3.8/NSClient%2B%2B-0.3.8-Win32.msi?use_mirror=ncu&ts=1280992189&r=http://sourceforge.net/projects/nscplus/files/

出現安裝精靈
請按 Next

接下來 End-User License Agreement
請勾選 ' I accept the terms in the License Agreement' → Next

接下來Custom Setup
請按 Next

NSClient 會偵測是否有舊的設定檔
由於是新的安裝 請按 Next

這個部份是最重要的部份
Allow hosts: 請輸入 Nagios Server的IP (只允許這台機器連線)
再針對要載入的模組 勾選 → Next

開始安裝
點選 Install

安裝完成後
請勾選 Start service → Finish



Part V: 將Windows 伺服器/PC (Nagios Client)加入到 Nagios監控範圍

請於Server上面
複製 windows.cfg  給 Windows 伺服器或是PC 使用
這邊設定檔的名稱 假定為 windows129.cfg
(這邊個人處理方式目前以 IP命名)
# cp  /etc/nagios/objects/windows.cfg   /etc/nagios/objects/windows129.cfg

修改相關設定
# vi   /etc/nagios/objects/windows129.cfg
Step1:
請將文件內 主機名稱(host_name)  winserver 改為Windows  主機名稱
例如 winpc129
可以利用 vi   的取代功能 :%s/winserver/winpc129/gc

Step 2:
請將預設 IP 修改為 正確的 IP 位址

define host{
use windows-server ; 需參考template不可以自己亂取名稱
host_name winserver ; The name we're giving to this host 主機名稱
alias My Windows Server ; A longer name associated with the host 主機名稱(長)
address 192.168.1.2 ; IP address of the host 用戶端IP位址
}
改為
define host{
use windows-server ; Inherit default values from a template
host_name winpc129 ; The name we're giving to this host
alias Windows PC 192.168.3.129 ; A longer name associated with the host
address 192.168.3.129 ; IP address of the host
}
另外確認所有的 define service 內的設定 host_name都是新的主機名稱(winpc129)
define service{
use generic-service
host_name winpc129
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
}
另外一般的 PC 不會開 網頁伺服器 故註解 W3SVC
#define service{
#        use                     generic-service
#        host_name               winpc129
#        service_description     W3SVC
#        check_command           check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
#        }





最後修改 /etc/nagios/nagios.cfg 內的設定
讓 windows129.cfg 設定載入, 可以監控nagios Clinet

#vi   /etc/nagios/nagios.cfg
加入
代碼: [選擇]
cfg_file=/etc/nagios/objects/windows129.cfg

確認設定檔是否無誤
# nagios  -v  /etc/nagios/nagios.cfg


重新啟動 nagios 使其生效
#rcnagios   restart
(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)


這樣第一份 Windows 機器的設定檔就設定完成


如果要加入第二台 Windows 機器設定
可以複製 原來的Windows 設定, 例如
# cp   /etc/nagios/objects/windows129.cfg   /etc/nagios/objects/windows131.cfg

但是要注意的是 主機群組只能定義一次, 也是說第二台PC 以後的 windowsxxx.cfg 內的主機群組定義
都要註解起來, 才不會發生錯誤!!

故請將 第二台的設定檔內的
代碼: [選擇]
define hostgroup{
hostgroup_name windows-servers ; The name of the hostgroup
alias Windows Servers ; Long name of the group
}

註解起來
#define hostgroup{
# hostgroup_name windows-servers ; The name of the hostgroup
# alias Windows Servers ; Long name of the group
# }

以上 ^__^ 大功告成
相關畫面如下



Lab: 建立新的範本 windows-pc
在上面的練習, 是使用  windows-servers 的範本
但是如果要自訂 監控的時間或是 預設的群組
舉例來說 一般的 workstation 不會 24 小時開機, 只會在上班時間開機
所以接下來練習建立, windows-pc 的範本,針對一般的 PC, 指定 上班時間監控.


Nagios 範本設定檔 /etc/nagios/objects/templates.cfg
Nagios 時間範本設定檔   /etc/nagios/objects/timeperiods.cfg


修改 Nagios 的範本檔, 將 windows-servers 複製一份改為 windows-pc
並修改 檢查時間為 workhours


#vi  /etc/nagios/objects/templates.cfg
# Windows host definition template - This is NOT a real host, just a template!
define host{
        name                    windows-pc      ; The name of this host template 範本的名稱
        use                     generic-host    ; Inherit default values from the generic-host template
        check_period      workhours    ; 檢查的時間範圍
        check_interval          5               ; Actively check the server every 5 minutes
        retry_interval          1               ; Schedule host check retries at 1 minute intervals
        max_check_attempts      10              ; Check each server 10 times (max)
        check_command           check-host-alive; Default command to check if servers are "alive"
        notification_period     workhours           ; Send notification out at any time - day or night
        notification_interval   30              ; Resend notifications every 30 minutes
        notification_options    d,r             ; Only send notifications for specific host states
        contact_groups          admins          ; Notifications get sent to the admins by default
        hostgroups           windows-pc   ; window-pc 主機預設會歸屬的群組
        register                0               ; DONT REGISTER THIS - ITS JUST A TEMPLATE
        }

workhours 的檢查時間為 早上 9:00 到 下午 5:00
可以 參考  /etc/nagios/objects/timeperiods.cfg
設定內容如下
# 'workhours' timeperiod definition
define timeperiod{
        timeperiod_name workhours
        alias           Normal Work Hours
        monday          09:00-17:00
        tuesday         09:00-17:00
        wednesday       09:00-17:00
        thursday        09:00-17:00
        friday          09:00-17:00
        }


修改剛剛 windows129 的設定檔
# vi   /etc/nagios/objects/windows129.cfg
修改以下內容 定義群組名稱 windows-pc
define hostgroup{
        hostgroup_name  windows-pc     ; The name of the hostgroup
        alias           Windows pc      ; Long name of the group
        }
修改以下內容 修改套用 windows-pc 的範本
define host{
        use             windows-pc     ; Inherit default values from a template
        host_name       winpc129        ; The name we're giving to this host
        alias           Windows PC 192.168.3.129; A longer name associated with the host
        address         192.168.3.129   ; IP address of the host
        }


確認設定檔是否無誤
# nagios  -v  /etc/nagios/nagios.cfg


重新啟動 nagios 使其生效
#rcnagios   restart
(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)
請重新觀察 Nagios


Lab: 透過 即時通訊 軟體來通知
以上預設的通知方式是透過 e-mail 來傳送通知
如果希望使用更即時的通知方式, 也可以透過 即時通訊軟體來通知管理者
這邊建議使用  Jabber 的方式來通知管理者 ( 也就是透過 Google Talk )

設定的方式可以參考
http://www.gridpp.ac.uk/wiki/Nagios_jabber_notification


但是要使用 Jabber ( Google talk's XMPP ) 的服務要安裝相關套件
這邊我們使用 zypper ( openSUSE Linux 的文字介面套件管理指令) 的方式來安裝套件


先查詢相關套件
# zypper   search   perl-Net*
正在載入套件庫資料...
讀取已安裝的套件...
S | 名稱                               | 摘要                                                | 類型
--+------------------------------------+-----------------------------------------------------+-----
  | perl-Net-CIDR-Lite                 | Perl extension for merging IPv4 or IPv6 CIDR addr-> | 套件
  | perl-Net-DBus                      | Perl extension for the DBus message system          | 套件
  | perl-Net-DNS                       | Perl interface to the DNS resolver                  | 套件
  | perl-Net-DNS-Resolver-Programmable | Programmable DNS resolver class for offline emula-> | 套件
i | perl-Net-Daemon                    | Net::Daemon - Perl extension for portable daemons   | 套件
  | perl-Net-HTTPServer                | A simple perl Http Server                           | 套件
  | perl-Net-IP                        | allow easy manipulation of IPv4 and IPv6 addresses  | 套件
  | perl-Net-IPv4Addr                  | Net::IPv4Addr Module for Perl                       | 套件
  | perl-Net-Ident                     | Lookup the username on the remote end of a TCP/IP-> | 套件
  | perl-Net-Jabber                    | Jabber Perl Library                                 | 套件
  | perl-Net-Libproxy                  | Perl bindings for libproxy                          | 套件
  | perl-Net-Netmask                   | Parse, manipulate and lookup IP network blocks      | 套件
i | perl-Net-SNMP                      | Net::SNMP Perl Module                               | 套件
  | perl-Net-SSLGlue                   | Add/extend SSL support for common perl modules      | 套件
  | perl-Net-SSLeay                    | Net::SSLeay Perl Module                             | 套件
  | perl-Net-Server                    | Net::Server - Extensible, general Perl server eng-> | 套件
  | perl-Net-Telnet                    | Net::Telnet - interact with TELNET port or other -> | 套件
  | perl-Net-Whois-RIPE                | Perl module for implementation of RIPE Whois        | 套件
  | perl-Net-XMPP                      | Collection of Perl Modules for Accessing the XMPP-> | 套件
  | perl-Net-ext                       | Network extension modules for Perl                  | 套件
  | perl-NetAddr-IP                    | Manages IPv4 and IPv6 addresses and subnets         | 套件
i | perl-NetxAP                        | Interface to the protocol family IMAP, IMSP, ACAP-> | 套件


這邊我們需要 perl-Net-Jabber 以及 perl-Net-XMPP  兩個套件
# zypper   install  perl-Net-Jabber   perl-Net-XMPP
正在載入套件庫資料...
讀取已安裝的套件...
正在解決套件相依性...
將會安裝下列新的套件:
  perl-Authen-SASL perl-IO-Socket-SSL perl-Net-Jabber perl-Net-SSLeay perl-Net-XMPP
  perl-Unicode-String perl-XML-Stream
7  新套件將被安裝.
全部下載大小: 702.0 KiB。 完成操作後,將增加 2.8 MiB 的使用。
要繼續嗎? [y/n/?] (y):   Y


將網頁上的 程式儲存為  notify_via_jabber 並修改自己的 google 帳號以及google密碼

# vi   /usr/local/bin/notify_via_jabber

#!/usr/bin/perl -w
#
# script for nagios notify via Jabber / Google Talk Instant Messaging
#   using XMPP protocol and SASL PLAIN authentication.
#
# author: Andrew Elwell <A.Elwell@physics.gla.ac.uk>
# based on work by Thus0 <Thus0@free.fr> and  David Cox
#
# released under the terms of the GNU General Public License v2
# Copyright 2007 Andrew Elwell.

use strict;
use Net::XMPP;

## Configuration
my $username = "填入你的google.username";
my $password = "填入你的google.password";
my $resource = "nagios";
## End of configuration


my $len = scalar @ARGV;
if ($len ne 2) {
   die "Usage...\n $0 [jabberid] [message]\n";
}
my @field=split(/,/,$ARGV[0]);
#------------------------------------

# Google Talk & Jabber parameters :

my $hostname = 'talk.google.com';
my $port = 5222;
my $componentname = 'gmail.com';
my $connectiontype = 'tcpip';
my $tls = 1;

#------------------------------------

my $Connection = new Net::XMPP::Client();

# Connect to talk.google.com
my $status = $Connection->Connect(
       hostname => $hostname, port => $port,
       componentname => $componentname,
       connectiontype => $connectiontype, tls => $tls);

if (!(defined($status))) {
   print "ERROR:  XMPP connection failed.\n";
   print "        ($!)\n";
   exit(0);
}

# Change hostname
my $sid = $Connection->{SESSION}->{id};
$Connection->{STREAM}->{SIDS}->{$sid}->{hostname} = $componentname;

# Authenticate
my @result = $Connection->AuthSend(
       username => $username, password => $password,
       resource => $resource);

if ($result[0] ne "ok") {
   print "ERROR: Authorization failed: $result[0] - $result[1]\n";
   exit(0);
}

# Send messages
foreach ( @field ) {
$Connection->MessageSend(
        to       => "$_\@$componentname",
        resource => $resource,
        subject  => "Notification",
        type     => "chat",
        body     => $ARGV[1]);
}


測試 一下傳送訊息
#perl  /usr/local/bin/notify_via_jabber  自己的google帳號  "testmesg"


接下來修改相關設定
將 notify-by-jabber 以及 host-notify-by-jabber  加入到/etc/nagios/objects/commands.cfg


# vi   /etc/nagios/objects/commands.cfg
代碼: [選擇]
加入 請複製參考網頁上面的設定
( 請注意 -Info: 需在同一行, 複製貼上會斷行, 另外 $SERVICEDESC$  也 會中斷)
# 'host-notify-by-jabber' command definition
define command{         command_name    host-notify-by-jabber
        command_line    /usr/local/bin/notify_via_jabber $CONTACTPAGER$ "Host '$HOSTALIAS$' is $HOSTSTATE$ - Info: $HOSTOUTPUT$"
        }  # 'notify-by-jabber' command definition define command{         command_name    notify-by-jabber
        command_line    /usr/local/bin/notify_via_jabber $CONTACTPAGER$ "$NOTIFICATIONTYPE$ $HOSTNAME$ $SERVICEDESC$ $SERVICESTATE$ $SERVICEOUTPUT$ $LONGDATETIME$"
        }

由上面的指令可以看出 notify_via_jabber 後面傳送的 Google 帳號是由 $CONTACTPAGER$ 來指定
所以我們要新增 聯絡人的 PAGER, 也就是 google 帳號


# vi  /etc/nagios/objects/contacts.cfg
請加入 pager 的設定, 就是要傳送的 google 帳號
define contact{
        contact_name                    nagiosadmin             ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                           Nagios Admin            ; Full name of user
        email                           sakana@study-area.org  
        pager                           要傳送的google帳號
        }

故我們接下來修改範本設定檔  /etc/nagios/objects/templetes.cfg

# vi /etc/nagios/objects/templates.cfg
代碼: [選擇]
修改 generic-contact 內容, 加入 jabber 的設定
define contact{
        name                            generic-contact         ; The name of this contact template
        service_notification_period     24x7                    ; service notifications can be sent anytime
        host_notification_period        24x7                    ; host notifications can be sent anytime
        service_notification_options    w,u,c,r,f,s             ; send notifications for all service statesents
        host_notification_options       d,u,r,f,s               ; send notifications for all host states
        service_notification_commands   notify-service-by-email[color=red],notify-by-jabber[/color] ; 加入設定
        host_notification_commands      notify-host-by-email[color=red],host-notify-by-jabber[/color]    ; 加入設定
        register                        0                       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
        }

確認設定檔是否無誤
# nagios  -v  /etc/nagios/nagios.cfg


重新啟動 nagios 使其生效
#rcnagios   restart
« 上次編輯: 2010-08-07 21:33 由 sakana »
專心投入研究才是王道!!
http://sakananote2.blogspot.com

blay101

  • 可愛的小學生
  • *
  • 文章數: 6
    • 檢視個人資料
Re: Lab: Nagios 網路監控主機架設
« 回覆 #1 於: 2011-07-21 11:52 »
不好意思  請問一下
我照上面的介紹實做
作到下面步驟後有問題
針對 nagios client 測試 nagios-nrpe 成功應該會出現 NRPE的版本
#/usr/lib/nagios/plugins/check_nrpe  -H  192.168.3.130
NRPE v2.12

我出現的是
CHECK_NRPE: Error - Could not complete SSL handshake
我看了一下
allowed_hosts=127.0.0.1,192.168.3.128我也沒空格

可以麻煩一下嗎謝謝


sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2588
  • 性別: 男
    • 檢視個人資料
    • sakananote
Re: Lab: Nagios 網路監控主機架設
« 回覆 #2 於: 2011-07-22 13:36 »
兩邊的 NRPE 的服務都正常嗎 ?

How about log?
專心投入研究才是王道!!
http://sakananote2.blogspot.com

blay101

  • 可愛的小學生
  • *
  • 文章數: 6
    • 檢視個人資料
Re: Lab: Nagios 網路監控主機架設
« 回覆 #3 於: 2011-07-25 15:34 »
謝謝你的解答!!
不過我測了好久,發現是作業系統版本的問題雖然我不知道是什麼原因
就原本我安裝的是open suse11.4不論怎樣弄都不行
但在11.3版的就可以了
但還是謝謝你

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2588
  • 性別: 男
    • 檢視個人資料
    • sakananote
Re: Lab: Nagios 網路監控主機架設
« 回覆 #4 於: 2011-07-25 18:55 »
謝謝你的解答!!
不過我測了好久,發現是作業系統版本的問題雖然我不知道是什麼原因
就原本我安裝的是open suse11.4不論怎樣弄都不行
但在11.3版的就可以了
但還是謝謝你

也謝謝您的回報
^__^
專心投入研究才是王道!!
http://sakananote2.blogspot.com

ccdm

  • 憂鬱的高中生
  • ***
  • 文章數: 165
    • 檢視個人資料
Re: Lab: Nagios 網路監控主機架設
« 回覆 #5 於: 2014-01-07 23:30 »
請教站上先進,一般我們透過nagios都是只在做監控,假設我今天監控的apache web server service port,
假設今天偵測到service port已死,要如何透過外掛程式去自動重啟httpd服務?

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2588
  • 性別: 男
    • 檢視個人資料
    • sakananote
Re: Lab: Nagios 網路監控主機架設
« 回覆 #6 於: 2014-01-08 07:53 »
在 Nagios 內就可以處理了
可以利用 Event Handlers

您可以參考
http://nagios.sourceforge.net/docs/3_0/eventhandlers.html

Service Event Handler Example

The example below assumes that you are monitoring the HTTP server on the local machine and have specified restart-httpd as the event handler command for the HTTP service definition. Also, I will be assuming that you have set the max_check_attempts option for the service to be a value of 4 or greater (i.e. the service is checked 4 times before it is considered to have a real problem). An abbreviated example service definition might look like this...


define service{

   host_name         somehost

   service_description   HTTP

   max_check_attempts      4

   event_handler      restart-httpd

   ...

   }

Once the service has been defined with an event handler, we must define that event handler as a command. An example command definition for restart-httpd is shown below. Notice the macros in the command line that I am passing to the event handler script - these are important!


define command{

   command_name   restart-httpd

   command_line   /usr/local/nagios/libexec/eventhandlers/restart-httpd  $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$

   }

Now, let's actually write the event handler script (this is the /usr/local/nagios/libexec/eventhandlers/restart-httpd script).




#!/bin/sh

#

# Event handler script for restarting the web server on the local machine

#

# Note: This script will only restart the web server if the service is

#       retried 3 times (in a "soft" state) or if the web service somehow

#       manages to fall into a "hard" error state.

#





# What state is the HTTP service in?

case "$1" in

OK)

   # The service just came back up, so don't do anything...

   ;;

WARNING)

   # We don't really care about warning states, since the service is probably still running...

   ;;

UNKNOWN)

   # We don't know what might be causing an unknown error, so don't do anything...

   ;;

CRITICAL)

   # Aha!  The HTTP service appears to have a problem - perhaps we should restart the server...



   # Is this a "soft" or a "hard" state?

   case "$2" in

      

   # We're in a "soft" state, meaning that Nagios is in the middle of retrying the

   # check before it turns into a "hard" state and contacts get notified...

   SOFT)

         

      # What check attempt are we on?  We don't want to restart the web server on the first

      # check, because it may just be a fluke!

      case "$3" in

            

      # Wait until the check has been tried 3 times before restarting the web server.

      # If the check fails on the 4th time (after we restart the web server), the state

      # type will turn to "hard" and contacts will be notified of the problem.

      # Hopefully this will restart the web server successfully, so the 4th check will

      # result in a "soft" recovery.  If that happens no one gets notified because we

      # fixed the problem!

      3)

         echo -n "Restarting HTTP service (3rd soft critical state)..."

         # Call the init script to restart the HTTPD server

         /etc/rc.d/init.d/httpd restart

         ;;

         esac

      ;;

            

   # The HTTP service somehow managed to turn into a hard error without getting fixed.

   # It should have been restarted by the code above, but for some reason it didn't.

   # Let's give it one last try, shall we? 

   # Note: Contacts have already been notified of a problem with the service at this

   # point (unless you disabled notifications for this service)

   HARD)

      echo -n "Restarting HTTP service..."

      # Call the init script to restart the HTTPD server

      /etc/rc.d/init.d/httpd restart

      ;;

   esac

   ;;

esac

exit 0



The sample script provided above will attempt to restart the web server on the local machine in two different instances:

After the service has been rechecked for the 3rd time and is in a SOFT CRITICAL state
After the service first goes into a HARD CRITICAL state
專心投入研究才是王道!!
http://sakananote2.blogspot.com

ccdm

  • 憂鬱的高中生
  • ***
  • 文章數: 165
    • 檢視個人資料
Re: Lab: Nagios 網路監控主機架設 (已解決)
« 回覆 #7 於: 2014-04-24 11:53 »
感謝sakana兄回答

另外在請教站上先進問題,假設有台SAN Storage(有Fibre跟iSCSI)要進行監控,如:
Management IP: 10.1.1.1 (Host IP)
iSCSI Controller 1 Port 1: 10.1.1.2
iSCSI Controller 1 Port 2: 10.1.1.3
iSCSI Controller 2 Port 1: 10.1.1.4
iSCSI Controller 2 Port 2: 10.1.1.5

Host IP設為主要監控IP,但是透過check_ping或check_tcp指令預設第一個參數都是抓Host IP,
請問該如何同時監控多個IP?

目前想到方式是去Nagios Exchange下載其他外掛...
« 上次編輯: 2014-05-15 20:43 由 ccdm »