全部博文(1144)
分类: LINUX
2007-11-06 17:07:38
伪技术人员的成长历程之36-Nagios的初步功能配置及运行
在这一话中,主要交待的是Nagio的初步功能配置,并如何让Nagios初步地顺利运行起来。昨天搞Nagios主配置文件搞过半夜,今天10点起的床,十一的好好利用果然没有错啊,可以放肆大胆地搞一些研究,完全不用担心第二天上班的事情,太和谐了。
注意,这里基本上有两种处理Nagios系统配置的方式,第一种就是在主配置文件里把每类不同的配置以指定不同的配置文件的方式分开写和管理。第二种就是在主配置文件里只指定一个配置文件并且把所有的配置项目全都集中在这一个配置文件当中。相比之下,第一种的方式可能比较繁琐,但是在Nagios系统结构不断扩大的时候,分开管理规划的重要性也就越体现出来。这里我先使用第一种分开配置文件的方法来进行Nagios的配置。
一.对Nagios的主配置文件进行配置:
[root@KCentOS5A ~]# 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,默认下这个文件是有的,需要进行配置。
[root@KCentOS5A ~]# 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,默认安装好没有这个文件的,请手动创建并按照以下格式配置。
[root@KCentOS5A ~]# 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,默认安装好没有这个文件的,请手动创建并按照以下格式配置。
[root@KCentOS5A ~]# 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
设定发送的电子邮件地址。
}
最后别忘记用大括号补尾。
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
}
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
###############################################################################
###############################################################################
#
# CONTACT GROUPS
#
###############################################################################
###############################################################################
define contactgroup{
接着我们来定义联系人组。同样,使用define关键字来定义段名。后面用一对大括号来定义段内的配置。另外,如果要定义多个联系人组的话,那么必须要写多个define contactgroup{} 段。
contactgroup_name admins
设定联系人组名
alias Nagios Administrators
设定联系人组名的别名,这里一般可以写上一些较详细的信息。
members kanecruise,kc2,kc3
设定组成员,这里的成员必须都是通过htpasswd添加过的,并且都要在contact里定义过的联系人名才行,多个联系人用逗号分隔。
}
最后别忘记用大括号补尾。
---------------------------------------------------
五.配置检测目标主机定义文件:
在主配置文件当中我们指定了时间段定义文件是/etc/nagios/hosts.cfg,默认安装好没有这个文件的,请手动创建并按照以下格式配置。
[root@KCentOS5A ~]# 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,默认安装好没有这个文件的,请手动创建并按照以下格式配置。
[root@KCentOS5A ~]# 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.第一次测试发生了问题
[root@KCentOS5A ~]# service nagios start
Starting nagios:CONFIG ERROR! Start aborted. Check your Nagios configuration.
这第一次我的启动是失败的,它提示说配置错误,退出启动,要仔细检查配置文件。
察看日志信息:
[root@KCentOS5A ~]# 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
[root@KCentOS5A ~]# service nagios start
Starting nagios: done.
察看nagios的进程:
[root@KCentOS5A ~]# 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
nagios 4784 0.0 1.0 7572 2740 ? S 14:48 0:00 send-mail -i
nagios 4795 0.1 1.0 7568 2744 ? S 14:49 0:00 send-mail -i
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]
nagios 4805 0.4 1.0 7564 2736 ? S 14:50 0:00 send-mail -i
root 4809 0.0 0.2 3884 664 pts/0 R+ 14:50 0:00 grep nagios
---------------------------------------------------
4.顺利关闭Nagios
[root@KCentOS5A ~]# service nagios stop
Stopping nagios: .done.
到这里,关于Nagios的初步配置已经好了,并且Nagios能够正常启动,但是Nagios的许多附加功能,以及各种插件功能都没有发挥出来。至于这些我将在下篇讲吧。累...= =