nagios初步功能配置及執行
偽技術人員的成長曆程之36-Nagios的初步功能配置及執行
在這一話中,主要交待的是Nagio的初步功能配置,並如何讓Nagios初步地順利執行起來。昨天搞Nagios主配置檔案搞過半夜,今天10點起的床,十一的好好利用果然沒有錯啊,可以放肆大膽地搞一些研究,完全不用擔心第二天上班的事情,太和諧了。
注意,這裡基本上有兩種處理Nagios系統配置的方式,第一種就是在主配置檔案裡把每類不同的配置以指定不同的配置檔案的方式分開寫和管理。第二種就是在主配置檔案裡只指定一個配置檔案並且把所有的配置專案全都集中在這一個配置檔案當中。相比之下,第一種的方式可能比較繁瑣,但是在Nagios系統結構不斷擴大的時候,分開管理規劃的重要性也就越體現出來。這裡我先使用第一種分開配置檔案的方法來進行Nagios的配置。
一.對Nagios的主配置檔案進行配置:
[[email protected] ~]# vi /etc/nagios/nagios.cfg
----------------------------------------------------
log_file=/var/log/nagios/nagios.log
設定Nagios的主日誌檔案路徑。
cfg_file=/etc/nagios/commands.cfg
設定命令配置檔案路徑。
#cfg_file=/etc/nagios/localhost.cfg
將本地主機配置檔案注視掉,這個就是之前說的所有配置項集中在一起的完整配置檔案,它相當於把所有的hosts、commands、services等各個配置檔案寫在一了起,這裡我不用這個集中配置檔案,而是一個個把這些配置分開。
cfg_file=/etc/nagios/hosts.cfg
設定需要監控的主機的配置檔案路徑。預設這條配置項是註釋掉的並且Nagios預設也沒有此配置檔案。這裡需要解注該項並且在/etc/nagios/主配置路徑下手動建立該配置檔案。
cfg_file=/etc/nagios/timeperiods.cfg
設定時間段定義配置檔案路徑。預設這條配置項是註釋掉的並且Nagios預設也沒有此配置檔案。這裡需要解注該項並且在/etc/nagios/主配置路徑下手動建立該配置檔案。
cfg_file=/etc/nagios/services.cfg
設定需要監控的服務的配置檔案路徑。預設這條配置項是註釋掉的並且Nagios預設也沒有此配置檔案。這裡需要解注該項並且在/etc/nagios/主配置路徑下手動建立該配置檔案。
resource_file=/etc/nagios/resource.cfg
設定資源配置檔案路徑。
# check_external_commands=0
check_external_commands=1
啟用檢測外部命令。預設是不啟用的,為了讓Nagios配合Apache進行管理和操作,需要啟用該項。
command_check_interval=15s
#command_check_interval=-1
命令檢測間隔,這裡起用15秒的這條而將預設的-1的這條註釋掉,由於-1表示Nagios儘可能頻繁進行檢測可能會對系統資源帶來巨大的負擔,因此改為15秒一次可能比較合適。
nagios_user=nagios
nagios_group=nagios
指定Nagios的宿主使用者和組,就使用預設的nagios使用者和組。如果系統沒有的話請手動useradd nagios。
---------------------------------------------------
二.對CGI配置檔案進行配置:
在主配置檔案當中我們指定了CGI配置檔案是/etc/nagios/cgi.cfg,預設下這個檔案是有的,需要進行配置。
[[email protected] ~]# vi /etc/nagios/cgi.cfg
---------------------------------------------------
main_config_file=/etc/nagios/nagios.cfg
指定Nagios的主配置檔案的路徑。
physical_html_path=/usr/share/nagios
指定Nagios網頁的主路徑。
url_html_path=/nagios
指定外部通過Web訪問Nagios時使用的URL路徑。
use_authentication=1
啟用身份驗證:CGI顯示關於主機和服務的資訊資料的時候是否也需要起用一些身份驗證。
authorized_for_system_commands=nagiosadmin,kanecruise
針對系統命令資訊的授權身份,多個使用者用逗號分開。這裡可以新增的使用者身份不是Linux系統使用者,而是之前使用htpasswd新增使用者。
authorized_for_all_services=nagiosadmin,guest,kanecruise
針對所有服務資訊的授權身份,多個使用者用逗號分開。這裡可以新增的使用者身份不是Linux系統使用者,而是之前使用htpasswd新增使用者。
authorized_for_all_hosts=nagiosadmin,guest,kanecruise
針對所有主機資訊的授權身份,多個使用者用逗號分開。這裡可以新增的使用者身份不是Linux系統使用者,而是之前使用htpasswd新增使用者。
authorized_for_all_service_commands=nagiosadmin,kanecruise
針對所有服務命令資訊的授權身份,多個使用者用逗號分開。這裡可以新增的使用者身份不是Linux系統使用者,而是之前使用htpasswd新增使用者。
authorized_for_all_host_commands=nagiosadmin,kanecruise
針對所有主機命令資訊的授權身份,多個使用者用逗號分開。這裡可以新增的使用者身份不是Linux系統使用者,而是之前使用htpasswd新增使用者。
---------------------------------------------------
三.配置時間段定義檔案:
在主配置檔案當中我們指定了時間段定義檔案是/etc/nagios/timeperiods.cfg,預設安裝好沒有這個檔案的,請手動建立並按照以下格式配置。
[[email protected] ~]# vi /etc/nagios/timeperiods.cfg
---------------------------------------------------
###############################################################################
###############################################################################
#
# TIME PERIODS
#
###############################################################################
###############################################################################
define timeperiod {
首先以define關鍵字表示定義的開始,然後跟上配置物件名,這裡timeperiod是讓Nagios明白你接下去要配置的是時間引數段。段內的定義請使用兩個大括號來包括。段內的定義項一行一項,時間格式請按照以下。另外,如果要定義多個時間段的話,那麼必須要寫多個define timeperiod {} 段。
timeperiod_name full_period
設定時間段名timeperiod_name後面跟上自己定義時間段名,注意定義過的段名就不能在其他地方使用相同的時間段名重複定義了,否則會報錯。
alias 24 hours per day and 7 days per week
設定alias來定義時間段名的別名,後面一般跟上的是註解。
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
以上這些就是定義時間的格式。
}
最後別忘記用大括號補尾。
---------------------------------------------------
四.配置聯絡人定義檔案:
在主配置檔案當中我們指定了時間段定義檔案是/etc/nagios/contacts.cfg,預設安裝好沒有這個檔案的,請手動建立並按照以下格式配置。
[[email protected] ~]# vi /etc/nagios/contacts.cfg
---------------------------------------------------
###############################################################################
###############################################################################
#
# CONTACTS
#
###############################################################################
###############################################################################
define contact {
首先我們來定義聯絡人。同樣,使用define關鍵字來定義段名。後面用一對大括號來定義段內的配置。另外,如果要定義多個聯絡人的話,那麼必須要寫多個define contact{} 段。
contact_name kanecruise
設定聯絡使用者名稱,這裡的聯絡使用者是在htpasswd中新增的使用者。
alias Kane Cruise
設定使用者名稱的別名,這裡一般是交代聯絡使用者的身份或者名字的全稱。
service_notification_period full_period
設定服務事件通知時段,這裡後面跟的引數為定義過的timeperiods的時間段名。
host_notification_period full_period
設定主機事件通知時段,這裡後面跟的引數為定義過的timeperiods的時間段名。
service_notification_options w,u,c,r
設定觸發服務事件通知的選項,這裡後面跟上一些級別型別引數:
w代表warning告警;
u代表unreachable不可達;
c代表critical嚴重;
r代表recover恢復;
d代表down奔潰。
host_notification_options d,u,r
設定觸發主機通知訊息的選項,後面也跟上級別型別引數。
service_notification_commands notify-by-email
設定服務觸發通知命令,後面的命令notify-by-email是在commands.cfg命令配置檔案中定義過的,傳送電子郵件。
host_notification_commands host-notify-by-email
設定主機觸發通知命令,同樣的後面的命令引數必須是在命令配置檔案當中定義過的才行,這裡也是傳送電子郵件。
email [email protected]
設定傳送的電子郵件地址。
}
最後別忘記用大括號補尾。
define contact{
contact_name kc2
alias Kane Cruise
service_notification_period full_period
host_notification_period full_period
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 [email protected]
}
define contact{
contact_name kc3
alias Kane Cruise
service_notification_period full_period
host_notification_period full_period
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 [email protected]
###############################################################################
###############################################################################
#
# CONTACT GROUPS
#
###############################################################################
###############################################################################
define contactgroup{
接著我們來定義聯絡人組。同樣,使用define關鍵字來定義段名。後面用一對大括號來定義段內的配置。另外,如果要定義多個聯絡人組的話,那麼必須要寫多個define contactgroup{} 段。
contactgroup_name admins
設定聯絡人組名
alias Nagios Administrators
設定聯絡人組名的別名,這裡一般可以寫上一些較詳細的資訊。
members kanecruise,kc2,kc3
設定組成員,這裡的成員必須都是通過htpasswd新增過的,並且都要在contact裡定義過的聯絡人名才行,多個聯絡人用逗號分隔。
}
最後別忘記用大括號補尾。
---------------------------------------------------
五.配置檢測目標主機定義檔案:
在主配置檔案當中我們指定了時間段定義檔案是/etc/nagios/hosts.cfg,預設安裝好沒有這個檔案的,請手動建立並按照以下格式配置。
[[email protected] ~]# vi /etc/nagios/hosts.cfg
---------------------------------------------------
###############################################################################
###############################################################################
#
# HOSTS
#
###############################################################################
###############################################################################
define host{
通過define關鍵字host來定義檢測目標主機的配置段。另外,如果要定義多個目標主機的話,那麼必須要寫多個define host{} 段。
host_name KCentOS5A
設定host_name來定義目標主機的主機名。
alias Kane Cruise CentOS 5.0 Nagios Server
設定主機名的別名,這裡一般是寫上該主機的詳細資訊。
address 192.168.1.10
設定該主機的IP地址。
check_command check-host-alives
設定檢測命令,注意該命令必須是在commands.cfg命令配置檔案當中定義過的才行。
max_check_attempts 10
設定檢測失敗後的最大嘗試次數。
notification_interval 15
設定事件檢測通知的間隔。
notification_period full_period
設定事件檢測通知的工作時期,後面跟上我們之前在timeperiodd定義過的時間段,這個時間段值必須是被定義過的。
notification_options d,r,u
設定觸發通知的事件選項。這裡後面跟上一些級別型別引數:
w代表warning告警;
u代表unreachable不可達;
c代表critical嚴重;
r代表recover恢復;
d代表down奔潰。
contact_groups admins
設定聯絡人組,後面的組名必須是在相關的配置檔案當中定義過的才行。
}
最後別忘記用大括號補尾。
define host{
host_name KCXP1
alias Kane Cruise test Windows XP Client
address 192.168.1.9
check_command check-host-alive
max_check_attempts 10
notification_interval 15
notification_period full_period
notification_options d,r,u
contact_groups admins
}
define host{
host_name localhost
注意,儘量要定義一個localhost的主機,否則容易引起出錯。因為有很多命令就是本地檢測的,會自動找localhost的關鍵字主機。所以一定要不要忘記設定。
alias localhost
address 127.0.0.1
check_command check-host-alive
max_check_attempts 5
notification_interval 10
notification_period full_period
notification_options d,r,u
contact_groups admins
}
###############################################################################
###############################################################################
#
# HOST GROUPS
#
###############################################################################
###############################################################################
define hostgroup{
通過define關鍵字hostgroup來定義檢測目標主機組的配置段。另外,如果要定義多個組的話,那麼必須要寫多個define hostgroup{} 段。
hostgroup_name nagiosgroup1
設定目標主機組的組名。
alias Nagios Object Test Hostgroup1
設定目標主機組的別名,這裡一般也是用來寫一些主機組的資訊。
members KCentOS5A,KCXP1
設定該主機組的主機成員,這些必須都是hosts段裡定義過的主機名,多個主機用逗號分隔開來。
}
最後別忘記用大括號補尾。
---------------------------------------------------
六.配置檢測目標服務定義檔案:
在主配置檔案當中我們指定了時間段定義檔案是/etc/nagios/services.cfg,預設安裝好沒有這個檔案的,請手動建立並按照以下格式配置。
[[email protected] ~]# vi /etc/nagios/services.cfg
---------------------------------------------------
###############################################################################
###############################################################################
#
# SERVICES
#
###############################################################################
###############################################################################
# Define service to "ping"
首先這裡定義一個Ping的主機檢測服務。
define service{
通過define關鍵字service來定義檢測目標服務的配置段。另外,如果要定義多個檢測服務的話,那麼必須要寫多個define service{} 段。
host_name KCentOS5A,KCXP
設定檢測該服務的目標主機,這裡通過註冊主機名來填寫,也就是說這些主機名必須是在主機定義檔案當中定義過的名字,多個主機的話,用逗號分開。
service_description PING
設定服務描述。這裡的主要簡略交待下目標服務的說明的就可以了。
is_volatile 0
設定是否為易失,設定0位非易失。
check_period full_period
設定服務檢測工作時間,這裡後面跟的引數為定義過的timeperiods的時間段名。
max_check_attempts 5
設定檢測失敗後的最大嘗試次數。
normal_check_interval 10
設定正常檢測的時間間隔,單位為秒。
retry_check_interval 3
設定檢測失敗後嘗試重新檢測之間時間間隔,單位為秒。
contact_groups admins
設定聯絡組名,這裡的聯絡組名必須是在contactgroup中定義過的,多個聯絡組名用逗號分開。
notification_interval 15
設定事件通知的間隔,單位是秒。
notification_period full_period
設定事件通知的工作時間,這裡後面跟的引數為定義過的timeperiods的時間段名。
check_command check_ping!100.0,20%!500.0,60%
設定相關使用到的命令和引數,這裡的命令必須是commands.cfg命令定義檔案中定義過的命令。
}
最後別忘記用大括號補尾。
以下是一些本地系統的檢測,注意,這些檢測命令都是用於Nagios伺服器本地的系統檢測的,所以檢測主機物件不可以是localhost以外的主機。
# Define a service to check the disk space of the root partition
# on the local machine. Warning if < 20% free, critical if
# < 10% free space on partition.
接著定義檢測根本地磁碟分割槽的服務檢測。並且設定當剩餘空間小於20%時產生告警,在小於10%產生嚴重警告。
define service{
host_name localhost
service_description Root Partition
is_volatile 0
check_period full_period
max_check_attempts 4
normal_check_interval 10
retry_check_interval 5
contact_groups admins
notification_interval 15
notification_period full_period
check_command check_local_disk!20%!10%!/
}
# Define a service to check the number of currently logged in
# users on the local machine. Warning if > 20 users, critical
# if > 50 users..
定義檢測當前登入到本地系統的使用者數量的檢測服務。並且當大於20個使用者的時候產生告警,在大於50個使用者的時候產生嚴重警告。
define service{
host_name localhost
service_description Current Users
is_volatile 0
check_period full_period
max_check_attempts 4
normal_check_interval 5
retry_check_interval 3
contact_groups admins
notification_interval 15
notification_period full_period
check_command check_local_users!20!50
}
# Define a service to check the number of currently running procs
# on the local machine. Warning if > 250 processes, critical if
# > 400 users.
定義檢測當前本地系統程序數的檢測服務。並且當程序數多於250的時候產生告警,在多於400個程序的時候產程嚴重警告。
define service{
host_name localhost
service_description Total Processes
is_volatile 0
check_period full_period
max_check_attempts 4
normal_check_interval 10
retry_check_interval 3
contact_groups admins
notification_interval 20
notification_period full_period
check_command check_local_procs!250!400
}
# Define a service to check the load.
定義檢測本地系統負載的檢測服務。
define service{
host_name localhost
service_description Current Load
is_volatile 0
check_period full_period
max_check_attempts 4
normal_check_interval 8
retry_check_interval 3
contact_groups admins
notification_interval 15
notification_period full_period
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
---------------------------------------------------
七.測試啟動Nagios服務:
1.第一次測試發生了問題
[[email protected] ~]# service nagios start
Starting nagios:CONFIG ERROR! Start aborted. Check your Nagios configuration.
這第一次我的啟動是失敗的,它提示說配置錯誤,退出啟動,要仔細檢查配置檔案。
察看日誌資訊:
[[email protected] ~]# cat /var/log/messages
---------------------------------------------------
Oct 2 14:25:56 KCentOS5A nagios: Warning: Return code of 127 for check of service 'Current Load' on host 'localhost' was out of bounds. Make sure the plugin you're trying to run actually exists.
Oct 2 14:26:56 KCentOS5A nagios: Warning: Return code of 127 for check of service 'Current Users' on host 'localhost' was out of bounds. Make sure the plugin you're trying to run actually exists.
告警說Current Load和Current User的檢測服務找不到localhost這個物件。
---------------------------------------------------
然後按照提示我到hosts.cfg檔案裡檢查了一下,原來是localhost這個主機我沒有新增。於是趕緊添加了主機物件localhost。
2.順利啟動Nagios
[[email protected] ~]# service nagios start
Starting nagios: done.
察看nagios的程序:
[[email protected] ~]# ps aux |grep nagios
---------------------------------------------------
nagios 4716 0.0 0.5 27300 1332 ? Ssl 14:43 0:00 /usr/bin/nagios -d /etc/nagios/nagios.cfg
nagios 4778 0.0 1.0 7568 2740 ? S 14:48 0:00 send-mail -i [email protected]
nagios 4784 0.0 1.0 7572 2740 ? S 14:48 0:00 send-mail -i [email protected]
nagios 4795 0.1 1.0 7568 2744 ? S 14:49 0:00 send-mail -i [email protected]
nagios 4801 0.0 0.3 27304 956 ? S 14:50 0:00 /usr/bin/nagios -d /etc/nagios/nagios.cfg
nagios 4802 0.0 0.0 0 0 ? Z 14:50 0:00 [sh] <defunct>
nagios 4805 0.4 1.0 7564 2736 ? S 14:50 0:00 send-mail -i [email protected]
root 4809 0.0 0.2 3884 664 pts/0 R+ 14:50 0:00 grep nagios
---------------------------------------------------
4.順利關閉Nagios
[[email protected] ~]# service nagios stop
Stopping nagios: .done.
到這裡,關於Nagios的初步配置已經好了,並且Nagios能夠正常啟動,但是Nagios的許多附加功能,以及各種外掛功能都沒有發揮出來。至於這些我將在下篇講吧。累...= =