benjamin @Wiki 第2節 設定服務

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


繼承的概念:


進行了上述的解示之後,接下來我們進入第一個詳細的設定項目。服務。

如果服務是一個物件的話,那將會是如下面的uml所示的:

這一個物件可以產生很多的實例,以uml來表示的話,將會是如下圖所示:

這物件也能夠使用繼承的概念:

如下圖所示:



繼承的概念在物件導向的程式設計裡是一個非常基要的概念,如同字義所示,繼承是指從父物件繼承了一些特性,然後在子物件裡可以對這些父的特性作修改,或是發展一些新的特性。

更簡單的說,就是把各個服務的特性作個整理,將共同的部份抽出來統一成一個檔案,以便將來修改時可以不用同樣的東西改很多次。

以 上的圖告訴我們,有一個服務,位於ip:192.168.3.69的位置,它需要每天的九點到十六點的這一段時間,以check_http這一個命令來進 行監視。而另外一個服務,位於ip192.168.3.80的位置。除了ip的地址不同之外,其他的需求都是相同的(相同的監視時間,相同的監視命令)

而使用了繼承之後,我們只需要定義好一個服務,然後讓另外一個服務繼承它。這個時候,我們只需要在另外一個服務上進行修改,而不需要作重覆性的定義命令,及監視的時間,就可以輕鬆的完成另外一個服務的定義。


使用繼承的好處在於設定檔的設定很簡單,而且容易修改。設定檔案也可以變得簡單易懂。

設定檔的整體概念:

nagios 的deamon啟動之時,會將設定給給讀取進來。至於會讀取那一些設定檔,則是在NAGIOS.CFG這一個檔案裡所定義。也就是說,nagios先讀取 NAGIOS.CFG,然後發現裡頭所記載的設定檔名稱,然後在一個一個的將這些名稱上所指定的設定檔,一一的讀進來。

nagios的設定檔我們下章才會談到,但是為了在進行設定之前有一個完整的概念,我們先打開這一個檔案,在開頭的位置,有著一堆以cfg_file開頭的文字。比方說,在我的NAGIOS.CFG設定裡,就有著如下方所示的文字:

cfg_file=/usr/local/nagios/etc/contactgroups.cfg
cfg_file=/usr/local/nagios/etc/contacts.cfg
#cfg_file=/usr/local/nagios/etc/dependencies.cfg
#cfg_file=/usr/local/nagios/etc/escalations.cfg
cfg_file=/usr/local/nagios/etc/hostgroups.cfg
cfg_file=/usr/local/nagios/etc/hosts.cfg
cfg_file=/usr/local/nagios/etc/services.cfg
cfg_file=/usr/local/nagios/etc/timeperiods.cfg

在這裡的cfg_file後方所緊接著的,就是設定檔的名稱。你可以將所有的設定檔寫在唯一一個檔案裡,也可以依照設定檔的內容不同,使用複數的檔案來作分類。和所有的linux的習慣一樣,#開頭的代表是註釋,不會被nagios的程式所讀進去。

nagios啟動時,就會依照這裡所定義的次序,一個一個的將設定檔裡的內容給讀取進來。

我們這裡是將各項目分類成不同的檔案,比方說,services.cfg就是用來定義服務,hosts.cfg就是用來定義主機。這樣的定義可以讓我們作一個初步的分類,而且想要修改那一個項目,打開該項目所存在的檔案,馬上就可以找到要修改的位置。
如果你是一位忙碌的網管,這種分類方式在面對有上百台機需要管理時,是相當管用的。但是對於初學者,如果你覺得每個檔案都要進行設定很麻煩,想要將這些東西全部寫在一個檔案裡,也是個可行的方法。
就好像我們在寫程式一樣,在實現某個邏輯時,將程式的內容,寫成由分成很多個含式來處理,各含式都有名確的定義。也可以只用一個含式來處理,雖然這樣一來 此function有可能會有很多程式碼,但是如果你想要實現的邏輯是相當的簡單的話,什麼物件導向,設計模式的理論都變得有點多餘,寫成一個含式是最快 最簡單的。

在接下來我們要進行的說明裡,你可以用一個檔案來包括,也可以分成很多個檔案。這些檔案具有一些特性。
●註釋是用 # 來開頭
也就是你如果想要寫註釋,或是想把一行的設定先隱藏起來時,你可以用這個方法。但是有一些需要注意的點。
好的例子:

#host_name win1
不好的例子:
# host_name win1
如果之間出現空隔,nagios會出現錯誤訊息。

Error: Invalid service object directive '#'.

●空檔案是ok的。

比方說你在nagios.cfg裡
cfg_file=/usr/local/nagios/etc/contactgroups.cfg

設定了這樣的一行。
但是你一時間又沒有想要對contactgroups.cfg裡頭的內容來作定義。此時你可以讓這個檔案空白。nagios不會出錯。

這些檔案的定義方式,可以以下列的模板來表示:

define 物件名{

屬性 屬性值

}


這裡的屬性與屬性值之間的區隔,是一個空白字元。也就是你的鍵盤上的一個space鍵。

為什麼不用xml?或許有人會有這種建議。的確,用xml的話或許比較容易理解,不過對於寫程式的人來說,屬 性的後面,隔了一個空白就是屬性值,這種程式比解析xml來得容易至少100倍以上。不過現在現成的xml parser相當多,所以將來的版本會被那個熱心的工程師,加上xml設定檔的支援也說不定。

設定時的測式:
由於設定nagios時需要設定很多的部份。如果你是像我一樣,分成一個一個的檔案分別作設定時,各檔案之間的統合性,比方說在timeperiods.cfg檔案裡定義了一個名為workhour的timeperiod,然後將這個名為workhour 的物件,放在services.cfg的 檔案裡來使用,這種彼此關連的設定方式,其實對於程式員來說,是非常習以為常的。比方說寫了一個car的物件,然後這個car物件在travel的 method裡被使用。但是程式員寫程式時,可以借由編譯器,也就是所謂的compiler來幫忙檢查錯誤,所以在複雜的邏輯都可以被容易的開發出來。

nagios 雖然沒有所謂的compiler,但是它有提供一個選項(-v),來讓我們測式我們所定義的設定檔群,是否彼此之間都是正確沒有錯誤的。即使在怎麼小心的 人,有時候也會犯一些錯誤,比方說定義了相同名字的物件,或是將文字拼錯,等等的問題。所以這個功能可以說是非常的需要,非常的實用。


這一個命令選項是以如下的方式來被執行:

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

後方一定是跟者nagios.cfg所在的位置,因為就好像我們之前所說的,nagios是先讀進nagios.cfg之後,在依照nagios.cfg裡頭所指示的,一行一行的讀進來的緣故。

開始設定service