使用nagios監控主機及服務
寫在前頭:限于個人對nagios的了解有限,寫得不夠深入與系統,甚至可能會有些錯誤,各位看官還多包涵。本文主要涉及的是nagios daemon、nrpe及三個部分。
01
nagios系統的功能
- 主機或服務狀態監控
nagios是一款開源的監控軟件,從它可以監控的設備類型上來看,主要包含網絡設備,服務器設備。常見的網絡設備如:路由器、交換機、防火墻、F5、打印機等,常見的服務器設備主要分為:UNIX類、Linux類以及Windows類。按我的理解凡是支持snmp協議的設備,包含PC都可以通過nagios進行監控。當然,nagios實現對主機資源及服務的監控并非全依靠snmp協議,它最為主要的監控手段是通過nrpe組件來實現。 - 監控告警通知
nagios對在網絡中發現的問題會及時產生告警信息并通過事先定義好的方式,如郵件、短信、微信等方式通知相關人員。隨著網絡運維工作更加自動化,還可以通過nagios支持的相應API接口,開發相應的程序,實現其自動或人干干預去對監控發現的問題進行自動化的處理。 - 監控信息可視化
nagios結合web服務器,可以將整個網絡所監控的所有信息以web頁面的形式展現出來,還可以結合外部軟件實現監控數據可視化,以圖表的形式展示在web頁面中,本文將介紹nagios常用的畫圖軟件包pnp,現在叫pnp4nagios。
- 監控數據存儲
nagios監控到的數據會存儲下來,可以直接以文件的形式存儲也可以通過NDOUtils組件存儲到如mysql類的數據庫中,從而可以很好支持監控歷史數據的查詢。
02
nagios系統的組成
nagios系統主要包含nagios daemon、nagios plugin、nrpe、web三個組件,它還包含NDOUtils、NSCA、NSClinet++組件,它們共同組成一個完整的nagios,組成邏輯圖如下所示:

- Nagios Daemon
nagios系統的核心組件,它負責組織與管理各組件,將它們協調起來共同完成監控任務,并完成監控信息的組織與展示。 - Nagios Plugins
nagios plugins主要就是nagios核心組件自帶以及用戶自開發的一些插件,它們是實現各項監控的具體小程序,由它們將采集到相應的數據以后,回送給nagios服務器。 - NRPE
nagios系統要想取得被監控主機的存活狀態、http、ftp、ssh服務是否可用,可以通過程序探測的出來,但如果要想取得被監控端上如磁盤容量,cpu負載這類本地信息時,如果沒有相應的權限就不行,所以就產生了代理程序,事先在被監控機上安裝代理程序(Linux系統是nrpe軟件),然后通過它們來獲取監控數據,再回送給nagios服務器。當nrpe啟動以后,它會開啟5666端口。nrpe的工程原理如下圖所示:

NRPE 總共由兩部分組成:
check_nrpe:位于nagios server上。
NRPE daemon:位于被監控的Linux主機上。
當Nagios 需要監控某個遠程Linux 主機時:
nagios 會運行check_nrpe 這個插件,告訴它要檢查什么
check_nrpe 插件會連接到遠程的NRPE daemon,所用的方式是SSL; NRPE daemon 會運行相應的nagios 插件來執行檢查;
NRPE daemon 將檢查的結果返回給check_nrpe 插件,插件將其遞交給nagios做處理。
- NSClinet++
NSClient++這一組件是安裝在windows主機上,相當于nagios server在windows端的代理程序。 - NSCA
NSAC這一組件適用于部署分布式nagios監控系統時使用,它可以實現讓被監控端主動將需要監控的信息發送給nagios服務端。
03
本文所用到系統環境
OS:CentOS release 6.8 (Final) 2.6.32-642.el6.x86_64
還有一個重要環境:互聯網(yum、百度、Google)。
各軟件包:

04
nagios系統軟件部署
服務器側軟件安裝
前提:使系統具備編譯軟件源碼包的能力,并提前解決一些包、共享庫文件之間的依賴關系,建議安裝如下兩個Group組件:

- 安裝nagios依賴的軟件包
nagios要通過web頁面展現監控結果,所以nagios服務器同時還得是一個web服務器,因為nagios各種數據的實時展現是動態頁面呈現的,因此還需要用到php。nagios要實現畫圖還依賴于gd、rrdtool包。按照官方說明安裝如下包:

- 創建nagios用戶及組
很多開源軟件如果是通過源碼包來進行安裝,為后續的安裝及服務運行做準備都需要通過事先創建好相應服務的賬號及組。這里相關指令如下:

- 創建一個可以從web接口接受外部指令的用戶組并將nagios及apache添加進組

-
- 安裝nagios core
nagios core就是前文提到的nagios daemon。解壓軟件包后,源碼安裝的通用三步驟:- configure
- make
- make install
此外相應指令如下:
- 安裝nagios core

configure完成以后若出現make all
以完成編譯的提示則繼續執行:

如果上述任一指令執行后有error發生或者某文件,某組件沒有找到,務必先解決相應的錯誤,一般可能是某些包沒有安裝導致,根據提示信息中的關鍵字找出可能的包,然后yum安裝上即可。
- 創建登錄nagios web頁面的用戶及密碼
默認系統中已存在名為nagiosadmin
的賬戶,只需要給它指定密碼,其密碼會加密存儲,密碼文件默認為`/usr/local/nagios/etc/htpasswd.users,無需改動。

- 重啟web服務

- 安裝plugin及nrpe組件
因為nagios服務器本身也同樣需要被監控,自己監控自己或者被其它的nagios服務器所監控,所以它也需要安裝plugin及nrpe組件。在軟件包的解壓目錄中執行如下指令:

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

- 設置web、nagios服務開機自啟

- 通過web頁面登錄nagios
做完以上步驟以后,即可打開瀏覽器,輸入http://nagios-server-ip/nagios
,它會彈出提示框,輸入前面提到的nagiosadmin
及其密碼即可登錄。登錄后的初始界面如下:


被監控端軟件安裝
在網絡中需要被監控的Linux主機中安裝nagios plugin
和nrpe
兩個組件,并安裝xinetd組件,用于啟動nrpe
程序。
- nagios plugin安裝
創建nagios
用戶:

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

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

- 安裝
nrpe
:
客戶端因為需要通過nrpe
程序來執行從服務器側接收到的command,因此必須安裝nrpe
。

- 安裝xinetd
根據nrpe
的README
文件的說明,可以將nrpe daemon
作為xinetd下的一個服務來進行管理,所以需要事先將xinetd
安裝到系統中:

- 再接著安裝
nrpe
在xinetd
下的配置文件:

- 修改
nrpe
的配置文件,以允許nagios server
連接它:vim /etc/xinetd.d/nrpe
將only from
改成如下內容: - 將
nrpe
服務端口號添加進去:vim /etc/services
在最后一行加上nrpe ? ?5666/tcp ? ? ?#Nagios-Client
然后保存退出。
啟動xinetd
服務并設置開機自啟:

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

05
配置nagios監控主機及服務
5.1 nagios配置文件位置
nagios要對哪些主機監控哪些內容都是通過名為.cfg的配置文件進行定義的。
它們通常是位于/usr/local/nagios/etc
目錄中的*.cfg
以及位于/usr/local/nagios/etc/objects
目錄下的*.cfg
。
默認的文件如下:

再看看/objects/
目錄下的內容:

5.2 各配置文件的作用:
- nagios.cfg主配置文件
nagios.cfg
是nagios
服務端的主配置文件,它可以定義其它*.cfg
配置文件的位置,是否啟用性能監控(收集監控數據以生成圖表),性能數據處理指令,性能數據文件格式模板及存放位置等,配置nagios
日志文件存放的信息級別及位置,nagios
進程的啟動用戶及組,日志文件的切割方式,顯示的日期格式等等。如果只是實現對主機及服務的監控,不出監控圖的話,默認可以不改動這一文件。 - templates.cfg模板定義文件
templates.cfg
是監控的模板文件,對所有主機、服務、聯系人的定義為簡化配置都可以根據需求定制相應的模板,然后在主機、服務、聯系人配置文件中去引用模板即可。下面進行簡要說明:

以上便是templates.cfg
文件中的主要內容,可以按需修改已定義的模板或者新定義模板。其中涉及到部分對command的定義,它是需要在commands.cfg
文件中進行定義的。
- commands.cfg命令定義文件
commands.cfg
文件可以包含監控時需要用到的指令的定義,由這些指令來完成具體的監控工作,它們可以在services.cfg文件中被調用。配置示例如下:

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

- contacts.cfg聯系人定義文件
contracts.cfg
這一文件定義了當需要發送告警通知時,需要發給哪些聯系人組,然后不同的組里可以分別定義相應的成員,默認情況下會將通知發給名為admins
的組,里面包含的email地址即為接收告警通知郵件的地址。示例如下:

- timeperiods.cfg時間段模板定義文件
timeperiods.cfg
主要用來對要進行監控的時間段以及可以發送通知的時間段進行定義,很靈活很方便。

- localhost.cfg監控服務器配置文件
localhost.cfg
這個文件是用來定義對這臺nagios服務器的哪些資源及服務進行監控的,它主要包含兩部分的定義,針對host級別的和針對service級別的。示例如下:
- hosts.cfg定義要被監控的主機
hosts.cfg
文件可以將網絡中所有需要監控的主機定義進來,并將它們根據需求分組,一臺主機可以同時屬于不同的組,默認情況下不允許組里面一臺主機都沒有,然后根據需要調用不同的主機模板(事先在templates.cfg中定義)。另一點很重要的是這個文件需要自己創建,不建議直接在localhost.cfg里添加。示例如下:

- services.cfg定義要被監控的服務
services.cfg
這個文件默認也是不存在的,需要手工創建,可以以localhost.cfg里定義的service部分作為模板進行修改。在它里面可以針對不同的服務調用不同的模板,以及把這些服務應用到哪些主機或主機組上。示例如下:
由于新增加了兩個配置 文件(hosts.cfg和services.cfg),所以需要在nagios主配置文件(nagios.cfg)中指明它們的位置,只需要在nagios.cfg中加上兩行,搜索下cfg_file
加到它們的下面即可:

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

檢測如果沒有問題,則可以重載nagios服務,使用最新配置文件來工作了。

重載服務service nagios reload
5.4 客戶端配置監測命令及參數
要實現對Linux主機的監控還差非常關鍵的一步,去到各被監控Linux主機上配置實際要執行的指令,它們是在/etc/usr/local/nagios/etc/nrpe.cfg
文件中定義的。 示例文件如下:

注意:[]中的內容,這些字符要和nagios服務端上
services.cfg里定義command時check_nrpe!后面的字符完全一樣,等號中的內容則前面介紹的方法查看每個plugin的具體用法。
客戶端在修改完nrpe.cfg文件以后,需要重啟nrpe進程:

06
登錄nagios web頁面查看監控數據
在nagios客戶端還沒有配置好nrpe.cfg文件時,nagios server是無法監控到客戶端的,此時應該可以通過web頁面查看到一堆NRPE:undefined command之類的錯誤信息,當客戶端nrpe服務修改完成并重啟之后,過會兒就能夠正常監控上這些客戶端了。效果展示如下:

主機監控視圖

細心的讀者可能已經發現兩圖中,日期格式好像更易讀,默認會顯示為04-08-2017 22:30:00
這種,這是因為筆者修改了nagios.cfg的date_format
為iso8601
,具體可查看nagios.cfg文件獲知。
07
結尾
在前期安裝及配置過程中要仔細留意可能出現的警告及錯誤信息,盡可能修復它們之后在后續操作,nagios跑起來以后,可以通過查看/var/log/messages
或者/usr/local/nagios/var/nagios.log
來觀察錯誤信息,以找到解決辦法。
比如:
在系統運行過程中因為nagios server和客戶端nrpe間需要建立ssl會話,所以openssl,openssl-devel包是需要安裝的。如果要使用snmp監控主機及服務則需要安裝net-snmp包。如果對防火墻不熟悉建議關閉其服務,關閉SELinux。這些在文中未提到,但也是需要注意的地方。
通過nagios實現對主機和服務的監控基本操作方法就寫到這兒,在日常使用中有很多可可以深入的地方,特別是對現網各種服務各項指標的監控工作,還需要開發插件然后部署才能夠實現,這應該才是監控類軟件應用真正有挑戰的地方,考驗運維工程師的開發能力,nagios支持使用perl、Python、shell,C等語言開發插件以滿足實際業務監控需求。