天天看點

運維監控 ——Nagios

    Nagios是一款開源監控軟體。利用Nagios可以監控本地或遠端主機資源,如磁盤空間、系統負載等情況,也可以監控各種應用服務,例如HTTP服務、FTP服務等。當主機或服務出現故障時,Nagios還可以通過郵件、手機短信等形式在第一時間通知系統維護人員。

  一. Nagios綜述

     作為一名運維人員或系統管理者,難免會遇到主機或服務異常的情況,遭遇故障并不可怕,可怕的是故障出現後,系統管理人員不知道。由于沒有及時發現故障,不但解決問題時存在困難,而且可能帶來很大的損失。是以,一個能完成對主機或服務進行檢測的自動化工具對于運維人員或系統管理人員來說非常重要。Nagios就是一個這樣的開源管理軟體,通過Nagios可以輕松實作對遠端主機、服務以及網絡的全面監控。

  二. 什麼是Nagios 

     Nagios是一款Linux上成熟的監控系統運作狀态和網絡資訊的開源IT基礎設施監視系統。Nagios能監視所指定的本地或遠端主機及服務,同時提供異常通知、事件處理等功能。與商業IT管理系統,如IBM Tivoli、HP Open View/Operations等相比,Nagios具有成本低廉、結構簡單、可維護性強等諸多有點,越來越受IT運維人員和系統管理人員的青睐。

     Nagios可運作在Linux和UNIX平台上,同時提供一個可選的基于浏覽器的Web界面,以友善系統管理人員常看系統的運作狀态、網絡狀态、各種系統問題及日志異常等。

  三. Nagios的結構與特點

     從結構上講,Nagios可分為核心和插件兩個部分。Nagios的核心部分隻提供了很少的監控功能,是以要搭建一個完善的IT監控管理系統,使用者還需要為Nagios安裝相應的插件,這些插件可以從Nagios官方網站上下載下傳,也可以根據實際要求編寫。

        Nagios的主要功能特點如下:

           @ 監控本地或者遠端主機資源(記憶體、程序、磁盤等)

         @ 監視網絡服務資源(HTTP、PING、FTP、SMTP、POP3等)

         @ 允許使用者編寫自己的插件來監控特定的服務

         @ 當被監控對象出現異常時,可以通過郵件、短信等方式通知管理人員

         @  可以事先定義時間處理程式,當主機或服務出現故障時自動調用制定制定的處理程式

         @ 可以通過Web界面來監控各個主機或服務的運作狀态。

 =========================華麗麗的分割線=====================

Nagios的安裝與配置 

一. 安裝Nagios

        1.  安裝前的準備

        (1)建立Nagios使用者和使用者組 

        将Nagios程序的運作使用者群組設定為nagios,并且将nagios的主程式目錄屬主設定為nagios,以保證系統的安全(當然設定為root使用者也是可以的,但不建議這麼做)。基本操作如下:

運維監控 ——Nagios

   (2)開啟系統的sendmail服務或Postfix服務

         在Nagios監控伺服器上開啟sendmail服務的主要作用是讓Nagios在檢測到故障時可以發送報警郵件。目前很多的Linux發行版本都預設自帶了sendmail服務,是以在安裝系統時隻需開啟sendmail服務即可,并不需要在sendmail上進行任何配置。

        【注:系統發行版本不同,預設自帶的郵件服務也不同。我使用的為CentOS 6.5 ,自帶的為Postfix服務。兩者任一皆可】 

        2. 編譯安裝Nagios

        所有準備工作完成後,開始編譯安裝Nagios。過程如下:

運維監控 ——Nagios
運維監控 ——Nagios

 注:

        # 解包

        # 進入主目錄

        # 指定Nagios的安裝目錄,這裡指定将Nagios安裝到/usr/local/nagios目錄下

        # 通過make install指令來安裝Nagios主程式的CGI和HTML檔案

        # 通過make install-init指令可以在/etc/rc.d/init.d目錄下建立Nagios的啟動腳本

        # 通過make install-commandmode指令來配置目錄權限

        # 通過make install-config用來安裝Nagios執行個體配置檔案,這裡的安裝路徑是/usr/local/nagios/etc

        設定開機啟動。

運維監控 ——Nagios

        Nagios各個目錄名稱及用途說明如下表所示:

運維監控 ——Nagios

   3. 安裝Nagios插件 

        Nagios提供的各種監控功能基本是通過插件來完成的,而Nagios核心隻提供了很少的監控功能,是以安裝插件是必須的。Nagios的插件可以再www.nagios.org下載下傳到,我下載下傳的是nagios-plugins-2.0.3。其實插件版本與Nagios版本的關聯并不大,不一定非要用我下載下傳的這個版本。接着上傳對應的nagios-plugins-2.0.3.tar.gz到伺服器,解壓縮并安裝。過程如下:

運維監控 ——Nagios
運維監控 ——Nagios

        這樣,安裝就完成了。需要說明的是,插件的安裝路徑最好和Nagios安裝路徑一緻,這樣安裝完插件後會在Nagios主程式目錄(即/usr/local/nagios下的libexec目錄)下生成很多可執行檔案,這些就是Nagios所需要的插件。

        4. 安裝Nagios漢化插件

        對于英語水準不高的使用者(比如我這樣的- -。),還可以為Nagios安裝漢化插件,可以從http://sourceforge.net/projects/nagios-cn/files/下載下傳對應Nagios版本的漢化插件。這裡下載下傳的是nagios-cn-3.2.3.tar.bz2。接着開始安裝編譯Nagios插件,過程如下:

運維監控 ——Nagios

   5. 安裝與配置Apache

        Apache不是安裝Nagios所必須的,但是Nagios提供了Web監控界面,通過Web監控界面可以清晰的看到被監控的主機和資源的運作狀态,是以,安裝一個Web服務是很必要的。可選的Web伺服器有Apache、Nginx等,我選擇Apache了。

        Apache的安裝非常簡單,需要注意的是,Nagios在nagios 3.1.x版本以後,配置Web監控頁面時需要PHP的支援。這裡下載下傳的Nagios版本為nagios 4.0.8,是以在安裝完Apache後,還需要安裝配置PHP。

        LAMP環境的搭建過程省略,我選擇以YUM方式搭建。跳至配置過程:

        (1) 配置Apache

        首先在Apache配置檔案/etc/httpd/conf/httpd.conf中修改Apache程序的啟動使用者為Nagios:

運維監控 ——Nagios

        然後找到DirectoryIndex修改為如下并添加AddType一行:

運維監控 ——Nagios

        安全起見,一般要求必須經過授權才能通路Nagios的Web監控頁面,在httpd.conf檔案最後添加如下資訊:

運維監控 ——Nagios

   (2) 建立Apache目錄驗證檔案

        在上面的配置中指定了目錄驗證檔案htpasswd,下面建立這樣一個檔案:

運維監控 ——Nagios

        (3) 啟動Apache服務

        (注意防火牆),可以看到Nagios的監控頁面。

運維監控 ——Nagios

         二. 配置Nagios

         Nagios主要用于監控一台或者多台本地主機及遠端主機的各種資訊,包括本機資源及對外的服務等。預設的Nagios配置沒有任何監控内容,僅是一些模闆檔案。下面通過理論與實踐相結合的方式詳細介紹如果搭建一個完善的Nagios監控系統。

        1. 預設配置檔案介紹

        Nagios安裝完畢後,預設的配置檔案在/usr/local/nagios/etc目錄下,每個檔案或目錄的用途如下表所示:

運維監控 ——Nagios

        Nagios在配置方面非常靈活,預設的配置檔案并不是必須的。可以使用這些預設的配置檔案,也可以建立自己的配置檔案,然後在主配置檔案nagios.cfg中引用即可。

        2. 配置檔案之間的關系

        Nagios的配置過程設計的幾個定義有:主機、主機組、服務、服務組、聯系人、聯系人組、監控時間和監控指令等,從這些定義可以看出,Nagios的各個配置檔案之間是互為關聯、彼此引用的。成功配置一台Nagios監控系統,必須弄清楚每個配置檔案之間依賴與被依賴的關系,最重要的4點事:第一次要定義監控哪些主機、主機組、服務、服務組,第二要定義這個監控要通過什麼指令實作,第三要定義監控的時間段,最後要定義主機或服務出現問題時要通知的聯系人和聯系人組。

        清楚了Nagios的配置重點和各個配置檔案之間的依賴關系後,配置Nagios就變得非常容易了。

        3. 配置Nagios

        為了能更清楚的說明問題,同時為了友善維護,建議為Nagios各個定義對象建立獨立的配置檔案:

        建立hosts.cfg檔案定義主機和主機組,

        建立services.cfg檔案定義服務,

        用預設的contacts.cfg檔案定義聯系人和聯系人組,

        用預設的commands.cfg檔案定義指令,

        用預設的timeperiods.cfg檔案定義監控時間段,

        将預設的templates.cfg檔案作為資源引用檔案。  

        (1) templates.cfg 檔案

        Nagios主要用于監控主機資源及服務(在Nagios配置中被稱為對象)。為了不重複定義一些監控對象,Nagios引入了一個模闆配置檔案,将一些共性的屬性定義成模闆,以便多次引用,這就是templates.cfg的作用。templates.cfg檔案内容如下:

運維監控 ——Nagios
運維監控 ——Nagios
運維監控 ——Nagios
運維監控 ——Nagios
運維監控 ——Nagios

  (2) resource.cfg 檔案

      resource.cfg是Nagios的變量定義檔案,檔案内容隻有一行:

      $USER1$=/usr/local/nagios/libexec

      其中,變量$USER1$指定了安裝Nagios插件的路徑,如果把插件安裝在其他路徑,隻需要在這裡修改即可。需要足以的是,變量必須先定義,然後才能在其他配置檔案中進行引用。

  (3) commands.cfg

      此檔案在預設情況下是存在的,無需修改即可使用。當然,如果有新的指令需要加入,在此檔案中進行添加即可。這裡并未列出檔案的所有内容,僅介紹了配置中用到的一些指令。

@ notify-host-by-email 指令的定義如下:

運維監控 ——Nagios

@ check-host-alive 指令的定義如下:

運維監控 ——Nagios

        @ 還有其他許多,除了實作的功能不一樣配置并無差别。

運維監控 ——Nagios

  (4) hosts.cfg檔案

      此檔案在預設情況下不存在,需要手動建立。hosts.cfg主要用來制定被監控的主機位址及相關屬性資訊。一個配置好的執行個體如下:

運維監控 ——Nagios

  (5) services.cfg檔案

      此檔案預設情況下也不存在,需要手動建立。services.cfg檔案主要用于定義監控的服務和主機資源,例如監控HTTP服務、FTP服務、主機磁盤空間、主機系統負載等。

運維監控 ——Nagios
運維監控 ——Nagios

     這裡對web和MySQL主機設定了4個監控服務,分别是check_ping、check_ssh、check_ftp和check_http。如果要監控遠端主機更多的服務,按照相同格式增加即可。

     在services.cfg檔案中,有很多對指令的定義,例如監控SSH服務的check_ssh、監控FTP服務的check_ftp、監控HTTP服務的check_http等,這些指令均在commands.cfg中進行定義。結合commands.cfg和resource.cfg檔案,不難看出,這些指令對應的真實路是/usr/local/nagios/libexec,也就是說,這些指令其實就是安裝Nagios插件後産生成的可執行檔案。

     在Nagios中,插件指令和參數的組合格式為:指令!參數!參數。如果有更多參數,依次通過歎号分割即可。下面列舉幾個指令組合進行介紹。

        check_ping!100.0,20%!500.0,60%

        此指令組合從左到右依次為:指令!告警時延,丢包率!嚴重告警時延,丢包率。

        check_http!0.0020!0.0050!10

        此指令組合從左到右依次為:指令!告警時延!嚴重告警時延!連接配接逾時時間。

        check_tcp!23!0.0020!0.0050!10

        此指令組合從左到右依次為:指令!端口!告警時延!嚴重告警時延!連接配接逾時時間。

        check_ssh!22!10

        此指令組合從左到右依次為:指令!端口!連接配接逾時時間。

        check_smtp!0.0020!0.0050!10

        另外,在監控伺服器端口時,很多指令都可以使用check_tcp來代替,例如:

        check_ssh=check_tcp!22

        check_imap=check_tcp!143

        check_ftp=check_tcp!21

        check_nntp=check_tcp!119

        check_pop=check_udp!110

        check_udp=check_tcp

        check_telnet=check_tcp!23

   (6) contacts.cfg是一個定義聯系人和聯系人組的配置檔案,當監控的主機或者服務出現故障時,Nagios會通過指定的通知方式(郵件或短信)将資訊發給這裡指定的聯系人或使用者。

        下面是一個配置好的示例。

運維監控 ——Nagios

   (7) timeperiods.cfg檔案

       此檔案隻用于定義監控的時間段。下面是一個配置好的示例:

運維監控 ——Nagios

  (8) cgi.cfg檔案

      此檔案用來控制相關CGI腳本,如果想在Nagios的Web監控界面執行CGI腳本,例如重新開機Nagios程序、關閉Nagios通知、停止Nagios主機檢測等,這時就需要配置cgi.cfg檔案了。由于Nagios的Web監控頁面驗證使用者為wangkun,是以隻需要在cgi.cfg檔案中添加此使用者的執行權限就可以了。需要修改的配置資訊如下:

運維監控 ——Nagios

        到這裡為止,Nagios的所有對象配置檔案已經修改完了。将建立好的8個檔案全部放到/usr/local/nagios/etc目錄下,接着開始配置nagios.cfg檔案。

  (9) nagios.cfg檔案

      nagios.cfg檔案預設的路徑為/usr/local/nagios/etc/nagios.cfg,是Nagios的核心配置檔案,所有的對象配置檔案都必須在這個檔案中進行定義才能發揮其作用,這裡隻需引用對象配置檔案即可。下面分别對Nagios.cfg檔案中的内容進行介紹。

運維監控 ——Nagios

      cfg_file變量用來引用對象配置檔案,如果有更多的對象配置檔案,那麼在這裡依次添加即可。但在有些時候,監控的對象多達幾千個,如果都在這引用将會非常費力,而且還不利于日後的維護,此時就需要另一個變量了,那就是cfg_dir。該變量用于指定一個目錄,所有在這個目錄下的以.cfg為擴充名的檔案都将作為對象配置檔案來處理。另外,Nagios将會遞歸該目錄下的子目錄并處理其子目錄的全部配置檔案。

運維監控 ——Nagios
運維監控 ——Nagios
運維監控 ——Nagios
運維監控 ——Nagios
運維監控 ——Nagios
運維監控 ——Nagios
運維監控 ——Nagios

 =======================華麗麗的分割線======================

Nagios的運作和維護  

 一. 驗證Nagios配置問價你的正确性

    在上面已經配置完成了一個基本的Nagios監控系統。檢查配置檔案的正确性方面Nagios做得非常到位,隻需要一個指令就可以完成:

運維監控 ——Nagios

        看到如下兩個大鴨蛋代表沒有錯誤。如果不是,則根據提示修正即可。

運維監控 ——Nagios

二. 啟動與停止Nagios

        有多重新開機動、停止和重新開機Nagios的方法,讀者可以根據自己的需要,任選其一。

        1. 啟動Nagios

        (1) 通過初始化腳本啟動Nagios

運維監控 ——Nagios

      或    

運維監控 ——Nagios

        (2) 手工方式啟動Nagios

        通過nagios指令的” -d “ 參數來啟動nagios守護程序

運維監控 ——Nagios

        2. 關閉nagios服務

        和開啟的類似,services指令大家夥都快用爛了我就不廢話了

        3. 重新開機Nagios

        services是一種

        第二種是通過web監控頁重新開機Nagios

        還一種是手工方式平滑重新開機,也就是kill  -HUP  <nagios_pid>

到此為止,Nagios監控系統已經成功搭建并運作起來了。

運維監控 ——Nagios

三. Nagios故障報警

        Nagios的故障報警功能非常強大,可以支援郵件、短信、MSN、QQ等多種方式,每種報警方式都有自己的優缺點:郵件報警是最普通、最簡單的方式,無需任何插件,隻需要添加報警的郵件位址即可,但是實時性不好;短信報警實時性最好,可以直接将監控結果發送到指定的手機上,但是短信報警方式需要硬體或第三方插件支援,成本略高;MSN和QQ報警方式實時性介于郵件和短信之間,但需要編寫自定義腳本,是以複雜性稍高。

    下圖是問題出現後Nagios發送到指定郵箱的報警郵件:

運維監控 ——Nagios