1. 程式人生 > >nagios初步功能配置及執行

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的許多附加功能,以及各種外掛功能都沒有發揮出來。至於這些我將在下篇講吧。累...= =