benjamin @Wiki 第5章 hack NAGIOS-監視command的開發

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Nagiosplugin 的開發

這一章我們要來看如何開發一個plagin

在開放原始碼的世界裡,大家都可以寫軟體,大家都可以把自已的作品公開給大家使用。因此,nagios這個功能特強大的軟體,也已經有非常多的人為它寫了很多好用的plugin,放在網路上讓大家下載使用。

這些讓大家下載來使用的plugin如果寫的太爛,可能不用多久就會受到一些使用者的修改與補強,於是這個軟體就在眾人的努力之下愈變愈好。

但是即使是如此,有的時候我們還是無法在網路上找到適合我們需求的piugin,此時我們就必須要自已開發了。依照nagios所列出的plung開發守則,一個成功且優良的plugin是具有以下的條件的:

而這個優良的插件的軟體在寫作之時,是必須要遵守以下的條件的:

  1. 寫出這個插件的使用方法
  2. 這個插件的反回值需要遵守即定的格式
  3. 考慮nagios執行的效能
  4. 遵守命名規則

這些條件所規範的,是希望開發出來的插件是個容易被使用,並且不會造成nagios主機太大的負擔。因為nagios主機要負責運行很多的監視,也就是說要執行相當多的插件,當其中的某個插件具有不好的性能時,很容易對其他的服務造成影嚮。一個老鼠壞了一鍋州,就是在說這個意思。

如果說這個插件是個plain-text,那麼使用者可以直接從原始碼來獲得資訊,如果不是的話,那麼這個插件就有提供這方面資訊的義務了。所以通常nagios插件,都會有help的選項,幫助使用者掌握使用方式。


筆者當初在從事這個插件的開發之時,也是一直將這規範記在心裡。但是有的時候遇到專案經理的緊急要求,需要在短時間之內開發一個奇特服務的監視插件時,常常就把這些規範給制之於腦後了。



● 開始動手吧!


當然解決任何問題最好的方法,就是找現有的答案。雖然我沒有仔細的調查過,但是我可以百分之一百的確定,所有常用服務的監視插件,都已經存在在這世界上的某一個角落了,所以你只要打開電腦,到
google輸入一些關鍵字,一定可以找的到這些常用服務的監視插件,雖然它不一定是免費的。

但是一些非常的客制化的服務,比方說你想要為你的客戶開發一個定期監視鳥龍裡的飼料是否以經被鳥吃完了這個特別的服務,可以就必需要自已寫了。

自已寫插件並不是一件困難的事情,在講這這麼多前言之後,我們就先來展示一個全世界最簡單的helloworld!級插件:

#!/bin/sh
echo OK- Hello World!


夠簡單吧,這是一個shell 指令,它只反回一個ok,還有一個訊息hello world,它給我們一個觀念,就是只要有反回值,而且反回值是能夠讓nagios所認識的,都可以被當作是插件來使用。

我們先將這一個shell的指令集存成 helloworldplugin.sh . 保存在/usr/local/nagios/libexec裡面,此時,plugin的開發工作已經大功告成了。


接下來我們將它安裝到我們的nagios上,安裝的步驟不管插件是簡單還是複雜,手續都是一樣的。

首先我們先定義一個服務,我們可以以下面的方式來進行定義:為了簡化說明,我使用了定義檔的繼承方式(usegeneric-service ),很多東西都延用共通的設定,只列出我們要修改的部份:(各個文字列中間的空格,是一個半型的space)

services.cfg
define service {
use generic-service
host_namemycomputer----------------------------1
service_descriptionhello_world_test------------2
check_command check_helloworld--------------3
contact_groups me---------------------------------4
}
說明:

  1. 主機名稱,因為服務必須要存在於主機,所以我們要定義這個項目,這裡的mycomputer,是在hosts.cfg的檔案裡必須要先定義好的。
  2. 服務描述:關於這一項service的描述。儘量取可容易一目了然的名字,最好用英文,用中文的話會出現亂碼。
  3. 用來監視的命令名:這也是在checkcommand裡必須要先定義好的。
  4. 連絡群組:當服務發生問題時要聯絡誰,這也是必須要在contact.cfg裡事先定義好的。

在完成了以上的設定細節,使用

nagios -v /usr/local/nagios/etc/nagios.cfg

測式一下設定檔,如果沒有問題,就可以執行

/etc/init.d/nagios restart

來重新啟動nagios,過了不久只後,我們就會看到我們的nagios出現了如下圖的訊息了。


當然,這個插件是絕對無法派上任何用場的,不過它就好像單細胞生物一樣至少它是個插件。



java的語言雖然強大,在進行一些小型的開發時,我們有時可能還是會選擇一些簡單的scriopt式語言,因為這些語言很方便,而且很容易修改,不需要重新編譯。這一節裡面,我們希望利用perl這一個語言,來開發出股價監視配件:

定義要求就如上一章所示,在這裡不在多加列出。只針對程式的部份來作說明。

要得到網路上的網頁,我們可以利用perl所提供的…含式庫。

perl也提供了一個像是getopt這樣子的程式庫。這個程式庫的名字是:

同樣的,我們利用同樣的方法,在我們執行用的電腦上,安裝以上我們所需的含式庫。

接下來我們使用perl來實現同樣的邏輯。

接下來我們使用shell scriptlinuxcommand來實現同樣的邏輯。

接下來我們使用c語言,及nagios所提供的功用含式庫,來實現相同的邏輯。

後記:

如以上所示,我們展示了四種語言的開發範例,我在寫這一章的時候,一直覺得我該用四種語言,四種範例好,還是四種語言,一種範例。很明顯的,四種語言一種範列是我最後所選擇的,因為比較容易比較,同樣的事情可以用各種語言來實現,可以針對需要來選一個你認為最合適的語言。

另外,我們也可以從以上的範例學到一些基本上寫作plugin所需要的共用技巧,除了核心的部份需要針對情況來改造之後,其他像是command的讀取,文字列的操作等等,都可以說是共通的。

本章所談到的範例都可以在本書所附的光碟上找的到。