使用nagios監(jiān)控主機及服務(wù)


寫在前頭:限于個人對nagios的了解有限湘换,寫得不夠深入與系統(tǒng),甚至可能會有些錯誤,各位看官還多包涵彩倚。本文主要涉及的是nagios daemon筹我、nrpe及三個部分。

1. nagios系統(tǒng)的功能

  • 主機或服務(wù)狀態(tài)監(jiān)控
    nagios是一款開源的監(jiān)控軟件帆离,從它可以監(jiān)控的設(shè)備類型上來看蔬蕊,主要包含網(wǎng)絡(luò)設(shè)備,服務(wù)器設(shè)備哥谷。常見的網(wǎng)絡(luò)設(shè)備如:路由器岸夯、交換機、防火墻们妥、F5猜扮、打印機等,常見的服務(wù)器設(shè)備主要分為:UNIX類王悍、Linux類以及Windows類破镰。按我的理解凡是支持snmp協(xié)議的設(shè)備,包含PC都可以通過nagios進行監(jiān)控压储。當(dāng)然鲜漩,nagios實現(xiàn)對主機資源及服務(wù)的監(jiān)控并非全依靠snmp協(xié)議,它最為主要的監(jiān)控手段是通過nrpe組件來實現(xiàn)集惋。

  • 監(jiān)控告警通知
    nagios對在網(wǎng)絡(luò)中發(fā)現(xiàn)的問題會及時產(chǎn)生告警信息并通過事先定義好的方式孕似,如郵件、短信刮刑、微信等方式通知相關(guān)人員喉祭。隨著網(wǎng)絡(luò)運維工作更加自動化,還可以通過nagios支持的相應(yīng)API接口雷绢,開發(fā)相應(yīng)的程序泛烙,實現(xiàn)其自動或人干干預(yù)去對監(jiān)控發(fā)現(xiàn)的問題進行自動化的處理。

  • 監(jiān)控信息可視化
    nagios結(jié)合web服務(wù)器翘紊,可以將整個網(wǎng)絡(luò)所監(jiān)控的所有信息以web頁面的形式展現(xiàn)出來蔽氨,還可以結(jié)合外部軟件實現(xiàn)監(jiān)控數(shù)據(jù)可視化,以圖表的形式展示在web頁面中帆疟,本文將介紹nagios常用的畫圖軟件包pnp鹉究,現(xiàn)在叫pnp4nagios。

  • 監(jiān)控數(shù)據(jù)存儲
    nagios監(jiān)控到的數(shù)據(jù)會存儲下來踪宠,可以直接以文件的形式存儲也可以通過NDOUtils組件存儲到如mysql類的數(shù)據(jù)庫中自赔,從而可以很好支持監(jiān)控歷史數(shù)據(jù)的查詢。

2.nagios系統(tǒng)的組成

nagios系統(tǒng)主要包含nagios daemon柳琢、nagios plugin绍妨、nrpe润脸、web三個組件,它還包含NDOUtils他去、NSCA津函、NSClinet++組件,它們共同組成一個完整的nagios孤页,組成邏輯圖如下所示:

nagios系統(tǒng)組成
  • Nagios Daemon
    nagios系統(tǒng)的核心組件,它負責(zé)組織與管理各組件涩馆,將它們協(xié)調(diào)起來共同完成監(jiān)控任務(wù)行施,并完成監(jiān)控信息的組織與展示。

  • Nagios Plugins
    nagios plugins主要就是nagios核心組件自帶以及用戶自開發(fā)的一些插件魂那,它們是實現(xiàn)各項監(jiān)控的具體小程序蛾号,由它們將采集到相應(yīng)的數(shù)據(jù)以后,回送給nagios服務(wù)器涯雅。

  • NRPE
    nagios系統(tǒng)要想取得被監(jiān)控主機的存活狀態(tài)鲜结、http、ftp活逆、ssh服務(wù)是否可用精刷,可以通過程序探測的出來,但如果要想取得被監(jiān)控端上如磁盤容量蔗候,cpu負載這類本地信息時怒允,如果沒有相應(yīng)的權(quán)限就不行,所以就產(chǎn)生了代理程序锈遥,事先在被監(jiān)控機上安裝代理程序(Linux系統(tǒng)是nrpe軟件)纫事,然后通過它們來獲取監(jiān)控數(shù)據(jù),再回送給nagios服務(wù)器所灸。當(dāng)nrpe啟動以后丽惶,它會開啟5666端口。nrpe的工程原理如下圖所示:

nrpe工作原理

NRPE 總共由兩部分組成:
check_nrpe:位于nagios server上爬立。
NRPE daemon:位于被監(jiān)控的Linux主機上钾唬。
當(dāng)Nagios 需要監(jiān)控某個遠程Linux 主機時:
nagios 會運行check_nrpe 這個插件,告訴它要檢查什么
check_nrpe 插件會連接到遠程的NRPE daemon懦尝,所用的方式是SSL知纷; NRPE daemon 會運行相應(yīng)的nagios 插件來執(zhí)行檢查;
NRPE daemon 將檢查的結(jié)果返回給check_nrpe 插件陵霉,插件將其遞交給nagios做處理琅轧。

  • NSClinet++
    NSClient++這一組件是安裝在windows主機上,相當(dāng)于nagios server在windows端的代理程序踊挠。

  • NSCA
    NSAC這一組件適用于部署分布式nagios監(jiān)控系統(tǒng)時使用乍桂,它可以實現(xiàn)讓被監(jiān)控端主動將需要監(jiān)控的信息發(fā)送給nagios服務(wù)端冲杀。

3.本文所用到系統(tǒng)環(huán)境

OS:CentOS release 6.8 (Final) 2.6.32-642.el6.x86_64
還有一個重要環(huán)境:互聯(lián)網(wǎng)(yum、百度睹酌、Google)权谁。
各軟件包:

組件 軟件包名
nagios daemon nagios-4.3.1.tar.gz
nrpe nrpe-2.15.tar.gz
nagios plugin nagios-plugins-2.2.0.tar.gz

上述4個軟件包下載鏈接:
鏈接:百度網(wǎng)盤 密碼:ayhk

4.nagios系統(tǒng)軟件部署

服務(wù)器側(cè)軟件安裝

前提:使系統(tǒng)具備編譯軟件源碼包的能力,并提前解決一些包、共享庫文件之間的依賴關(guān)系憋沿,建議安裝如下兩個Group組件

yum -y groupinstall "Development Tools" "Server  Platform Development"
  • 安裝nagios依賴的軟件包
    nagios要通過web頁面展現(xiàn)監(jiān)控結(jié)果旺芽,所以nagios服務(wù)器同時還得是一個web服務(wù)器,因為nagios各種數(shù)據(jù)的實時展現(xiàn)是動態(tài)頁面呈現(xiàn)的辐啄,因此還需要用到php采章。nagios要實現(xiàn)畫圖還依賴于gd、rrdtool包壶辜。按照官方說明安裝如下包:
yum install httpd php
yum install gcc glibc glibc-common         #如果安裝那兩個development包組這幾個包應(yīng)該已經(jīng)裝上了
yum install gd gd-devel
  • 創(chuàng)建nagios用戶及組
    很多開源軟件如果是通過源碼包來進行安裝悯舟,為后續(xù)的安裝及服務(wù)運行做準備都需要通過事先創(chuàng)建好相應(yīng)服務(wù)的賬號及組。這里相關(guān)指令如下:
/usr/sbin/useradd -m nagios  #指定不創(chuàng)建家目錄  
passwd nagios    #設(shè)定nagios的密碼砸民,也可不設(shè)定
  • 創(chuàng)建一個可以從web接口接受外部指令的用戶組并將nagios及apache添加進組
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd apache
  • 安裝nagios core
    nagios core就是前文提到的nagios daemon抵怎。解壓軟件包后,源碼安裝的通用三步驟:
    1. configure
    2. make
    3. make install
      此外相應(yīng)指令如下:
./configure --with-command-group=nagcmd  #nagios默認會安裝在/usr/local/nagios目錄下

configure完成以后若出現(xiàn)make all以完成編譯的提示則繼續(xù)執(zhí)行:

make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf

如果上述任一指令執(zhí)行后有error發(fā)生或者某文件岭参,某組件沒有找到反惕,務(wù)必先解決相應(yīng)的錯誤,一般可能是某些包沒有安裝導(dǎo)致冗荸,根據(jù)提示信息中的關(guān)鍵字找出可能的包承璃,然后yum安裝上即可。

  • 創(chuàng)建登錄nagios web頁面的用戶及密碼
    默認系統(tǒng)中已存在名為nagiosadmin的賬戶蚌本,只需要給它指定密碼盔粹,其密碼會加密存儲,密碼文件默認為`/usr/local/nagios/etc/htpasswd.users程癌,無需改動舷嗡。
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin  #根據(jù)提示輸入密碼即可
  • 重啟web服務(wù)
service httpd restart
  • 安裝plugin及nrpe組件
    因為nagios服務(wù)器本身也同樣需要被監(jiān)控,自己監(jiān)控自己或者被其它的nagios服務(wù)器所監(jiān)控嵌莉,所以它也需要安裝plugin及nrpe組件进萄。在軟件包的解壓目錄中執(zhí)行如下指令:
cd /root/softwares/nagios-plugins-2.2.0
./configure --with-nagios-user=nagios --with-nagios-group=nagios #默認安裝在/usr/local/nagios路徑下
make
make install  

安裝完plugin以后會在/usr/local/nagios/libexec目錄下存放大量插件,就是用這些插件來實現(xiàn)最終的監(jiān)控目的的锐峭。
**按著安裝nrpe: **
nagios服務(wù)器安裝nrpe包主要目的是為了安裝check_nrpe插件中鼠,便于與被監(jiān)控Linux端的NRPE daemon程序通信,如果這臺nagios服務(wù)器也需要被其它nagios服務(wù)器監(jiān)控沿癞,那它還必須安裝nrpe daemon和nrpe daemon-config援雇。

cd /root/softwares/nrpe-2.15
./configure    #執(zhí)行完會顯示nrpe將會使用端口號5666
make all   #configure執(zhí)行完后若提示make all編譯nrpe進程及客戶端則執(zhí)行這一指令
make install-plugin    #安裝check_nrpe插件,網(wǎng)絡(luò)里就一臺nagios服務(wù)器
                         #所以只安裝這一個check_nrpe即可
  • 設(shè)置web椎扬、nagios服務(wù)開機自啟
chkconfig --add httpd
chkconfig --add nagios
chkconfig httpd on
chkconfig nagios on
  • 通過web頁面登錄nagios
    做完以上步驟以后惫搏,即可打開瀏覽器具温,輸入http://nagios-server-ip/nagios,它會彈出提示框筐赔,輸入前面提到的nagiosadmin及其密碼即可登錄铣猩。登錄后的初始界面如下:
nagios登錄認證
nagios初始界面

被監(jiān)控端軟件安裝

在網(wǎng)絡(luò)中需要被監(jiān)控的Linux主機中安裝nagios pluginnrpe兩個組件,并安裝xinetd組件茴丰,用于啟動nrpe程序达皿。

  • nagios plugin安裝
    創(chuàng)建nagios用戶:
useradd -m nagios

將tar.gz包解壓以后進入其目錄,然后執(zhí)行以下命令:

cd /root/softwares/nagios-plugins-2.2.0
./configure --with-nagios-user=nagios --with-nagios-group=nagios #默認安裝在/usr/local/nagios路徑下
make
make install  

安裝完成以后贿肩,建議修改安裝目錄/usr/local/nagios的屬主為nagios鳞绕,并可查看到其下有三個目錄:

[root@test1 nagios]# ll
total 4
drwxr-xr-x 2 nagios nagios    6 Apr  7 23:30 include
drwxr-xr-x 2 nagios nagios 4096 Apr  7 23:30 libexec
drwxr-xr-x 3 nagios nagios   19 Apr  7 23:30 share
  • 安裝nrpe
    客戶端因為需要通過nrpe程序來執(zhí)行從服務(wù)器側(cè)接收到的command,因此必須安裝nrpe尸曼。
cd /root/softwares/nrpe-2.15
./configure    #執(zhí)行完會顯示nrpe將會使用端口號5666
make all   #configure執(zhí)行完后若提示make all編譯nrpe進程及客戶端則執(zhí)行
make install-plugin    #安裝check_nrpe插件
make install-daemon    #安裝nrpe守護進程
make install-daemon-config  #安裝nrpe的配置文件  

安裝xinetd
根據(jù)nrpeREADME文件的說明,可以將nrpe daemon作為xinetd下的一個服務(wù)來進行管理萄焦,所以需要事先將xinetd安裝到系統(tǒng)中:

yum install xinetd -y  #不要退出nrpe的解壓包目錄

再接著安裝nrpexinetd下的配置文件:

make install-xinetd

修改nrpe的配置文件控轿,以允許nagios server連接它:
vim /etc/xinetd.d/nrpeonly from改成如下內(nèi)容:

only_from       = 127.0.0.1 192.168.249.16 localhost  #注意多個ip間以空格分開,主要是加上nagios server的ip

nrpe服務(wù)端口號添加進去:vim /etc/services在最后一行加上nrpe 5666/tcp #Nagios-Client然后保存退出拂封。

啟動xinetd服務(wù)并設(shè)置開機自啟:

chkconfig --add xinetd 
chkconfig xinetd on
service xinetd start

**檢查nrpe是否啟動即端口5666是否處于監(jiān)聽狀態(tài): ss -tnl **
另一個檢測nrpe是否工作正常的辦法是在nagios服務(wù)器上使用check_nrpe插件來測試與這臺客戶端的nrpe通信是否正常:

cd /usr/local/nagios/libexec
./check_nrpe -H localhost   #這里就是為何在被監(jiān)控端也安裝check_nrpe的原因
                            #這里的localhost必須在nrpe配置文件里明確允許
NRPE v2.15                      #若返回NRPE的版本號茬射,則表示NRPE工作正常  

5.配置nagios監(jiān)控主機及服務(wù)

5.1 nagios配置文件位置

nagios要對哪些主機監(jiān)控哪些內(nèi)容都是通過名為.cfg的配置文件進行定義的。
它們通常是位于/usr/local/nagios/etc目錄中的*.cfg以及位于/usr/local/nagios/etc/objects目錄下的*.cfg冒签。
默認的文件如下:

[root@monitor-server1 etc]# ll /usr/local/nagios/etc
total 88
-rw-rw-r--. 1 nagios nagios 13023 Apr  7 15:35 cgi.cfg
-rw-r--r--. 1 nagios nagios    26 Apr  5 12:10 htpasswd.users
-rw-rw-r--. 1 nagios nagios 45139 Apr  7 19:20 nagios.cfg
-rw-r--r--. 1 nagios nagios  8060 Apr  5 20:49 nrpe.cfg
drwxrwxr-x. 2 nagios nagios  4096 Apr  6 01:28 objects
-rw-rw----. 1 nagios nagios  1312 Apr  5 11:59 resource.cfg

再看看/objects/目錄下的內(nèi)容:

[root@monitor-server1 objects]# ll
total 48
-rw-rw-r--. 1 nagios nagios  7344 Apr  6 01:28 commands.cfg
-rw-rw-r--. 1 nagios nagios  2138 Apr  5 11:59 contacts.cfg
-rw-rw-r--. 1 nagios nagios  5451 Apr  5 18:29 localhost.cfg
-rw-rw-r--. 1 nagios nagios  3070 Apr  5 11:59 printer.cfg
-rw-rw-r--. 1 nagios nagios  3252 Apr  5 11:59 switch.cfg
-rw-rw-r--. 1 nagios nagios 10716 Apr  5 18:32 templates.cfg
-rw-rw-r--. 1 nagios nagios  3180 Apr  5 11:59 timeperiods.cfg
-rw-rw-r--. 1 nagios nagios  3991 Apr  5 11:59 windows.cfg

5.2 各配置文件的作用:**

  • nagios.cfg主配置文件
    nagios.cfgnagios服務(wù)端的主配置文件在抛,它可以定義其它*.cfg配置文件的位置,是否啟用性能監(jiān)控(收集監(jiān)控數(shù)據(jù)以生成圖表)萧恕,性能數(shù)據(jù)處理指令刚梭,性能數(shù)據(jù)文件格式模板及存放位置等,配置nagios日志文件存放的信息級別及位置票唆,nagios進程的啟動用戶及組朴读,日志文件的切割方式,顯示的日期格式等等走趋。如果只是實現(xiàn)對主機及服務(wù)的監(jiān)控衅金,不出監(jiān)控圖的話,默認可以不改動這一文件簿煌。

  • templates.cfg模板定義文件
    templates.cfg是監(jiān)控的模板文件氮唯,對所有主機、服務(wù)姨伟、聯(lián)系人的定義為簡化配置都可以根據(jù)需求定制相應(yīng)的模板惩琉,然后在主機、服務(wù)授滓、聯(lián)系人配置文件中去引用模板即可琳水。下面進行簡要說明:

      define contact{                                                        ;定義一個聯(lián)系人相關(guān)的模板    
      name                            generic-contact         ; 聯(lián)系人信息的模板名稱
      service_notification_period     24x7                    ; 對服務(wù)類的監(jiān)控什么時間段可以發(fā)送告警通知
      host_notification_period        24x7                    ; 對主機類的監(jiān)控什么時間段可以發(fā)送告警通知
      service_notification_options    w,u,c,r,f,s             ; 對哪些服務(wù)狀態(tài)進
    行通知,w:警告,u:unknown未知狀態(tài)肆糕,c:嚴重,r:recover恢復(fù)在孝,f:flapping,s:scheduled downtime
      host_notification_options       d,u,r,f,s               ; 對哪些主機狀態(tài)進行
       ;通知诚啃,d:宕機了,u:主機不可達私沮,r:主機重啟了始赎,f:flapping,s:恢復(fù)了
      service_notification_commands   notify-service-by-email ; 發(fā)送服務(wù)通知的方式
      host_notification_commands      notify-host-by-email    ; 發(fā)送主機通知的方式
      register                        0                       ; 告訴nagios daemon不要把這一項定義注冊為服務(wù),它只是一個模板
      }
      define host{                                                  ;定義一個用于主機的模板
      name                            generic-host    ; 主機模板的名稱
      notifications_enabled           1               ; 允許發(fā)送主機通知仔燕,0則為關(guān)閉
      event_handler_enabled           1               ; 允許處理主機事件
      flap_detection_enabled          1               ; 允許檢測主機是否頻繁發(fā)生狀態(tài)改變
      process_perf_data               1               ; 允許對主機進行性能統(tǒng)計
      retain_status_information       1               ; Retain status information across program restarts
      retain_nonstatus_information    1               ; Retain non-status information across program restarts
      notification_period             24x7            ; 任意時間都可以發(fā)送通知消息
      register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
      }
    
    define host{                                                 ;定義另一個主機模板
      name                            linux-server    ; 主機模板的名稱
      use                             generic-host    ; 先是引用了上面那個叫g(shù)eneric-host的主機模板造垛,省去對通用項的重復(fù)定義工作
      check_period                    24x7            ; 定義對主機的檢測周期
      check_interval                  5               ; 定義多長時間對主機進行一次檢測
      retry_interval                  1               ; 當(dāng)一次檢測失敗了隔多長時間再次檢測
      max_check_attempts              10              ; 最大幾次失敗后認定主機故障
      check_command                   check-host-alive ; 使用哪個命令對主機進行檢測,這一命令必須在commands.cfg文件中進行詳細定義
      notification_period             workhours       ; 定義什么時間段可以發(fā)送通知晰搀,這一配置在上一個叫g(shù)eneric_host的模板中也有五辽,但此時此處以這個的配置為準,時間段的寫法在timeperiods.cfg文件中定義
      notification_interval           120             ; 發(fā)送通知的時間間隔
      notification_options            d,u,r           ; 哪些主機狀態(tài)可以發(fā)送通知
      contact_groups                  admins          ; Notifications get sent to the admins by default
      action_url                      /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_
      register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
      }
    define service{                                                       ;定義一個服務(wù)模板
      name                            generic-service         ; 服務(wù)模板的名稱
      active_checks_enabled           1                       ; 允許進行服務(wù)狀態(tài)檢測
      passive_checks_enabled          1                       ; 被動檢測外恕,由nagios發(fā)起杆逗,客戶端nrpe接收到請求后使用plugin程序進行檢測
      parallelize_check               1                       ; Active service checks should be parallelized (disabling this can lead to major performance problems)
      obsess_over_service             1                       ; We should obsess over this service (if necessary)
      check_freshness                 0                       ; Default is to NOT check service 'freshness'
      notifications_enabled           1                       ; 允許發(fā)送關(guān)于服務(wù)的通知
      event_handler_enabled           1                       ; Service event handler is enabled
      flap_detection_enabled          1                       ; 允許檢測服務(wù)狀態(tài)漂移
      process_perf_data               1                       ; 開啟性能數(shù)據(jù)采集
      retain_status_information       1                       ; Retain status information across program restarts
      retain_nonstatus_information    1                       ; Retain non-status information across program restarts
      is_volatile                     0                       ; The service is not volatile
      check_period                    24x7                    ; 什么時間段對服務(wù)進行檢測
      max_check_attempts              3                       ; 連續(xù)3次檢測失敗則認定服務(wù)故障
      check_interval           10                     ; 10分鐘對服務(wù)進行一次檢測
      retry_interval            2                     ; 一次檢測失敗了隔2分鐘再次進行檢測
      contact_groups                  admins                  ; 將通知發(fā)給admins組里定義的成員
      notification_options            w,u,c,r                 ; Send notifications about warning, unknown, critical, and recovery events
      notification_interval           60                      ; 對服務(wù)的告警每60分鐘發(fā)一次
      notification_period             24x7                    ; 任何時間段都可以發(fā)送告警通知
       register                        0                      ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
      }
    

以上便是templates.cfg文件中的主要內(nèi)容,可以按需修改已定義的模板或者新定義模板鳞疲。其中涉及到部分對command的定義罪郊,它是需要在commands.cfg文件中進行定義的。

  • commands.cfg命令定義文件
    commands.cfg文件可以包含監(jiān)控時需要用到的指令的定義尚洽,由這些指令來完成具體的監(jiān)控工作悔橄,它們可以在services.cfg文件中被調(diào)用。配置示例如下:

     # 'notify-host-by-email' command definition
      define command{
          command_name    notify-host-by-email       ;在templates.cfg文件  
                                                     ;中即有一個叫作notify-host-by-email的  
                                                     ;command引用腺毫,它引用的就是   
                         此處定義的內(nèi)容癣疟。command_name就相當(dāng)于變量名
      command_line    /usr/bin/printf "%b" "***** Nagios   *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$
    \nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$    
          ;定義命令具體的指令及參數(shù),它就相當(dāng)于是在給前面的變量賦值
      }
    
     # 'notify-service-by-email' command definition
      define command{
      command_name    notify-service-by-email       ;在templates.cfg文件中即有一個叫作notify-service-by-email的command引用潮酒,它引用的就是此處定義的內(nèi)容
      command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService:           $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTA
      DDRESS$\nState: $SERVICESTATE$\n\nDate/Time:         $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/
      $SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
     # '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 5
      }
    
    define command{
      command_name    check_http        ;檢測http服務(wù)是否可用的指令
      command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
    

這里有一個名為check_nrpe的command特別重要:需要指定它才能夠啟動本地的check_nrpe去連接被監(jiān)控端上的nrpe daemon争舞,并在被監(jiān)控端執(zhí)行相應(yīng)的命令,需要自己添加澈灼,默認commands.cfg文件里是沒有的:

#`check_nrpe` command definition
define command{
    command_name    check_nrpe
    command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$            
                ;此處的$ARG1$這一變量指的就是在被監(jiān)控端的nrpe.cfg文件                        
                 ;里定義的實際命令竞川,后面會有講解
    }
  • contacts.cfg聯(lián)系人定義文件
    contracts.cfg這一文件定義了當(dāng)需要發(fā)送告警通知時,需要發(fā)給哪些聯(lián)系人組叁熔,然后不同的組里可以分別定義相應(yīng)的成員委乌,默認情況下會將通知發(fā)給名為admins的組,里面包含的email地址即為接收告警通知郵件的地址荣回。示例如下:
       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                           somebody@abc.com    ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
         }
    

define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}


- **timeperiods.cfg時間段模板定義文件**    
    `timeperiods.cfg`主要用來對要進行監(jiān)控的時間段以及可以發(fā)送通知的時間段進行定義遭贸,很靈活很方便。
      # notifications, etc.  The classic "24x7" support nightmare. :-)
      define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00   ;這個名為24x7的時間模板包括了一周7天每天的24小時
        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
        }
      # 'workhours' timeperiod definition
        define timeperiod{
      timeperiod_name   workhours   ;這個名為workhous的時間模板只包
                                      ;含了周一至周五每天的9點到17點
      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
      }

- **localhost.cfg監(jiān)控服務(wù)器配置文件**  
    `localhost.cfg`這個文件是用來定義對這臺nagios服務(wù)器的哪些資源及服務(wù)進行監(jiān)控的心软,它主要包含兩部分的定義壕吹,針對host級別的和針對service級別的著蛙。示例如下:  
    ```
       define host{                         ;定義一臺linux主機
        use                     linux-server            ; 針對這臺主機調(diào)用哪個host模
       板,這里是調(diào)用templates.cfg中定義的linux-server模板耳贬,可以指定多個踏堡,
       以逗號分隔

        host_name               localhost          ;這臺主機的名稱
        alias                   localhost                 ;這臺主機的別名
        address                 127.0.0.1             ;這臺主機的ip
        process_perf_data       1                   ;是否開啟性能數(shù)據(jù)采集,這項  
       配置在linux-server模板里面也配置的有咒劲,當(dāng)同一配置在不同的文件中    出現(xiàn)  
       時顷蟆,配置單位越小的越優(yōu)先,這里具體的單臺主機肯定比一個主機模板的  
       范圍要精細腐魂,所以這里的配置優(yōu)先帐偎。   
        }
      define hostgroup{                             ;定義一個主機組,即把可以具有  
                                 ;某些共同配置屬性的主機放到一個組中
        hostgroup_name  linux-servers ; The name of the hostgroup
        alias           Linux Servers ; Long name of the group
        members         localhost     ; Comma separated list of hosts that belong to this group
        }

       # Define a service to "ping" the local machine

       define service{                                        ;定義一個要監(jiān)控的服務(wù)
        use                             local-service         ; 針對這個服務(wù)調(diào)用的模  
       板蛔屹,模板可以指定多個削樊,以逗號分隔
        host_name                       localhost         ;監(jiān)控哪個或哪些個主機的這
       一服務(wù),不同的主機間用逗事情隔開
        service_description             PING           ;服務(wù)命名兔毒,簡單明了即可嫉父,不要過長
        check_command                   check_ping!100.0,20%!500.0,60%  ;監(jiān)  
      控要使用的指令,此處表示直接使用nagios服務(wù)器上/usr/local/libexec/下的  
       check_ping插件來進行服務(wù)監(jiān)測眼刃。要查看目錄中每個插件的用法,在目錄下使
      用./plugin_name --help查看
        }

- **hosts.cfg定義要被監(jiān)控的主機**  
`hosts.cfg`文件可以將網(wǎng)絡(luò)中所有需要監(jiān)控的主機定義進來摇肌,并將它們根據(jù)需求分組擂红,一臺主機可以同時屬于不同的組,默認情況下不允許組里面一臺主機都沒有围小,然后根據(jù)需要調(diào)用不同的主機模板(事先在templates.cfg中定義)昵骤。另一點很重要的是這個文件需要自己創(chuàng)建,不建議直接在localhost.cfg里添加肯适。示例如下:  

define host {
use linux-server ;調(diào)用的模板
host_name server1
alias server1
address 192.168.249.11
}
define host {
use linux-server
host_name server2
alias server2
address 192.168.249.12
}
define host {
use linux-server
host_name server3
alias server3
address 192.168.249.13
}
define host {
use linux-server
host_name server4
alias server4
address 192.168.249.14
}
define host {
use linux-server
host_name server5
alias server5
address 192.168.249.15
}
define hostgroup {
hostgroup_name loadblance-servers
alias lb-servers
members server1,server2
}
define hostgroup {
hostgroup_name web-servers
alias web-servers
members server3,server4
}
define hostgroup{
hostgroup_name database-servers
alias db-servers
members server1,server2,server5 ;根據(jù)業(yè)務(wù)需求变秦,相同
;的主機可以屬于多個不同的業(yè)務(wù)組
}


- **services.cfg定義要被監(jiān)控的服務(wù)**  
    `services.cfg`這個文件默認也是不存在的,需要手工創(chuàng)建框舔,可以以localhost.cfg里定義的service部分作為模板進行修改蹦玫。在它里面可以針對不同的服務(wù)調(diào)用不同的模板,以及把這些服務(wù)應(yīng)用到哪些主機或主機組上刘绣。示例如下:  

      # Define a service to "ping" the local machine

      define service{
        use                             local-service         ; Name of service                 template to use
        hostgroup_name          web-servers,loadblance-servers,database-servers
        service_description             PING
        check_command               check_ping!100.0,20%!500.0,60%  
        check_interval          1
        }
      # 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
        hostgroup_name          web-servers,loadblance-servers,database-servers
        service_description             Root Partition
        check_command           check_nrpe!check_local_disk  ;注意這種命令寫法樱溉,凡是前面以check_nrpe!開頭后面再跟上命令
      ;名稱的,必須在commands.cfg中先定義check_nrpe這一命 令纬凤,前
      ;文有寫福贞,然后在到客戶端上nrpe.cfg文件中定義check_nrpe!后面跟
      ;的命令的詳細指令參數(shù)
        }
      # Define a service 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
        hostgroup_name          web-servers,loadblance-servers,database-servers 
        service_description             Current Users
    check_command           check_nrpe!check_local_users
        }
      # Define a service to check the number of currently running     procs
      # on the local machine.  Warning if > 250 processes, critical if
      # > 400 processes.

      define service{
        use                             local-service         ; Name of service template to use
        hostgroup_name          web-servers,loadblance-servers,database-servers
        service_description             Zombie Processes
        check_command           check_nrpe!check_local_zombie_procs
        }
      define service{
       use              local-service
       hostgroup_name           web-servers,loadblance-servers,database-servers
       service_description      Total Processes
       check_command            check_nrpe!check_local_total_procs
       }
      # Define a service to check the load on the local machine. 
       define service{
        use                             local-service         ; Name of service template to use
       hostgroup_name           web-servers,loadblance-servers,database-servers
        service_description             Current Load
       check_command            check_nrpe!check_local_load
        }
      # 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         ; Name of service template to use
        hostgroup_name          web-servers,loadblance-servers,database-servers
        service_description             Swap Usage
       check_command            check_nrpe!check_local_swap
        }
      # 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         ; Name of service template to use
        hostgroup_name          web-servers,loadblance-servers,database-servers
        service_description             SSH
         check_command          check_ssh
        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         ; Name of service template to use
      hostgroup_name            web-servers,loadblance-servers,database-servers
        service_description             HTTP
       check_command            check_http
       notifications_enabled        0
        }

由于新增加了兩個配置 文件(hosts.cfg和services.cfg),所以需要在nagios主配置文件(nagios.cfg)中指明它們的位置停士,只需要在nagios.cfg中加上兩行挖帘,搜索下`cfg_file`加到它們的下面即可:

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


### 5.3 檢查配置文件  
nagios自帶的就有配置文件語法及邏輯檢測工具完丽,檢測方式:  

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

檢測如果沒有問題,則可以重載nagios服務(wù)拇舀,使用最新配置文件來工作了逻族。

Total Warnings: 0
Total Errors: 0

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

**重載服務(wù)**`service nagios reload`  

### 5.4 客戶端配置監(jiān)測命令及參數(shù)  
要實現(xiàn)對Linux主機的監(jiān)控還差非常關(guān)鍵的一步,去到各被監(jiān)控linux主機上配置實際要執(zhí)行的指令你稚,它們是在`/etc/usr/local/nagios/etc/nrpe.cfg`文件中定義的瓷耙。  示例文件如下:  

command[check_local_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
#注意[]中的內(nèi)容,這些字符要和nagios服務(wù)端上
#services.cfg里定義command時check_nrpe!后面的字符完全一樣刁赖,等號中的內(nèi)容則通過
#前面介紹的方法查看每個plugin的具體用法
command[check_local_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_local_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda3
command[check_local_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_local_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
command[check_local_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

**注意**:[]中的內(nèi)容搁痛,這些字符要和nagios服務(wù)端上
      services.cfg里定義command時check_nrpe!后面的字符完全一樣,等號中的內(nèi)容則前面介紹的方法查看每個plugin的具體用法宇弛。  

客戶端在修改完nrpe.cfg文件以后鸡典,需要重啟nrpe進程:  

service xinetd restart #nrpe daemon是作為xinetd下的一個服務(wù)
#的,所以重啟它也就重啟了nrpe


## 6. 登錄nagios web頁面查看監(jiān)控數(shù)據(jù)  
在nagios客戶端還沒有配置好nrpe.cfg文件時枪芒,nagios server是無法監(jiān)控到客戶端的彻况,此時應(yīng)該可以通過web頁面查看到一堆NRPE:undefined command之類的錯誤信息,當(dāng)客戶端nrpe服務(wù)修改完成并重啟之后舅踪,過會兒就能夠正常監(jiān)控上這些客戶端了纽甘。效果展示如下:  

  ![主機監(jiān)控視圖](http://upload-images.jianshu.io/upload_images/1920135-036cfb0f1f6e4977.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![服務(wù)監(jiān)控視圖](http://upload-images.jianshu.io/upload_images/1920135-a25b2059fa5626e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
細心的讀者可能已經(jīng)發(fā)現(xiàn)兩圖中,日期格式好像更易讀抽碌,默認會顯示為`04-08-2017 22:30:00`這種悍赢,這是因為筆者修改了nagios.cfg的`date_format`為`iso8601`,具體可查看nagios.cfg文件獲知货徙。    

## 7. 結(jié)尾  
在前期安裝及配置過程中要仔細留意可能出現(xiàn)的警告及錯誤信息左权,盡可能修復(fù)它們之后在后續(xù)操作,nagios跑起來以后痴颊,可以通過查看`/var/log/messages`或者`/usr/local/nagios/var/nagios.log`來觀察錯誤信息赏迟,以找到解決辦法。   
比如:  
在系統(tǒng)運行過程中因為nagios server和客戶端nrpe間需要建立ssl會話蠢棱,所以openssl,openssl-devel包是需要安裝的锌杀。如果要使用snmp監(jiān)控主機及服務(wù)則需要安裝net-snmp包。如果對防火墻不熟悉建議關(guān)閉其服務(wù)泻仙,關(guān)閉SELinux抛丽。這些在文中未提到,但也是需要注意的地方饰豺。 

通過nagios實現(xiàn)對主機和服務(wù)的監(jiān)控基本操作方法就寫到這兒亿鲜,在日常使用中有很多可可以深入的地方,特別是對現(xiàn)網(wǎng)各種服務(wù)各項指標的監(jiān)控工作,還需要開發(fā)插件然后部署才能夠?qū)崿F(xiàn)蒿柳,這應(yīng)該才是監(jiān)控類軟件應(yīng)用真正有挑戰(zhàn)的地方饶套,考驗運維工程師的開發(fā)能力,nagios支持使用perl垒探、python妓蛮、shell,C等語言開發(fā)插件以滿足實際業(yè)務(wù)監(jiān)控需求。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末圾叼,一起剝皮案震驚了整個濱河市蛤克,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夷蚊,老刑警劉巖构挤,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惕鼓,居然都是意外死亡筋现,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門箱歧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矾飞,“玉大人,你說我怎么就攤上這事呀邢∪髀伲” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵价淌,是天一觀的道長申眼。 經(jīng)常有香客問我,道長输钩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任仲智,我火速辦了婚禮买乃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钓辆。我一直安慰自己剪验,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布前联。 她就那樣靜靜地躺著功戚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪似嗤。 梳的紋絲不亂的頭發(fā)上啸臀,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音,去河邊找鬼乘粒。 笑死豌注,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灯萍。 我是一名探鬼主播轧铁,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旦棉!你這毒婦竟也來了齿风?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤绑洛,失蹤者是張志新(化名)和其女友劉穎救斑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诊笤,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡系谐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了讨跟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纪他。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晾匠,靈堂內(nèi)的尸體忽然破棺而出茶袒,到底是詐尸還是另有隱情,我是刑警寧澤凉馆,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布薪寓,位于F島的核電站,受9級特大地震影響澜共,放射性物質(zhì)發(fā)生泄漏向叉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一嗦董、第九天 我趴在偏房一處隱蔽的房頂上張望母谎。 院中可真熱鬧,春花似錦京革、人聲如沸奇唤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咬扇。三九已至,卻和暖如春廊勃,著一層夾襖步出監(jiān)牢的瞬間懈贺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隅居,地道東北人钠至。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像胎源,于是被迫代替她去往敵國和親棉钧。 傳聞我的和親對象是個殘疾皇子盟蚣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容