一、配置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来定义主机和服务,至于联系人和监控的时间段,我们保持默认配置。
二、配置文件说明
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
此文件是默认存在,如果有新的命令需要加入,在这个文件中添加即可。
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、停止主机/服务检查等操作
先确保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
我们可以根据实际需要进行修改,这里我保留默认的定义。注意:名称全局唯一,不要有空格
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,如果有多个联系人则以逗号相隔
}
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中定义的
}
服务:及主机所提供的功能或资源对象,如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$
从哪个模板继承,就引用哪个模板。
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
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。