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