使用monit搭建一個監控系統

 上周用monit搭建或者說定制了一個監控系統,來監控服務器發生事情。當然了主要是監控異常,因為我們的產品屬于服務器類型,很多進程都daemon,要不停的運行。我們搭建監控目的不過是出現問題能夠及時的知道,平時可從web UI上看到整個系統的狀況,同時它本身要輕量級,不要影響性能。當然了類似的產品很多了,比如Ganglia,我在老科長波哥曾經搭建過一個Ganglia系統監控科室十幾臺服務器,讓我很是崇拜。本文重點介紹monit。
                  使用monit搭建一個監控系統
    monit是一個可以監控系統,進程,文件系統,目錄,設備的監控軟件,可以自動喚起那些異常退出的進程,還可定制你想監控的東西。同時monit提供了內置的WEB UI的功能,可以一目了然地了解監控項的情況。其中正常項為綠色,異常項為紅色,很方便的告警,另外,monit還提供了發郵件通知的功能,對于緊急的異常情況可以發送郵件到指定郵箱。比如發生了coredump,發生了DB corrupt,daemon進程異常重啟,可以第一時間郵件通知到管理員,呵呵很強大吧。片湯話我們不多講,講講怎么用monit搭建一個監控系統。
    monit是一個很輕量級的程序,只需要一個可執行程序monit,一個配置文件monitrc即可工作,當然了我們還是要講講安裝過程:
    Ubuntu系統下,安裝一如既往的方便:

    sudo agt-get install monit

    CentOS系統下也是一樣

yum install monit

    我比較喜歡源碼安裝,原因是我喜歡看下源碼:

 wget http://mmonit.com/monit/dist/monit-5.5.tar.gz
    tar zxvf monit-5.5.tar.gz
    cd monit-5.5
    ./configure --prefix=/usr 
    make 
    make install

    注意configure的時候可能會報錯:

checking for pam_start in -lpam... no
configure: error: PAM enabled but headers or library not found, install the PAM development support or run configure --without-pam

    當然了你可以加上–without-pam這個選項繞過這個問題,這個問題在Ubuntu下的解決辦法是:

apt-get install libpam0g-dev

    這個問題過后,再次執行./configure又會出現SSL的報錯:

checking for SSL library directory... Not found
Couldn't find your SSL library files.
Use --with-ssl-lib-dir option to fix this problem or disable the
SSL support with --without-ssl
 

    解決辦法是:

sudo apt-get install libssl-dev

    安裝了libssl之后,configure仍然報錯,原因是它找不到libssl.so,你可以手工搜索libssl.so的位置,然后用 –with-ssl-lib-dir告知configure。
    比如在我的ubuntu下:

root@manu:/usr/lib/i386-linux-gnu# find / -name libssl.so
/usr/lib/i386-linux-gnu/libssl.so

    那么可以執行:

./configure --prefix=/usr --with-ssl-lib-dir=/usr/lib/i386-linux-gnu/

    OK,configure之后,可以執行make 和 make install 了。make install之后,將源碼路徑下的配置文件monitrc拷貝到/etc目錄下:

mv monitrc /etc/monitrc
chown root:root /etc/monitrc 
chmod 0700 /etc/monitrc

    這些事情做好之后,monit就安裝完畢了。我們嘗試啟動monit

root@manu:~/code/c/classical/monit-5.5# monit 
monit: generated unique Monit id 66c0021758d07ecffedadfa0bf5f768d and stored to '/root/.monit.id'
Starting monit daemon with http interface at [localhost:2812]

    前文講過,monit內置了一個http,可以通過browser查看,我們先看下monitrc配置文件的http相關配置:  

set httpd port 2812 and
       use address localhost # only accept connection from localhost
       allow localhost # allow localhost to connect to the server and
       allow admin:monit # require user 'admin' with password 'monit'
       allow @monit # allow users of group 'monit' to connect (rw)
       allow @users readonly # allow users of group 'users' to connect readonly

    這部分內容是http相關的配置,port 2812是端口號,localhost是訪問IP,allow localhost表示只允許本機訪問,用戶名密碼是:admin/monit。這不太符合我們的需求,比如我們不可能每次都在服務器上用瀏覽器查看服務器的狀態,這太假了,如果我們有閑情逸致登上服務器,何必要我們的監控系統。我們將此處的配置改為

set httpd port 2812 and
        use address 10.64.74.99 
        allow 0.0.0.0/0.0.0.0 
        allow manu:manu 

    我們可以用chrome瀏覽器輸入 http://10.64.74.99:2812去查看輸出。第三行的意思是我們允許任何機器登錄我們UI,訪問我們monit的數據,第四行表示登錄需要用戶名和密碼:manu/manu。此時我們的monit監控系統如下所示:
     使用monit搭建一個監控系統
    此時還比較單薄,啥東西也沒有,我們繼續講如何配置monitrc。

set daemon 60

    這個比較簡單,多久檢測一次。我們監控條目有若干,我們不能時時刻刻都做一遍檢查,那就成了死循環了,對系統性能損耗太大了。60秒表示每60秒檢查一次配置文件里面配置的監控項。這個好理解不多說。 

set logfile /var/log/monit.log

    這個配置項表示monit進程本身的log記錄在/var/log/monit.log。
    使用monit搭建一個監控系統
    在web UI上也可以查看monit的log。點擊monit首頁的runnning,
    使用monit搭建一個監控系統
進入monit running status頁面,然后點擊最右下角的的view log。這個也不多說了。使用monit搭建一個監控系統
   
    我們講述發mail的配置:

 set mailserver xxx.xx.xxx.xxx port 25 
                   with timeout 15 seconds
      set mail-format {
          from: BETA_SERVER_128@trend.com
          subject: monit alert --  $EVENT $SERVICE 
          message: $EVENT Service $SERVICE  
                Date:        $DATE   
                Action:      $ACTION  
                Host:        $HOST   
                Description: $DESCRIPTION             
            
               Your faithful employee,
               bean
       }

      set alert xxxx@trendmicro.com.cn                       # receive all alerts 設置收件人

    有很多人發不出郵件的關鍵不在monit程序,而在于沒有一個SMTP Server,幫助你轉發Mail,用所謂的163 或者google的SMTP Server始終沒有成功過。我開始也是發不出Mail,后來有了一個不需要用戶名密碼的SMTP Server之后,自然就能發出郵件通知了。如何搭建一個SMTP Server這是另外一個話題了,我按下不表。我用的是我們公司內部的一個SMTP Server。收到的Mail如下圖所示:
     使用monit搭建一個監控系統
    
    
發Mail問題解決之后,我們就能專注于定制我們自己需要的監控項了。

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

   1 監控進程    

   比如我們服務器上有Apache,我們要監控Apache的情況,如果Apache異常重啟,需要Mail通知。

check process apache with pidfile /var/run/httpd.pid
          start program = "/etc/init.d/rcWebServer.sh start https"
          stop program = "/etc/init.d/rcWebServer.sh stop https"
          if changed pid then alert

    所有進程類的監控是一類,以check process abc打頭,其中with pidfile是指進程的PID記錄在/var/run/httpd.pid。我們知道apache的PID記錄在/var/run/httpd.pid之中,monit通過這個pid文件就可以明白,我們要求它監控那個進程了。
    沒有PID文件的進程咋辦?
    這是個好問題,畢竟大多數的進程都是沒有PID文件的。比如你的進程叫做test_abc,是你通過./test_abc叫起的進程,如何告訴monit我要監控這個進程。monit提供了新的方法。MATCHING,就是進程cmdline匹配到了test_abc,我就監控這個進程,監控項叫test_abc 

check process test_abc with MATCHING test_abc
          if changed pid then alert

    我們新增了監控進程,看下WEB UI的變化:
 使用monit搭建一個監控系統
    點擊apache,可以看詳細情形,這里就不贅述了。
     

    2 監控文件系統或者監控設備
    

    我們一般有存放數據的分區,也有存放日志的分區,如果日志分區使用空間到了90%,我們認為這是出了問題了,我們要注意這種事件的發生:

check device VAR_LOG with path /var/log
        if space usage > 85% then alert

   check filesystem tmpfs with path /var
         if space usage > 80% then alert

    上述語句表明tmpfs 掛載在/var目錄下,如果空間使用了80%,表明出現了異常,需要發mail通知到管理員。
    
新增了文件系統監控項后,UI上會增加如下顯示:
  使用monit搭建一個監控系統
  點擊tmpfs 或者VAR_LOG可以進入二層頁面看下文件系統的詳細信息,我也不贅述了。

    3 監控文件 
    

    monit也可監控某個文件,監控文件的屬性,比如我們的文件permission 是700,如果發生變化則發郵件通知:

check file monit_target with path /var/log/monit_target
        if failed permission 700 then alert
        if size > 1000 MB then exec "/usr/local/bin/rotate /var/log/monit_target

    假如我們關注的事情發生了,我們需要執行自己的腳本,可以用 then exec “your_action”的方式處理。
  

   4 監控program
   

   有很多的情況,不好歸類,比如,我的系統里面如果產生coredump,我希望可以檢測到,同時在WEB UI上顯示并且給我發Mail。我可以自己寫個查看有沒有coredump的腳本,告訴monit系統,我期待的結果,如果執行腳本與我期待的結果不同,那么表示本監控項出了異常

check program COREDUMP_EXIST with path "/var/log/tool/coredump_exist.sh"
      if status != 0 then alert                                     #告訴monit 我們期待結果是0 ,如果返回值不是 0 ,那么表示出了異常
   #!/bin/sh
    corefile_num=`ls /home/manu/core/core* 2>/dev/null| wc -l`
    if [ $corefile_num -eq 0 ]
    then
        exit 0
    else
        exit 1
    fi

    我們前面一直沒提到,如果監控項為異常,WEB UI該項為紅色,否則,該項為綠色。我們現在看下監控program之COREDUMP_EXIST:
  使用monit搭建一個監控系統
    因為我們有coredump文件,所以該項為紅色。

    5 監控主機   

    我們還可以監控其他host,比如我們可見ping某臺host,如果多次沒有回應,那么郵件通知我

check host my_brother with address XX.XX.XX.XX  
         if failed icmp type echo count 3 with timeout 3 seconds then alert

    介紹了很多用法,但是掛一漏萬,終極的學習方法還是看手冊 http://mmonit.com/monit/documentation/monit.html#connection_testing。這個基本介紹的很詳細,我遇到的一些問題,也是從這里找的答案。


原文鏈接:http://www.haodaima.net/art/2648169

原創文章,作者:追馬,如若轉載,請注明出處:http://www.www58058.com/492

(0)
追馬追馬
上一篇 2015-02-14
下一篇 2015-02-15

相關推薦

  • vim 的使用簡介

    linux day 8 使用vi和vim的三種主要模式 移動光標,進入插入模式 改變、刪除、復制文本 撤銷改變 搜索文檔 vim寄存器 可視化和多窗口 vim幫助 vi: Visual Interface,文本編輯器 文本:ASCII, Unicode 文本編輯種類: 行編輯器: sed 全屏編輯器:nano, vi vim-Vi Improved 其他編輯…

    Linux干貨 2016-08-15
  • linux命令 kill命令詳則

    kill命令 kill用來刪除執行中的程序或工作。kill可將指定的信息送至程序。預設的信息(默認)為SIGTERM(15),可經指定程序終止。若仍無法終止該程序,可使用SIGKILL(9)信息嘗試強制刪除程序。程序或工作的編號可利用ps指令或job指令查看。 語法 kill(選項)(參數) 選項 -a:當處理當前進程時,不限制命令名和進程號的對應關系; &…

    2017-08-21
  • ansible運維自動化工具

      ansible簡介 運維工具分類:         agent:基于專用的agent程序完成管理功能,puppet, func, zabbix, …        agent…

    Linux干貨 2016-11-11
  • Kickstart+PXE自動部署CentOS6.6

        生產環境中對于部署大量的相同系統的服務器,如果逐臺安裝操作系統的話是非常浪費時間的工作,還好CentOS提供了無人值守安裝系統的功能,下面就詳細介紹一下配置步驟。 一、配置本機的yum源     因為需要安裝一些軟件來達到我們的目的,所以最好先把yum源配置好。 &nbs…

    Linux干貨 2015-05-12
  • DevOpsDays大會,818坐標上海,我們來啦!?。?

    DevOpsDays 818, 坐標上海, DevOpsDays上海大會, 我們來啦?。。?我們來啦?。?! 我們來啦?。?! 重要的事情說三遍。 標簽: 運維  移動開發  IT技術  DevOps  2008年的敏捷會議上,Andrew Clay Shafer 和 Patrick Debois 討論了關于“敏…

    Linux干貨 2017-08-10
  • 聊聊CentOS6的啟動過程

    前言:     作為一個合格的運維人員,系統的啟動過程我們需要牢記在心,此文不深入探討,只求大致理解CentOS6的啟動過程。 一張圖帶你了解CentOS6的啟動過程 注意:圖片放大查看效果更佳 上圖各階段詳解 POST:計算機開機時BIOS對其各硬件的簡單測試,測試各硬件的完整性 BootSqunce:加電自檢后根據…

    Linux干貨 2016-03-14
欧美性久久久久