自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何擴(kuò)展Nagios,以實(shí)現(xiàn)自定義監(jiān)控?

譯文
運(yùn)維 系統(tǒng)運(yùn)維
Nagios是一款開(kāi)源的免費(fèi)網(wǎng)絡(luò)監(jiān)視工具,能有效監(jiān)控Windows、Linux和Unix的主機(jī)狀態(tài),功能強(qiáng)大的Nagios網(wǎng)絡(luò)監(jiān)控平臺(tái)讓你可以為其功能增添一系列可用插件。本文就介紹了如何自行編寫(xiě)插件,擴(kuò)展Nagios,以實(shí)現(xiàn)自定義監(jiān)控。

【51CTO精選譯文】功能強(qiáng)大的Nagios網(wǎng)絡(luò)監(jiān)控平臺(tái)讓你可以為其功能增添一系列可用插件。

如果你找不到可以滿足自身要求的一款插件,也很容易自行編寫(xiě),本文就介紹了如何自行編寫(xiě)插件。

Nagios插件可以用任何一門(mén)編程語(yǔ)言來(lái)編寫(xiě),只要該編程語(yǔ)言在運(yùn)行Nagios的平臺(tái)上得到支持。Bash是用來(lái)編寫(xiě)Nagios插件的一門(mén)流行語(yǔ)言,因?yàn)樗δ軓?qiáng)大、使用簡(jiǎn)單。

借助插件進(jìn)行的每一次有效的Nagios檢查(Nagios check)都會(huì)生成一個(gè)數(shù)字表示的退出狀態(tài)??赡艿臓顟B(tài)有:

  • 0--各方面都正常,檢查成功完成。
  • 1--資源處于警告狀態(tài)。某個(gè)地方不太妙。
  • 2--資源處于臨界狀態(tài)。原因可能是主機(jī)宕機(jī)或服務(wù)未運(yùn)行。
  • 3--未知狀態(tài),這未必表明就有問(wèn)題,而是表明檢查沒(méi)有給出一個(gè)清楚明確的狀態(tài)。

插件還能輸出文本消息。默認(rèn)情況下,該消息顯示在Nagios web界面和Nagios郵件警報(bào)信息中。盡管消息并不是硬性要求,你通常還是可以在可用插件中找到它們,因?yàn)橄⒏嬖V用戶出了什么岔子,而不會(huì)迫使用戶查閱說(shuō)明文檔。

用Bash編寫(xiě)的一個(gè)簡(jiǎn)單的Nagios插件類似這樣。這個(gè)示例插件檢查一個(gè)指定的文件:

  #!/bin/bash

#將***個(gè)實(shí)參($1)指定為文件名

  filename=$1

#先檢查該文件是否存在。這是你應(yīng)該開(kāi)始的***個(gè)檢查,也是最基本的檢查。

if [ ! -e $filename ]; then

  echo "CRITICAL status - file $filename doesn't exist"

exit 2 #返回臨界狀態(tài),那是由于你的最糟糕情況是該文件根本就不存在。

#如果前一個(gè)條件通過(guò)(文件存在),那么接下來(lái)檢查該文件是否可讀:

elif [ ! -r $filename ]; then

  echo "WARNING status - file $filename is not readable."

exit 1 #返回警告狀態(tài),那是由于該狀態(tài)勝于根本不存在文件;

#如果前一個(gè)條件通過(guò),檢查它是不是一個(gè)普通文件,而不是目錄或設(shè)備文件。

elif [ ! -f $filename ]; then

  echo "UNKNOWN status - file $filename is not a file."

exit 3 #返回未知狀態(tài);

#如果所有上述檢查均通過(guò),那么表明它正常:

else

  echo "OK status - file is OK"

  exit 0 #Return OK status

  fi

注釋(Bash中以#開(kāi)始)解釋了代碼;如果你需要更清晰的解釋,或者想進(jìn)一步了解Bash的文件測(cè)試操作符,請(qǐng)查閱說(shuō)明文檔(http://tldp.org/LDP/abs/html/fto.html)。

盡管這個(gè)實(shí)例很簡(jiǎn)單,但它清楚地表明了如何實(shí)現(xiàn)Nagios插件邏輯。始終首先要尋找最糟糕的情況。只有當(dāng)所有檢查均通過(guò),腳本退出時(shí)才會(huì)顯示狀態(tài)正常。確保在退出之前指定明確消息。

使用插件

默認(rèn)情況下,所有的Nagios插件均存放在用$USER1宏命令定義的目錄中,具體在文件/etc/nagios/private/resource.cfg中定義。在來(lái)自EPEL存儲(chǔ)庫(kù)(http://fedoraproject.org/wiki/EPEL)的典型Nagios安裝環(huán)境下,$USER1被定義為/usr/lib/nagios/plugins。你對(duì)插件應(yīng)該做的頭一件事就是,把它拷貝到用$USER1宏命令定義的目錄中。插件通常歸root所有,其權(quán)限設(shè)置為755。Nagios在屬于nagios群組的用戶nagios下工作,所以腳本需要讀取和執(zhí)行其他群組的權(quán)限。

一旦你把腳本放在/usr/lib/nagios/plugins目錄中,就要在文件/etc/nagios/objects/commands.cfg里面把它定義成Nagios命令。假設(shè)你將腳本命名為check_file.sh,添加下列命令定義:

#我們的自定義文件檢查命令:

  define command{

  command_name    check_file

  command_line    $USER1$/check_file.sh $ARG1$

  }

這應(yīng)當(dāng)相當(dāng)清楚。變量$ARG1$代表傳遞給Nagios命令的***個(gè)實(shí)參;在本例中,這***個(gè)實(shí)參應(yīng)該是文件名稱。如果你想傳遞更多的實(shí)參,可以將$ARG2$用作第二個(gè)實(shí)參,將$ARG3$用作第三個(gè)實(shí)參,以此類推。

想開(kāi)始使用你的插件,應(yīng)在你的nagios配置文件(比如service.cfg)中將其定義成一項(xiàng)服務(wù):

  define service{

  use                             local-service

  host_name                       localhost

  service_description             Check the file /etc/passwd

  check_command                   check_file!/etc/passwd

  }

上述服務(wù)是為本地主機(jī)(host_name localhost)定義的,為本地服務(wù)使用模板(使用local-service),詳見(jiàn)文明文檔的對(duì)象繼承部分(http://nagios.sourceforge.net/docs/3_0/objectinheritance.html),即可了解模板及模板的工作原理。最重要的部分是check_command指令。它指定了命令check_file,然后是作為分隔符的感嘆號(hào),后面是作為實(shí)參的文件名稱。如果你的插件有不止一個(gè)實(shí)參,可以用另外的感嘆號(hào)來(lái)分隔。

遠(yuǎn)程運(yùn)行Nagios插件

示例check_file plugin存在的一個(gè)明顯缺點(diǎn)是它本地運(yùn)行,這意味著無(wú)法檢查遠(yuǎn)程服務(wù)器上的文件。你有許多辦法可以解決這個(gè)問(wèn)題。

***個(gè)辦法就是使用ssh命令,遠(yuǎn)程執(zhí)行代碼。這需要你把腳本拷貝到遠(yuǎn)程服務(wù)器上,并利用ssh可以運(yùn)行遠(yuǎn)程命令的功能。這還需要你為Nagios服務(wù)器及其nagios用戶配置無(wú)密碼密鑰登錄。如果這方面你不太確信如何操作,可以參閱本文http://www.techrepublic.com/blog/opensource/remotely-monitor-servers-with-the-nagios-checkbyssh-plugin/321,了解所有的相關(guān)細(xì)節(jié)。

這***個(gè)辦法的優(yōu)點(diǎn)是,你擁有了針對(duì)被監(jiān)控的服務(wù)器,本地運(yùn)行命令所具有的功能和靈活性。缺點(diǎn)就是,Nagios服務(wù)器必須能夠借助密鑰,無(wú)密碼登錄到遠(yuǎn)程服務(wù)器。這是個(gè)安全問(wèn)題,不推薦敏感環(huán)境使用。

第二個(gè)比較安全的辦法是,使用SNMP擴(kuò)展功能。這要求你已在遠(yuǎn)程服務(wù)器上安裝和配置好了net-snmp程序包(面向CentOS)。

想使用SNMP擴(kuò)展命令,先將check_file.sh腳本拷貝到遠(yuǎn)程服務(wù)器上。比如說(shuō),你可以把該腳本放在目錄/usr/bin/中。

接下來(lái),將配置指令extend check_passwd_file /usr/bin/check_file.sh /etc/passwd添加到遠(yuǎn)程服務(wù)器上的文件/etc/snmp/snmpd.conf。語(yǔ)法是extend some_alias command argument。下面是這種方法存在的主要不便之處:你得為每一次獨(dú)立的檢查定義一個(gè)別名,在本例中這意味著為我們想要測(cè)試的每一個(gè)獨(dú)立文件定義一個(gè)別名,因?yàn)闊o(wú)法通過(guò)SNMP來(lái)傳送實(shí)參。

文件/etc/snmp/snmpd.conf只要出現(xiàn)變化,都需要你用service snmpd reload命令(面向CentOS),重新裝入snmpd服務(wù)。之后,你可以用snmpget命令來(lái)測(cè)試新的檢查,就跟在snmpget -v2c -c public -OvQ 10.0.0.2 NET-SNMP-EXTEND-MIB::nsExtendOutputFull.\"check_passwd_file\"中一樣。這個(gè)示例snmpget命令通過(guò)SNMP版本2c,以"public"共用字符串查詢服務(wù)器10.0.0.2。自定義SNMP擴(kuò)展命令的對(duì)象標(biāo)識(shí)符(OID)是NET-SNMP-EXTEND-MIB::nsExtendOutputFull.\"some_alias\"。

遺憾的是,上面這個(gè)命令無(wú)法直接用Nagios來(lái)實(shí)現(xiàn)。如果snmpget正常工作,可以連接至遠(yuǎn)程主機(jī),它總是會(huì)返回狀態(tài)0,這表明每方面都正常,因?yàn)槌绦騭nmpget本身退出時(shí)沒(méi)有錯(cuò)誤。因而,即使某個(gè)文件不存在,檢查腳本也會(huì)返回狀態(tài)0,不過(guò)它會(huì)輸出文件不存在的正確消息。

你可以解決這個(gè)問(wèn)題,只要充分利用針對(duì)Nagios的名為check_snmp_extend.sh的特殊插件。這個(gè)插件取得狀態(tài)消息的***個(gè)單詞后,根據(jù)該單詞來(lái)設(shè)定狀態(tài)。由于預(yù)計(jì)使用這個(gè)插件,我們?cè)谑纠_本check_file.sh中設(shè)定了消息,以便從OK(正常)、CRITICAL(臨界)、WARNING(警告)和UNKNOWN(未知)開(kāi)始。

想開(kāi)始使用check_snmp_extend.sh插件,先下載該插件(http://www.logix.cz/michal/devel/nagios/check_snmp_extend.sh),然后把它放到Nagios服務(wù)器上的目錄/usr/lib/nagios/plugins($USER1宏命令)。在CentOS上,你得編輯腳本check_snmp_extend.sh,并把/usr/local/nagios/libexec/utils.sh換成/usr/lib/nagios/plugins/utils.sh,這是utils.sh腳本的正確路徑。

之后,你就可以像使用其他任何插件那樣使用check_snmp_extend.sh。首先,把它定義為一個(gè)命令:

define command{

  command_name check_snmp_extend

  command_line $USER1$/check_snmp_extend.sh $HOSTADDRESS$ $ARG1$

  }

之后,定義一項(xiàng)服務(wù):

define service{

  use                 generic-service

  host_name         somehost.example.org

  service_description Check For /etc/passwd

  check_command  check_snmp_extend!check_passwd_file

  }

使用SNMP的擴(kuò)展選項(xiàng)就跟你的SNMP配置一樣安全。這個(gè)辦法只需要在遠(yuǎn)程主機(jī)上進(jìn)行極少的改動(dòng),又確保了標(biāo)準(zhǔn)的設(shè)置環(huán)境符合安全方面的***實(shí)踐。你可以找到用于類似用途的其他Nagios插件,比如nrpe,但是它們要求遠(yuǎn)程安裝額外服務(wù),從安全和兼容性的角度來(lái)看這并非總是一個(gè)好主意。

如你所見(jiàn),很容易用自行編寫(xiě)的插件來(lái)擴(kuò)展Nagios。Nagios允許這種擴(kuò)展,這一點(diǎn)正是許多管理員青睞它、而不是青睞其他監(jiān)控解決方案的原因之一。

原文鏈接:http://www.openlogic.com/wazi/bid/256126/how-to-extend-nagios-for-custom-monitoring

責(zé)任編輯:黃丹 來(lái)源: 51CTO.com
相關(guān)推薦

2011-04-06 15:05:58

nagios監(jiān)控Linux

2023-10-19 09:14:34

Java開(kāi)發(fā)

2009-09-07 22:00:15

LINQ自定義

2012-07-24 15:03:19

OpenStack架構(gòu)

2021-03-26 20:37:14

Prometheus監(jiān)控指標(biāo)

2009-09-03 13:34:03

.NET自定義控件

2023-01-03 07:40:27

自定義滑塊組件

2020-12-14 10:26:48

Prometheus 監(jiān)控Services

2009-02-10 12:55:39

自定義控件AJAX.NET

2009-11-25 14:36:39

PHP函數(shù)usort(

2010-02-25 16:27:44

WCF擴(kuò)展點(diǎn)

2010-07-01 09:38:31

jQuery

2021-10-28 08:39:22

Node Export自定義 監(jiān)控

2025-03-05 10:49:32

2020-06-08 10:05:09

云計(jì)算云平臺(tái)

2021-05-29 16:12:00

通信協(xié)議設(shè)備

2011-08-22 15:09:37

nagios網(wǎng)絡(luò)監(jiān)控

2024-12-27 15:37:23

2011-03-22 14:29:19

Nagios監(jiān)控

2016-02-26 14:57:50

飛象網(wǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)