一、配置Nagios
成都創(chuàng)新互聯(lián)公司專注于祁東企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站定制開發(fā)。祁東網(wǎng)站建設(shè)公司,為祁東等地區(qū)提供建站服務(wù)。全流程按需開發(fā)網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
Nagios 主要用于監(jiān)控一臺或者多臺本地主機及遠程的各種信息,包括本機資源及對外的服務(wù)等。默認的Nagios 配置沒有任何監(jiān)控內(nèi)容,僅是一些模板文件。若要讓Nagios 提供服務(wù),就必須修改配置文件,增加要監(jiān)控的主機和服務(wù),下面將詳細介紹。弄清其所有的工作機理將它們搞定是絕對值得的。
Nagios 安裝完畢后,默認的配置文件在/usr/local/nagios/etc目錄下。我們在編譯的時候指定了
--sysconfdir=DIR, 所以我們的配置文件目錄為/etc/nagios。
主配置文件(nagios.cfg)
主配置文件包含了一系列的設(shè)置,它們會影響Nagios守護進程,不僅是Nagios守護進程要使用主配置文件,CGI程序組模塊也需要,因此,主配置文件是開始學(xué)習其他配置文件的基礎(chǔ)。
對象定義文件(objects/*.cfg)
對象定義文件用于定義主機、服務(wù)、主機組、服務(wù)組、聯(lián)系人、聯(lián)系人組、命令等等。這些將定義你需要監(jiān)控什么以及如何監(jiān)控它們。你可以在主配置文件里設(shè)置cfg_file 或者 cfg_dir來引用一個或多個對象定義文件。
1、配置文件的作用概述
備注:Nagios在配置方面非常靈活,默認的配置文件并不是必需的??梢允褂眠@些默認的配置文件,也可以創(chuàng)建自己的配置文件,然后在主配置文件nagios.cfg中引用即可。
實際應(yīng)用中,這些對象的配置文件我們可以自己命名,可以存放在任何位置,只要在nagios.cfg中引用即可。
2、配置文件之間的關(guān)系
在Nagios的配置過程中涉及到的幾個定義有:主機、主機組、服務(wù)、服務(wù)組、聯(lián)系人、聯(lián)系人組、時間段、命令等,從這些定義可以看出,nagios各個配置文件之間是互為關(guān)聯(lián),彼此引用的。
Nagios最重要的概念就是對象(object),以及繼承和引用,就是OOP的思想。
在Nagios定義了一些基本的對象:
我們定義一個被監(jiān)控的服務(wù),當然就要指定被監(jiān)控的主機,需要監(jiān)控的時間段,要用哪個命令來完成這個監(jiān)控操作,出了問題向哪個聯(lián)系人報告。所有這些對象絕對多數(shù)都是需要我們手動定義的,這就是nagios的安裝顯得復(fù)雜的地方.其實了解了原理,做一遍之后余下的工作就是復(fù)制粘貼了。
成功配置出一臺nagios監(jiān)控系統(tǒng),必須要弄清楚每個配置文件之間的依賴與被依賴的關(guān)系,最重要的有四點:
第一:定義監(jiān)控哪些主機、主機組、服務(wù)和服務(wù)組;
第二:定義這個監(jiān)控要用什么命令實現(xiàn);
第三:定義監(jiān)控的時間段;
第四:定義主機或服務(wù)出現(xiàn)問題時要通知的聯(lián)系人和聯(lián)系人組
3、自定義監(jiān)控目錄
默認情況下nagios.cfg會啟用一些對象配置文件,如:commands.cfg, conftacts.cfg, localhost.cfg等,為了更好的對Nagios平臺的管理和日后的維護工作,建議在Nagios配置文件目錄,自定義一個monitor目錄,用來保存所管理的被監(jiān)控對象。同時注釋nagios.cfg配置文件默認定義的對象配置文件,并添加 cfg_dir = /etc/nagios/monitor 即可。
創(chuàng)建hosts.cfg文件來定義主機和主機組
創(chuàng)建services.cfg文件來定義服務(wù)
用默認的contacts.cfg文件來定義聯(lián)系人和聯(lián)系人組
用默認的commands.cfg文件來定義命令
用默認的timeperiods.cfg來定義監(jiān)控時間段
用默認的templates.cfg文件作為資源引用文件
我們在nagios.cfg中添加cfg_dir=/etc/nagios/monitor 引入即可。Nagios的配置大多是對監(jiān)控對象配置文件進行修改配置,這里需要復(fù)制objects目錄下的所有對象配置文件模板,同時在monitor目錄下創(chuàng)建獨立的配置文件hosts.cfg和services.cfg來定義主機和服務(wù),至于聯(lián)系人和監(jiān)控的時間段,我們保持默認配置。
二、配置文件說明
1、nagios.cfg
nagios.cfg是核心的配置文件,所有的對象配置文件都必須在這個文件中進行定義才能發(fā)揮其作用,這里只需將對象配置文件在Nagios.cfg文件中引用即可。
當創(chuàng)建或編輯配置文件時,要遵守如下要求:
以符號‘#’開頭的行將視為注釋
變量必須是新起的一行,變量之前不能有空白符
變量名是大小寫敏感的
同shell一樣,‘=’ 兩邊都不能有空白符
cfg_file=
cfg_dir=
resource_file=
check_external_commands=<0/1>:這個選項在你希望通過web接口來運行CGI命令時必須打開它。
interval_length=
2、templates.cfg
nagios主要用于監(jiān)控主機資源以及服務(wù),在nagios配置中稱為對象,為了不必重復(fù)定義一些監(jiān)控對象,Nagios引入了一個模板配置文件,將一些共性的屬性定義成模板(類),以便于多次引用。這就是templates.cfg的作用。
3、commands.cfg
此文件是默認存在,如果有新的命令需要加入,在這個文件中添加即可。
4、localhost.cfg
localhost.cfg 文件是定義監(jiān)控主機本身的.
5、windows.cfg
windows.cfg 文件是定義windows 主機的
6、contacts.cfg
contacts.cfg是一個定義聯(lián)系人和聯(lián)系人組的配置文件,當監(jiān)控的主機或者服務(wù)出現(xiàn)故障,nagios會通過指定的通知方式(郵件或者短信)將信息發(fā)給這里指定的聯(lián)系人或者使用者。
7、 timeperiods.cfg
用于定義時間段。
8、cgi.cfg
此文件用來控制相關(guān)cgi腳本,如果想在nagios的web監(jiān)控界面執(zhí)行cgi腳本,例如重啟nagios進程、關(guān)閉nagios通知、停止nagios主機檢測等,這時就需要配置cgi.cfg文件了。
nagios默認情況下只有nagiosadmin才有權(quán)限執(zhí)行cgi腳本,其他用戶都沒有權(quán)限。由于nagios的web監(jiān)控界面驗證用戶為david,所以只需在cgi.cfg文件中添加此用戶的執(zhí)行權(quán)限就可以了,需要修改的配置信息如下:
default_user_name=david authorized_for_system_information=nagiosadmin,david authorized_for_configuration_information=nagiosadmin,david authorized_for_system_commands=david authorized_for_all_services=nagiosadmin,david authorized_for_all_hosts=nagiosadmin,david authorized_for_all_service_commands=nagiosadmin,david authorized_for_all_host_commands=nagiosadmin,david
9、resource.cfg
resource.cfg是nagios的環(huán)境變量定義文件,文件內(nèi)容只有一行
$USER1$=/usr/local/nagios/libexec # 定義插件目錄,不建議修改$USER1$的值。
# Nagios supports up to 32 $USERx$ macros ($USER1$ through $USER32$),環(huán)境變量必須先定義,然后才能在其他配置文件中進行引用。
在主配置文件nagios.cfg中,參數(shù)resource_file用于定義所有用戶變量(宏)的存儲文件,它用于存儲對象定義中的可以訪問的額外信息。這個文件的信息通常比較敏感,一般不允許通過web接口訪問。
理解Nagios宏及其工作機制
Nagios還能夠使用宏,并且宏的定義在整個Nagios系統(tǒng)中具有一致性。宏是能夠用于對象定義中變量,其值通常依賴于上下文。在“命令”中定義的宏,相對于主機、服務(wù)其值會隨之不同。通過定義宏,Nagios可以靈活的獲取主機、服務(wù)和其他對象的信息。
在執(zhí)行命令之前,Nagios將對命令中的宏替換為相應(yīng)的值。這種宏替換發(fā)生在Nagios執(zhí)行各種類型的宏的時候,如主機和服務(wù)的檢測、通知、事件處理等。
引用宏
$MACRO_NAME$
主機宏
$HOSTNAME$ # 主機簡稱。取自于主機定義里的host_name域 $HOSTADDRESS$ # 主機地址。取自于主機定義里的address域 $HOSTSTATE$ # 主機當前狀態(tài),UP,DOWN,UNREACHABLE三者之一 $HOSTGROUPNAME$ # 主機組名 $LASTHOSTCHECK$ # 上次檢測的時間戳 $LISTHOSTSTATE$ # 上一次檢測的狀態(tài),UP,DOWN,UNREACHABLE三者之一
服務(wù)宏
$SERVICESTATE$ # 服務(wù)狀態(tài)描述,有w,u,c $SERVICEDESC$ # 對當前服務(wù)的描述 $SERVICEGROUPNAMES$ # 服務(wù)組名
聯(lián)系人宏
$CONTACTNAME$ # 表示聯(lián)系人,在聯(lián)系人文件中定義,取自contact對象的contact_name $CONTACTALIAS$ # 取自contact對象的alias $CONTACTEMAIL$ # 取自contact對象的email
語法格式
各個配置文件中的name必須要是全局唯一的,所以每次在定義name的時候,最好使用grep看一下是否被定義。
宏的引用方式: $var_name$
# 'check_local_load' command definition define command{ command_name check_local_load command_line $USER1$/check_load -w $ARG1$ -c $ARG2$ } # $USER1$ 是一個宏 # $ARG1$, $ARG2$ 定義參數(shù)占位符, 相當于定義 "形參"
define service{ use local-service ; Name of service template to use host_name localhost service_description Current Load check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0 } # use 指令,用來指定使用哪個template # !用來傳遞參數(shù), 每一個 !表示一個參數(shù) # $ARG1$ == 5.0,4.0,3.0, $ARG2$ == 10.0,6.0,4.0 , 這里提供"實參"
三、實戰(zhàn)
1、自定義一個monitor目錄,然后修改主配置文件nagios.cfg
[root@localhost ~]# cd /etc/nagios [root@localhost nagios]# mkdir monitor [root@localhost nagios]# touch monitor/hosts.cfg [root@localhost nagios]# touch monitor/services.cfg [root@localhost nagios]# cp objects/*.cfg monitor/ ### 然后編輯nagios.cfg # 注釋掉下面幾行 #cfg_file=/etc/nagios/objects/commands.cfg # 命令配置文件 #cfg_file=/etc/nagios/objects/contacts.cfg # 聯(lián)系人配置文件 #cfg_file=/etc/nagios/objects/timeperiods.cfg # 監(jiān)視時段配置文件 #cfg_file=/etc/nagios/objects/templates.cfg # 模板 #cfg_file=/etc/nagios/objects/localhost.cfg # linux主機 # 添加 cfg_dir=/etc/nagios/monitor
改check_external_commands=0為check_external_commands=1 .這行的作用是允許在web界面下執(zhí)行重啟nagios、停止主機/服務(wù)檢查等操作
2、修改CGI腳本配置文件cgi.cfg
先確保use_authentication=1。曾看過不少的文章,都是建議把use_authentication的值設(shè)置成”0”來取消驗證,這是一個十分糟糕的想法。接下來修改default_user_name=nagiosadmin ,再后面的修改在下表列出
authorized_for_system_information=nagiosadmin,test authorized_for_configuration_information=nagiosadmin,test authorized_for_system_commands=nagiosadmin # 多個用戶之間用逗號隔開 authorized_for_all_services=nagiosadmin,test authorized_for_all_hosts=nagiosadmin,test authorized_for_all_service_commands=nagiosadmin,test authorized_for_all_host_commands=nagiosadmin,test
那么上述用戶名打那里來的呢?是執(zhí)行命令 htpasswd –c /usr/local/nagios/etc/htpasswd test 所生成的,這個要注意,不能隨便加沒有存在的驗證用戶,為了安全起見,不要添加過多的驗證用戶。
3、監(jiān)控時間段:timeperiods.cfg
我們可以根據(jù)實際需要進行修改,這里我保留默認的定義。注意:名稱全局唯一,不要有空格
4、定義命令
命令:用于描述如何對主機或服務(wù)進行狀態(tài)檢測
define command{ command_name check-host-alive ##command_name的名字必須全局唯一 command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5 } ## $USER1$/check_ping:引用宏$USER1$路徑下的一個叫check_ping的插件 ## -H $HOSTADDRESS$ :-H后跟主機地址,應(yīng)用到哪個對象上,就是那個主機的地址 ## -w 3000.0,80%:如果是80%的丟包率,延遲3s,就為警告狀態(tài) -w:警告,后跟達到警告的值,單位ms ## -c 5000.0,100% 如果有100%的丟包率,且延遲5s,就是危機狀態(tài) ## -p:一共檢測幾個包
5、聯(lián)系人: contacts.cfg
聯(lián)系人:用于定義某對象出現(xiàn)問題時接收通知的人
define contact{ contact_name test # 聯(lián)系人的名稱(全局唯一),這個地方不要有空格 alias sys admin service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notify-by-email host_notification_commands host-notify-by-email email yahoon@test.com pager 1338757xxxx address1 xxxxx.xyyy@icq.com address2 555-555-5555 }
### service_notification_period 24x7 # 服務(wù)出了狀況通知的時間段,這個時間段就是上面在timeperiods.cfg中定義的 ### host_notification_period 24x7 # 主機出了狀況通知的時間段, 這個時間段就是上面在timeperiods.cfg中定義的 ### service_notification_options w,u,c,r # 當服務(wù)出現(xiàn)w—報警(warning),u—未知(unkown),c—嚴重(critical),或者r—從異常情況恢復(fù)正常,# 在這四種情況下通知聯(lián)系人. ### host_notification_options d,u,r # 當主機出現(xiàn)d----—當機(down),u—返回不可達(unreachable),r—從異常情況恢復(fù)正常,在這3種情況下 # 通知聯(lián)系人 #####狀態(tài)及其表示符號######## w —— WARNING u —— UNKNOWN c —— CRITICAL r —— OK(recovery) f —— flapping s —— 調(diào)試宕機時間開始或結(jié)束 ### service_notification_commands notify-by-email # 服務(wù)出問題通知采用的命令notify-by-email,這個命令是在commands.cfg中定義的,作用是給聯(lián)系人# 發(fā)郵件.至于commands.cfg之后將專門介紹 ### host_notification_commands host-notify-by-email # 同上,主機出問題時采用的也是發(fā)郵件的方式通知聯(lián)系人 ### email your@test.com # 聯(lián)系的人email地址 ### pager 1338757xxxx # 聯(lián)系人的手機,如果支持短信的通知的話,這個就很有用了。
按照這種模式,簡單的復(fù)制修改即可創(chuàng)建聯(lián)系人了。
創(chuàng)建聯(lián)系人組:
define contactgroup{ contactgroup_name sagroup # 聯(lián)系人組的名稱,同樣不能空格 alias System Administrators # 別名 members test # members 組的成員,來自于上面定義的contacts.cfg,如果有多個聯(lián)系人則以逗號相隔 }
6、主機: hosts.cfg
主機:指的是被監(jiān)控的機器,可以是物理主機,也可以是虛擬設(shè)備。一個主機對象的定義至少應(yīng)該包含一個name,一個別名,一個IP地址,和用到的檢測命令
define host{ host_name nagios-server # 被監(jiān)控主機的名稱(全局唯一),最好別帶空格 alias nagios server # 別名 address 192.168.0.111 # 被監(jiān)控主機的IP地址 check_command check-host-alive # 監(jiān)控的命令check-host-alive,這個命令來自commands.cfg,用來監(jiān)控主機是否存活 max_check_attempts 5 # 檢查失敗后重試的次數(shù) check_period 24x7 # 檢查的時間段24x7,同樣來自于我們之前在timeperiods.cfg中定義的 contact_groups sagroup # 聯(lián)系人組,上面在contactgroups.cfg中定義的sagroup notification_interval 10 # 提醒的間隔,每隔10秒提醒一次 notification_period 24x7 # 提醒的周期, 24x7,同樣來自于我們之前在timeperiods.cfg中定義的 notification_options d,u,r # 指定什么情況下提醒,具體含義見之前contacts.cfg部分的介紹 } ######### define host{ use linux-server ## 引用模板 host_name localhost ## 主機名,全局唯一 alias localhost ## 別名 address 127.0.0.1 ## ip地址 }
創(chuàng)建主機組:
define hostgroup{ hostgroup_name sa-servers # 主機組名稱 alias sa Servers # 別名 members nagios-server # 組的成員主機,多個主機以逗號相隔,必須是上面hosts.cfg中定義的 }
7、服務(wù): services.cfg
服務(wù):及主機所提供的功能或資源對象,如HTTP服務(wù),存儲空間資源或CPU負載等。
假設(shè)我們現(xiàn)在要監(jiān)控一條機器的web服務(wù)是否正常,我們需要定義哪些對象呢?最重要的有三點:首先監(jiān)控哪臺主機(host),然后是這個監(jiān)控用什么命令實現(xiàn)(command),最后是除了問題通知給哪個聯(lián)系人(contact)。
define service{ host_name nagios-server # 被監(jiān)控的主機,hosts.cfg中定義的 service_description check-host-alive # 這個監(jiān)控項目的描述(也可以說是這個項目的名稱),可以空格,我們這里定義的是監(jiān)控這個主機是不是存活 check_command check-host-alive # 所用的命令,是commands.cfg中定義的 max_check_attempts 5 normal_check_interval 3 retry_check_interval 2 check_period 24x7 # 監(jiān)控的時間段,是timeperiods.cfg中定義的 notification_interval 10 notification_period 24x7 # 通知的時間段, ,是timeperiods.cfg中定義的 notification_options w,u,c,r # 在監(jiān)控的結(jié)果是wucr時通知聯(lián)系人,具體含義看前文. contact_groups sagroup # 聯(lián)系人組,是contactgroups.cfg中定義的 } ########### define service{ use local-service ## 引用模板 host_name localhost ## 先說明是在哪個主機上的服務(wù) service_description PING ##服務(wù)名不要求全局唯一的,只要在當前主機上唯一就可以 check_command check_ping!100.0,20%!500.0,60% ##說明使用的是check_ping命令 }
服務(wù)不能脫離主機而運行,所以定義服務(wù)時,必須要說明哪一個主機的服務(wù)。
上面使用的check_ping命令是在commands.cfg文件中定義的:
# 'check_ping' command definition define command{ command_name check_ping ##需事先定義好命令,然后再在服務(wù)中引用的 command_line $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5 } ## $HOSTADDRESS$:對應(yīng)于上面主機中的$HOSTADDRESS$就是127.0.0.1 ## 定義service時是有兩個參數(shù)!100.0,20%和!500.0,60%,就是把對應(yīng)的參數(shù)傳遞給command中的 # $ARG1$和$ARG2$
8、模板:templates.cfg
Nagios通過功能強大的繼承引擎來實現(xiàn)基于模板的對象繼承。這就意味著可以定義將某類型的對象其通用的屬性抽象為對象的模板,并在定義對象的時候直接從模板繼承相關(guān)屬性的定義。
從哪個模板繼承,就引用哪個模板。
9、對象間的依賴關(guān)系
為了描述Nagios對象間的依賴關(guān)系,這里提到兩個術(shù)語:master(被依賴的主機或服務(wù)), dependent(依賴于master的Nagios對象)
可以定義對象間的依賴關(guān)系,為某對象定義其父對象,也可以指定此依賴關(guān)系生效的時段。
## 如定義主機間的依賴關(guān)系: define hostdependency { dependent_host_name backuphost ##定義dependent主機 host_name ***server1 ##定義master主機 dependency_period maintenancewindows ##定義依賴時段 } ##服務(wù)間依賴關(guān)系的定義類似于主機間的依賴關(guān)系,例如: define servicedependency { host_name MySQLserver ##master主機名 service_description mysql ##master服務(wù)名 dependent_hostgroup_name apacheservers ##dependent主機組名 dependent_service_description webservice ##denpendent服務(wù)名 execution_failure_criteria c,u ##定義master為何種狀態(tài)時不再對依賴 ##于此master的主機或服務(wù)進行檢測, notification_failure_criteria c,u,w ##用于定義master處于何種狀態(tài)時不會 ##發(fā)送dependent相關(guān)的主機問題通知到聯(lián)系人 }
10、驗證Nagios配置文件的正確性
[root@localhost ~]# /usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg # 如果看到以下信息,說明配置沒有問題,就可以重啟nagios服務(wù)了 Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
Nagios提供的這個驗證功能非常有用,在錯誤信息中通常會打印出錯誤配置文件名以及文件的哪一行出錯,這使得我們排查問題變得簡單。