成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何編寫Nagios插件

運維 系統運維
如何編寫Nagios插件:什么是Nagios?如何使用Nagios監控Linux郵件服務器?首先應該從被監控的主機入手,在nagios配置文件。本文講述的是如何編寫Nagios插件

  如何編寫 Nagios 插件

  Nagios 的最激動人心的方面是可以輕松地編寫您自己的插件,只需要了解一些簡單的指導原則即可。為了管理插件,Nagios 每次在查詢一個服務的狀態時,產生一個子進程,并且它使用來自該命令的輸出和退出代碼來確定具體的狀態。退出狀態代碼的含義如下所示:

  OK —退出代碼 0—表示服務正常地工作。

  WARNING —退出代碼 1—表示服務處于警告狀態。

  CRITICAL —退出代碼 2—表示服務處于危險狀態。

  UNKNOWN —退出代碼 3—表示服務處于未知狀態。

  最后一種狀態通常表示該插件無法確定服務的狀態。例如,可能出現了內部錯誤。

  下面提供了一個 Python 示例腳本,用于檢查 UNIX® 平均負載。它假定 2.0 以上的級別表示警告狀態,而 5.0 以上的級別表示危險狀態。這些值都采用了硬編碼的方式,并且始終使用最近一分鐘的平均負載。

  Python 插件—示例工作插件

  1.   #!/usr/bin/env python  
  2.  
  3.   import os,sys  
  4.  
  5.   (d1, d2, d3) = os.getloadavg()  
  6.  
  7.   if d1 >= 5.0:  
  8.  
  9.   print "GETLOADAVG CRITICAL: Load average is %.2f" % (d1)  
  10.  
  11.   sys.exit(2)  
  12.  
  13.   elif d1 >= 2.0:  
  14.  
  15.   print "GETLOADAVG WARNING: Load average is %.2f" % (d1)  
  16.  
  17.   sys.exit(1)  
  18.  
  19.   else:  
  20.  
  21.   print "GETLOADAVG OK: Load average is %.2f" % (d1)  
  22.  
  23.   sys.exit(0)  
  24.  

  在編寫了這個小的可執行插件之后,接下來是使用 Nagios 注冊該插件,并創建一個檢查平均負載的服務定義。

  這項工作也是非常簡單的:使用下面的內容創建一個名為 /etc/nagios-plugins/config/mygetloadavg.cfg 的文件,根據下面的示例,向 services.cfg 文件添加一個服務。請記住,必須在 hosts.cfg 配置文件中定義 localhost。

  示例插件—使用 Nagios 進行注冊

  1.   define command{  
  2.  
  3.   command_name check_mygetloadavg  
  4.  
  5.   command_line /path/to/check_getloadavg  
  6.  
  7.   }  
  8.  

  創建一個使用示例插件的服務

  1.   define service{  
  2.  
  3.   use service-template  
  4.  
  5.   host_name localhost  
  6.  
  7.   service_description LoadAverage  
  8.  
  9.   check_period 24x7  
  10.  
  11.   contact_groups server-admins  
  12.  
  13.   notification_options c,r  
  14.  
  15.   check_command check_mygetloadavg  
  16.  
  17.   }  
  18.  

  編寫一個完整的插件

  前面的示例說明了一個采用“硬編碼”方式插件的限制,它不支持運行時配置。在實際中,通常最好的方式是創建一個可配置的插件。通過這種方式,您可以創建和維護一個插件,使用 Nagios 將其注冊為單個插件,并且傳遞參數以便為特定的情況自定義警告和危險水平。下一個示例還包括一則使用消息;經過證實,對于由幾個不同的開發人員或者管理員所使用或維護的插件,這是非常有價值的。

  另一個好的實踐是捕獲所有的異常,并后退以報告 UNKNOWN 服務狀態,以便 Nagios 能夠正確地管理有關這個情況的通知。那些允許異常“失敗”的插件通常會退出,并返回值 1;對于 Nagios,這表示一個 WARNING 狀態。請確保您的插件能夠正確地區分 WARNING 和 UNKNOWN。請注意,例如,在將其作為 UNKNOWN 結果處理可能出現錯誤的情況下,通常可以禁用至少某些 WARNING 通知。

  用 Python 編寫一個插件

  上述的建議—運行時參數化、一則使用消息,以及經過改進的異常處理—將得到示例插件的源代碼,這段代碼要比前面的長幾倍。但是您可以更安全地對錯誤進行處理,并且能夠在更廣泛的范圍內重用該插件。

  Python 插件—獲取平均負載的完整插件

  1.   #!/usr/bin/env python  
  2.  
  3.   import os  
  4.  
  5.   import sys  
  6.  
  7.   import getopt  
  8.  
  9.   def usage():  
  10.  
  11.   print """Usage: check_getloadavg [-h|--help] [-m|--mode 1|2|3] \  
  12.  
  13.   [-w|--warning level] [-c|--critical level]"  
  14.  
  15.   Mode: 1 - last minute ; 2 - last 5 minutes ; 3 - last 15 minutes"  
  16.  
  17.   Warning level defaults to 2.0  
  18.  
  19.   Critical level defaults to 5.0"""  
  20.  
  21.   sys.exit(3)  
  22.  
  23.   try:  
  24.  
  25.   options, args = getopt.getopt(sys.argv[1:],  
  26.  
  27.   "hm:w:c:",  
  28.  
  29.   "--help --mode--warning--critical=",  
  30.  
  31.   )  
  32.  
  33.   except getopt.GetoptError:  
  34.  
  35.   usage()  
  36.  
  37.   sys.exit(3)  
  38.  
  39.   argMode = "1" 
  40.  
  41.   argWarning = 2.0  
  42.  
  43.   argCritical = 5.0  
  44.  
  45.   for name, value in options:  
  46.  
  47.   if name in ("-h", "--help"):  
  48.  
  49.   usage()  
  50.  
  51.   if name in ("-m", "--mode"):  
  52.  
  53.   if value not in ("1", "2", "3"):  
  54.  
  55.   usage()  
  56.  
  57.   argMode = value 
  58.  
  59.   if name in ("-w", "--warning"):  
  60.  
  61.   try:  
  62.  
  63.   argWarning = 0.0 + value  
  64.  
  65.   except Exception:  
  66.  
  67.   print "Unable to convert to floating point value\n"  
  68.  
  69.   usage()  
  70.  
  71.   if name in ("-c", "--critical"):  
  72.  
  73.   try:  
  74.  
  75.   argCritical = 0.0 + value  
  76.  
  77.   except Exception:  
  78.  
  79.   print "Unable to convert to floating point value\n"  
  80.  
  81.   usage()  
  82.  
  83.   try:  
  84.  
  85.   (d1, d2, d3) = os.getloadavg()  
  86.  
  87.   except Exception:  
  88.  
  89.   print "GETLOADAVG UNKNOWN: Error while getting load average"  
  90.  
  91.   sys.exit(3)  
  92.  
  93.   if argMode == "1":  
  94.  
  95.   d = d1 
  96.  
  97.   elif argMode == "2":  
  98.  
  99.   d = d2 
  100.  
  101.   elif argMode == "3":  
  102.  
  103.   d = d3 
  104.  
  105.   if d >= argCritical:  
  106.  
  107.   print "GETLOADAVG CRITICAL: Load average is %.2f" % (d)  
  108.  
  109.   sys.exit(2)  
  110.  
  111.   elif d >= argWarning:  
  112.  
  113.   print "GETLOADAVG WARNING: Load average is %.2f" % (d)  
  114.  
  115.   sys.exit(1)  
  116.  
  117.   else:  
  118.  
  119.   print "GETLOADAVG OK: Load average is %.2f" % (d)  
  120.  
  121.   sys.exit(0)  
  122.  

  為了使用這個新的插件,需要使用下面的方法來注冊 /etc/nagios-plugins/config/mygetloadavg2.cfg:

  Python 插件—使用 Nagios 進行注冊

  1.   define command{  
  2.  
  3.   command_name check_mygetloadavg2  
  4.  
  5.   command_line /path/to/check_getloadavg2 -m $ARG1$ -w $ARG2$ -c $ARG3$  
  6.  
  7.   }  
  8.  

  另外,根據下面的示例,在 services.cfg 文件中添加或者更改服務條目。請注意,使用感嘆號 ! 來分隔插件參數。與前面一樣,必須在 hosts.cfg 配置文件中定義 localhost。

  創建一個使用 Python 插件的服務

  1.   define service{  
  2.  
  3.   use service-template  
  4.  
  5.   host_name localhost  
  6.  
  7.   service_description LoadAverage2  
  8.  
  9.   check_period 24x7  
  10.  
  11.   contact_groups server-admins  
  12.  
  13.   notification_options c,r  
  14.  
  15.   check_command check_mygetloadavg2!1!3.0!6.0  
  16.  
  17.   }  
  18.  

#p#

  用 Tcl 編寫一個插件

  最后的示例是使用 Tcl 編寫的一個插件,它使用簡單對象訪問協議 (SOAP) 和 Web 服務描述語言 (WSDL) 檢查 xmenthods.net 的匯率。SOAP 為該插件提供了匯率的當前值,并將這些值與配置的范圍進行比較。如果該值不屬于警告的范圍,那么它將被認為是 OK。如果該值大于或者小于警告級別,但是并沒有超過危險極限,則將狀態設置為 WARNING。否則將其設置為 CRITICAL,除非出現了網絡錯誤,在這種情況下將狀態設置為 UNKNOWN。

  該插件可以識別不同的可配置參數,以便能夠檢查不同范圍的匯率。它還可以用于檢查各個國家的各種匯率。

  Tcl 插件—驗證當前匯率

  1.   #!/usr/bin/env tclsh  
  2.  
  3.   # parse arguments  
  4.  
  5.   package require cmdline  
  6.  
  7.   set options {  
  8.  
  9.   {country1.arg "" "Country 1"}  
  10.  
  11.   {country2.arg "" "Country 2"}  
  12.  
  13.   {lowerwarning.arg "" "Lower warning limit"}  
  14.  
  15.   {upperwarning.arg "" "Upper warning limit"}  
  16.  
  17.   {lowercritical.arg "" "Lower critical limit"}  
  18.  
  19.   {uppercritical.arg "" "Upper critical limit"}  
  20.  
  21.   }  
  22.  
  23.   array set opt [cmdline::getoptions argv $options {: [options]}]  
  24.  
  25.   # if the user did not supply all arguments, show help message  
  26.  
  27.   for each necessary [array names opt] {  
  28.  
  29.   if {$opt($necessary) == ""} {  
  30.  
  31.   set argv "-help"  
  32.  
  33.   catch {cmdline::getoptions argv $options {: [options]}} usage  
  34.  
  35.   puts stderr $usage  
  36.  
  37.   exit 3  
  38.  
  39.   }  
  40.  
  41.   }  
  42.  
  43.   # load TclWebServices package  
  44.  
  45.   package require WS::Client  
  46.  
  47.   if {[catch {  
  48.  
  49.   # download WSDL  
  50.  
  51.   WS::Client::GetAndParseWsdl \  
  52.  
  53.   http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl \  
  54.  
  55.   {} currency  
  56.  
  57.   # create stub commands  
  58.  
  59.   WS::Client::CreateStubs currency  
  60.  
  61.   # download the actual exchange rate  
  62.  
  63.   set result [lindex \  
  64.  
  65.   [currency::getRate "England" "Japan"] 1]  
  66.  
  67.   } error]} {  
  68.  
  69.   # if downloading the rate failed for some reason, report it  
  70.  
  71.   puts "EXCHANGERATE UNKNOWN: $error"  
  72.  
  73.   exit 3  
  74.  
  75.   }  
  76.  
  77.   if {($result < $opt(lowercritical)) || ($result > $opt(uppercritical))} {  
  78.  
  79.   puts "EXCHANGERATE CRITICAL: rate is $result"  
  80.  
  81.   exit 2  
  82.  
  83.   }  
  84.  
  85.   if {($result < $opt(lowerwarning)) || ($result > $opt(upperwarning))} {  
  86.  
  87.   puts "EXCHANGERATE WARNING: rate is $result"  
  88.  
  89.   exit 1  
  90.  
  91.   }  
  92.  
  93.   puts "EXCHANGERATE OK: rate is $result"  
  94.  
  95.   exit 0  
  96.  

  現在,您需要注冊這個命令,以便 Nagios 知道如何調用它。為了完成這項工作,可以使用與前面類似的配置和命令定義來創建一個名為 /etc/nagios-plugins/config/exchangerate.cfg 的文件:

  1.   command_line /path/to/check_exchangerate  
  2.  
  3.   -country1 $ARG1$ -country2 $ARG2$ -lowercritical \  
  4.  
  5.   $ARG3$ -lowerwarning $ARG4$ -upperwarning $ARG5$ -uppercritical $ARG6$  
  6.  

  在下面的示例中,假定該命令的名稱為 check_exchangerate。

  接下來,創建一個使用剛剛創建的插件來監視匯率的服務。下面是服務定義,它將該服務與 localhost 服務器關聯起來。盡管這個檢查并不真正地關聯于任何物理主機,但是需要將它綁定到一臺主機。如果這個檢查涉及到調用受信任的網絡中的服務器的 SOAP 方法,那么您可以添加需要進行監視的實際服務器,并且在這個示例中,應該將服務綁定到該服務器。清單 12 中的代碼檢查 英鎊對日元的匯率,并驗證匯率位于 225 到 275 之間。

   添加 Tcl 插件作為一個新的服務

  1.   define service{  
  2.  
  3.   use service-template  
  4.  
  5.   host_name localhost  
  6.  
  7.   service_description EXCHANGERATE  
  8.  
  9.   check_period 24x7  
  10.  
  11.   contact_groups other-admins  
  12.  
  13.   notification_options c,r  
  14.  
  15.   check_command check_exchangerate!England!Japan!200!225!275!300  
  16.  
  17.   }  

【編輯推薦】

Nagios監控Linux和Unix服務器-安裝步驟

使用Nagios監控Windows客戶端

Cacti的插件安裝(圖)

責任編輯:zhaolei 來源: IBM
相關推薦

2011-03-28 11:20:11

Nagios 插件

2011-06-27 17:24:37

Qt 插件

2011-03-21 13:10:14

Nagios插件

2011-03-22 10:48:28

Nagios監控

2011-03-23 13:29:43

配置Nagios系統

2011-03-21 10:42:44

Nagios插件

2011-03-25 17:06:55

Nagios插件plugins

2023-12-12 08:08:17

插件PRPulsar

2014-08-01 09:57:52

Node.jsNode.js插件

2011-03-22 14:16:17

Nagios安裝

2013-01-10 09:36:19

NagiosNagios插件

2011-06-27 16:59:19

Qt 動態 插件

2011-03-22 09:07:13

Nagios監控memcached

2011-06-16 13:23:35

Qt 模塊化 插件式

2011-08-22 12:25:05

nagios

2011-03-23 09:05:40

Nagios監控

2013-12-23 10:36:57

Nagios監控監測

2014-02-17 10:48:57

NagiosBGP會話

2015-05-07 14:45:40

Cocos 插件

2011-09-01 14:04:45

QT Webkit插件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人一区二区三区 | 黄色网址免费在线观看 | 久久久久久久av麻豆果冻 | 精品视频999 | 亚洲一av| 国产精品久久久久久 | 91精品国产高清一区二区三区 | 三级av在线 | 日日骚视频 | 国产精品免费一区二区三区 | 久久大陆 | 欧美 日本 国产 | 欧美不卡网站 | 午夜欧美 | 亚洲成人久久久 | 中国大陆高清aⅴ毛片 | 欧美精品福利 | 国产成人免费 | 一区二区三区视频在线观看 | 免费观看www7722午夜电影 | 日韩午夜网站 | 国产一区 | 国产一区999 | 狠狠干狠狠操 | 天天看片天天干 | 午夜精品久久久 | 久久久精品一区 | 精品久久久久久久人人人人传媒 | 久久久久久国产精品免费免费狐狸 | 国产免费一区二区三区最新6 | 精品九九九 | 国产一区二区电影 | 国产精品免费av | 欧美性极品xxxx做受 | 久久综合香蕉 | 桃色五月 | 午夜一区二区三区 | 日韩视频在线一区二区 | 一二区成人影院电影网 | 亚洲精品一区国产精品 | 亚洲福利在线观看 |