Nagios配置文件
Nagios有多個不同的配置文件,用于不同的配置目的。要搞懂和配置Nagios設(shè)置,是一個比較花費時間的事情。作為初學者的你,一旦弄懂了這些配置是怎樣工作的,那么你后面將會更加高效和值得。
Note: 如果你是按照我的安裝文檔中的快速安裝指導安裝的nagios,那么樣例配置文件都被存放在路徑/usr/local/nagios/etc/目錄下。
大致有四類配置文件:1. Main config 2. cgi config 3. resource file 4. object definition file.
配置文件介紹
配置文件和程序之間的關(guān)系圖
引用來自官方文檔,可以記在心中,相當于有了一層組織架構(gòu)。

圖內(nèi)容說明:Nagios Daemon就是Nagios核心服務,CGI可以說是可執(zhí)行程序,可以讀取http請求的內(nèi)容并響應給請求方。4個配置文件將在下面進行介紹。
Main Config File
主配置文件,里面有很多指令,指示不同的配置信息。
Nagios Daemon和CGI程序都會讀取,不過CGI程序是通過讀取CGI Config file中的引用來知道Main Config的路徑的。
從圖中也看出,從Main Config 可以知道REsource file和 object Definition file。
這也是我們學習配置Nagios的配置的起始地。
詳細文檔main config file doc
文件通常名字是nagios.cfg 位于/usr/local/nagios/etc/目錄下
CGI Config File
這是CGI相關(guān)的配置文件,里面配置的指令,是用于指導CGI程序的。其中包含了一個指令用于指示引用Main Config File的位置,同時也間接知道了object 定義。
詳細文檔cgi config file doc
Resource Config File
存儲了用戶自定義的宏。該文件的一個主要用途就是存儲用戶的敏感信息,包括密碼。該文件不需要給CGI看到或訪問到。
在main中通過resource_file指令進行指定。
Object Definition File
該文件首先是定義了:
- hosts
- services
- hostgroups
- contacts
- contactgroups
- commands
等等
這里就是定義了你所有要監(jiān)控的東西的定義,和怎么監(jiān)控他們。是不是有點像定義使用類初始化對象。
在main中通過cfg_file or cfg_dir 指定
詳細介紹object definition file doc
配置文件語法說明
- '#' 開頭的是備注
- 指令變量名必須是行首開始,空格是不予許的
- 大小寫敏感
- 對于指令變量值是路徑的,分為絕對路徑和相對路徑,相對路徑是相對當前main文件作為參照路徑。
- 分號;后的字符也是注釋
核心配置詳解
Object相關(guān)配置
我們都知道,一套系統(tǒng)要管理控制很多東西,首先是要對控制的東西進行抽象再按照格式定義落地下來。類似oop中的封裝。同時為了更好的管理這些封裝的對象,產(chǎn)生繼承關(guān)系是必要的,通過繼承不僅可以讓子類繼承一些東西,還可以通過繼承這種關(guān)系控制其某些行為。定義好很多類型后,類型之間還有一些相似的共通的特點,將這些共通的特點也要表現(xiàn)出來,這樣使用方就可以通過這些共通的特點來統(tǒng)一訪問使用這些對象,多個種共通特點,使用方就可以在多個共同點維度來管理訪問這些對象。這就是oop中的多態(tài),具體表現(xiàn)就是接口的定義。實現(xiàn)了接口,就表現(xiàn)出一種共通特性。從而將異構(gòu)的對象進行在必要的維度上統(tǒng)一管理了。
還有不要忘記了定義好的東西存儲持久化到哪里呢?核心定義肯定是在代碼文件里落地,但是怎么要讓在我們核心代碼基礎(chǔ)上用戶自定義東西,我們代碼再從中讀取來擴展,那么就可以用配置文件或者結(jié)構(gòu)化數(shù)據(jù)(數(shù)據(jù)庫數(shù)據(jù))來存儲。這也體現(xiàn)了oop非常重要的序列化和反序列化來保存或讀取對象狀態(tài)了。
高談闊論后,思想指導后,我們就按照這個思想指導,看看nagios是怎樣對應思想指導中的一些東西的
- object在配置文件中的定義語法是
define host{
host_name nagios_server_001
check_command check-host-alive
}
這里定義了一個host類型的子類。應該說host相當于一個抽象類,會約束定義的這個子類必須定義必要的屬性。
- 當然object可以繼承自定義的其它host類,可以看做是多層繼承
define host {
host_name host1
check_command check-host-alive
name host1template # name表明該子類可以作為一個可繼承的類
}
define host {
host_name host2
check_command check-host-alive
use host1 # 這里可以看做是host2繼承了抽象類host,又繼承了host1這個。但是他兩個都是繼承了host這個抽象類才行。這樣理解比較好。
}
-
object的本地變量會覆蓋同名的繼承變量
則很好理解,如題意。
-
當然繼承也是鏈式的
也就是說,父親的父親的變量也會繼承下來
-
把共通的默認變量放到父類中,來統(tǒng)一管理共通屬性。
-
group 組的概念,無論host還是contact還是service都有一個對應的gourp,像host group/contact group
這些組里面,有個列表類型的變量,存儲了host的引用。這里面的host都是都會被統(tǒng)一訪問,說明host都有相同的接口,體現(xiàn)了部分多態(tài)特性。
-
自定義變量屬性
可以自定義變量屬性,就是在定義的屬性前加上_開頭
define host {
_customvar1 10 ; 自定義一個屬性
_snmp_community pulic ; 自定義的第二個屬性
name custometemplate1
register 0 ; 注意這里是不會被加載到內(nèi)存中使用的。
}
define host {
host_name bighost1
address 10.10.1.1
use customertemplate1 ; 這里就繼承了自定義類,也有了自定義類的自定義屬性。
8.如果有不想繼承某個屬性,自己本地又用不上,那么本地對應設(shè)置為null值
9.如果要繼承和本地的屬性的值都要使用可以在本地值前使用+好來合并一個列表
-
nagios特有的跳出傳統(tǒng)繼承關(guān)系的繼承規(guī)則。
將關(guān)聯(lián)組合的對象中的屬性變量值拿來用。而不需要顯示的引用組合對象名。如果services 類型關(guān)聯(lián)了host類型,那么service可能就會使用host中的變量。從需求上這樣設(shè)計很好理解,比如說服務所要用的contact,可以從host中拿去。
-
在use 后可以設(shè)置多個繼承,使用,號間隔,如果多個繼承有相同屬性,那么靠前的優(yōu)先級高。且繼承是深度優(yōu)先的。

CGI 的配置
CGI是nagios操作的入口,大多數(shù)時候我們通過cgi程序來調(diào)用命令。
主要介紹里面幾個關(guān)鍵的配置
- use_authentication 用于配置cgi調(diào)用時,是否進行用戶身份認證,強力建議設(shè)置認證。不然,確定刪除了命令性CGI,避免沒有被認證用戶觸發(fā)命令的執(zhí)行。雖然當關(guān)閉認證后cgi是不會觸發(fā)命令的,但是為了安全還是按照說的做。
cgi的安全設(shè)置是非常重要的,畢竟cgi通過web是對外暴露的,如果不進行認證等安全限制,那么網(wǎng)絡都可以執(zhí)行相關(guān)cgi,是非常危險的。
驗證Nagios Core 配置可用性
修改了配置文件,不知道配置文件是否格式或語法或配置是否正確,可以通過ngios -V path_of_nagios_config 來驗證。
命令你可以檢測出錯誤,或者警告。
|