Nagios配置介绍

一.前言

要想成功的配置一台Nagios,就必须熟悉其配置文件之间的关系,以及各配置文件的语法。

二.Nagios的配置文件:

Nagios安装后有几种常用的配置文件,分别是:主配置文件、CGI配置文件、资源定义文件、对象定义文件。

1.主配置文件(nagios.cfg):

Nagios的主配置文件是用来定义Nagios服务的基本参数信息的,其中包括:对象定义文件的声明、CGI配置文件的声明、资源定义文件的声明等。其常用参数如下:

#常用参数详解
log_file=/usr/local/nagios/var/nagios.log                        #日志文件
cfg_file=/etc/nagios/objects/commands.cfg                        #命令定义文件
resource_file=/etc/nagios/resource.cfg                           #资源(宏)定义文件
status_file=/usr/local/nagios/var/status.dat                     #Nagios状态文件,获取到的监控信息存在该文件中,CGI就展示该文件信息
status_update_interval=10                                        #状态文件多少秒更新一次
nagios_user=nagios                                               #nagios服务的运行者
nagios_group=nagios                                              #nagios服务的运行组
check_external_commands=1                                        #是否允许CGI执行外部脚本(是否允许通过Web做一些监控管理操作)
command_check_interval=-1                                        #外部命令检测间隔,-1代表尽可能多的检测,这个值的时间单位依赖于interval_length值
interval_length=60                                               #设定时间单位长度,默认为60s
command_file=/usr/local/nagios/var/rw/nagios.cmd                 #命令定义文件
external_command_buffer_slots=4096                               #外部命令缓冲区大小,从命令定义文件读取过来命令但Nagios进程还没处理所存放的位置
enable_notifications={1|0}                                       #Nagios是否启用通知功能,1表示启用通知,0表示关闭通知。
service_check_timeout=60                                         #设定服务检测命令的执行超时时长,一般是插件出问题超时
host_check_timeout=30                                            #设定主机检测命令的执行超时时长,一般是插件出问题超时
notification_timeout=30                                          #设定通知命令的执行超时时长,一般是插件出问题超时
execute_service_checks={1|0}                                     #设定Nagios是否启用主动服务检测机制,1表示启用,0表示关闭。
accept_passive_service_checks={1|0}                              #设定Nagios是否接受被动服务检测的结果,1表示接受,0表示拒绝。
execute_host_checks={1|0}                                        #设定Nagios是否启用主动主机检测机制,1表示启用,0表示关闭。
accept_passive_host_checks={1|0}                                 #设定Nagios是否接受被动主机检测的结果,1表示接受,0表示拒绝。
enable_event_handlers=1                                          #设定Nagios是否启用时间处理机制,1表示启用,0表示关闭。
log_rotation_method={n|h|d|w|m}                                  #指定日志滚动方法,日志滚动就是将日志分开,n代表不做日志回滚

2.CGI配置文件(cgi.cfg):

CGI配置文件是用来定义Nagios在提供Web接口的CGI的配置,例如网页目录、认证用户等等。CGI的配置在主配置文件也有一部分。其常用参数:

#常用参数
main_config_file                              #主配置文件是哪个
physical_html_path=/usr/local/nagios/share    #网页目录
url_html_path=/nagios                         #URL路径
use_authentication=1                          #是否启用认证
use_ssl_authentication=0                      #认证是否启用SSL加密

#认证各权限相关,nagiosadmin是CGI用户
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin

3.资源定义文件(resource.cfg):

资源定义文件用来定义Nagios的配置文件中的宏,"宏"就是一类常量,其可以灵活的引用到不同监控对象获得不同值(一旦获得值后就不可修改),Nagios支持用户自定义32个宏,从$USER1~$USER32$。CGI程序不会读取资源定义文件,所以除了宏外,还可以在其中定义一些敏感信息,例如访问某服务的密码等,从而避免这些敏感信息被展示到Web接口上。

资源定义文件中默认只有一行宏定义:

$USER1$=/usr/local/nagios/libexec             #定义$USER1$宏是/usr/local/nagios/libexec

除了自定义宏外,Nagios还内置了很多宏,常见的:

HOSTNAME:           #用于引用host_name指定所定义的主机的主机名;每个主机的主机名都是唯一的;
HOSTADDRESS:        #用于引用host对象中的address指令的值,它通常可以为IP地址或主机名;
HOSTDISPLAYNAME:    #用于引用host对象中alias指令的值,用以描述当前主机,即主机的显示名称;
HOSTSTATE:         #某主机的当前状态,为UP,DOWN,UNREACHABLE三者之一;
HOSTGROUPNAMES:     #用于引用某主机所属的所有主机组的简名,主机组名称之间以逗号分隔;
LASTHOSTCHECK:     #用于引用某主机上次检测的时间和日期,Unix时间戳格式;
LISTHOSTSTATE:     #用于引用某主机前一次检测时的状态,为UP,DOWN或UNREACHABLE三者之一;
SERVICEDESC:        #用于引用对应service对象中的desccription指令的值;
SERVICESTATE:       #用于引用某服务的当前状态,为OK,WARNING,UNKOWN或CRITICAL四者之一;
SERVICEGROUPNAMES:  #用于引用某服务所属的所有服务组的简名,服务组名称之间以逗号分隔;
CONTACTNAME:        #用于引用某contact对象中contact_name指令的值;
CONTACTALIAS:       #用于引用某contact对象中alias指令的值;
CONTACTEMAIL:       #用于引用某contact对象中email指令的值;
CONTACTGROUPNAMES:  #用于引用某contact所属的所有contact组的简名,contact组名称之间以逗号分隔;

4.对象定义文件(objec_name.cfg):

Nagios中,需要定义的监控我们称作一个对象,对象定义文件用来定义对哪些对象进行什么样的监控,注:需要事先在主配置文件中声明才会生效。Nagios常定义的对象有如下几个:

主机
主机组
服务
服务组
联系人
联系人组
时间周期
外部命令
依赖关系
模板

  ①主机定义:

“主机”指的是被监控的机器,可是物理主机,也可以是虚拟设备。一个主机对象的定义至少应该包含一个简名(short name)、一个别名、一个IP地址和用到的检测命令。此外,很多时候,其定义中还应该包含监控时段、联系人及要通知的相关问题、检测的频率、重试检测的方式、发送通知的频率等。主机的定义例子如下:

define host{     #主机定义声明
       host_name              web1                # 设定主机名
       hostgroups             web                 # 所属主机组,可以替代hostgroup
       alias                  www                 ; 主机别名
       address                172.16.100.11       # 主机IP地址
       check_command          check-host-alive    # 检测命令
       check_interval         5                   # 检测间隔
       retry_interval         1                   # 重试间隔,一次检测失败后,重试的间隔
       max_check_attempts     5                   # 最大检测次数,一次检测失败后,重复检测的次数
       check_period           24x7                # 检测的时间段
       contact_groups         linux-admins        # 联系人组
       notification_interval  30                  # 再次通知间隔
       notification_period    24x7                # 通知时间
       notification_options   d,u,r               # 哪种状态进行通知;d(Down),u(UNREACHABLE),r(recovery),f,s
}

其中的notification_options用于指定当主机处于什么状态时应该发送通知。其各状态及其表示符如下:

d —— DOWN                       #挂掉了
u —— UNREACHABLE                #不可达
r —— UP(host recovery)          #重新恢复态
f —— flapping                   #异常
s —— 调试宕机时间开始或结束

  ②主机组定义:

主机可以被划分成组,这些组即主机组。每一个主机组对象一般包含一个全局唯一的简名、一个描述名以及属于这个组的成员。此外,一个主机组的成员也可以是其它主机组。主机组的定义例子如下:

define hostgroup{   #主机组定义声明
     hostgroup_name    Web                 #主机组的名字
     alias             Linux Web Servers   #主机组别名
     members           web1,web2           #组中的主机有哪些
}

  ③服务定义:

“服务”即某“主机”所提供的功能或资源对象,如HTTP服务、存储空间资源或CPU负载等。服务附属于主机,每一个服务使用服务名来标识,此服务名要求在特定的主机上具有唯一性。每一个服务对象还通常定义一个检测命令及如何进行问题通知等。服务的定义例子如下:

define service{
     host_name               web1,web2,...     #主机名,可能有多个主机提供相同的服务
     service_description     www               #服务的描述
     check_command           check_http        #检测的命令
     check_interval          10                #检测时间间隔
     check_period            24x7              #检测的时间
     retry_interval          3                 #重试时间间隔
     max_check_attempts      3                 #最大检测次数
     notification_interval   30                #再次同时间隔
     notification_period     24x7              #通知时间
     notification_options    w,c,u,r           #哪种状态进行通知:w(warning)/c(critical)/u(unknown)/r(recovery)
     contact_groups          linux-admins      #通知组
}

与主机对象有所不同的是,有时个,多个主机可能会提供同样的服务,比如多台服务器同时提供Web等。因此,在定义服务对象时,其host_name可以为逗号隔开的多个主机。

其中的notification_options用于指定当服务处于什么状态时应该发送通知。其各状态及其表示符如下:

w —— WARNING                     #警告
u —— UNKNOWN                     #未知
c —— CRITICAL                    #紧急
r —— OK(recovery)                #重新恢复
f —— flapping                    #异常
s —— 调试宕机时间开始或结束


  ④服务组定义:

服务可以被划分成组,这些组即服务组。每一个服务组对象一般包含一个全局唯一的简名、一个描述名以及属于这个组的成员。此外,一个服务组的成员通常是某主机上的某服务,其指定时使用<host>,<service>的格式,多个服务也使用逗号分隔。服务组的定义例子如下:

define servicegroup{
     servicegroup_name    webservices         #服务组名
     alias All services   related to web      #别名
     members              we1,www,web2,www    #主机的服务
}

  ⑤联系人定义:

“联系人”对象用于定义某主机设备的拥有者或某问题出现时接受通知者。联系人对象的定义包含一个全局唯一的标识名称、一个描述名及一个或多个邮件地址等。此外,其通常还应该包括对相应的主机或服务出现故障时所用到的通知命令。例如:

define contact{
     contact_name                      Admin                   #联系人名字
     alias                             Nagios Admin            #别名
     email                             [email protected]        #邮件地址
     host_notification_period          workinghours            #主机通知时间
     service_notification_period       workinghours            #服务通知时间
     host_notification_options         d,u,r                   #主机什么状态发生通知,d(down)、u(UNREACHABLE)、r(recovery)
     service_notification_options      w,u,c,r                 #服务声明状态发生通知,w(warning)、u(unkown)、c(critical)、r(recover)
     host_notification_commands        host-notify-by-email    #主机通知命令
     service_notification_commands     notify-by-email         #通知命令
}

  ⑥联系人组定义:

联系人也可划分为组,即联系人组。一个联系人组对象包含一个全局惟一的标识名称,一个描述名称和属于此联系人组的联系人成员(members)或其人联系人组成员(contactgroup_members)。例如:

define contactgroup{
     contactgroup_name      admins                   #组名
     alias                  Nagios Administrators    #别名
     members                nagiosadmin              #组成员
}

  ⑦时间周期定义:

“时间周期”用于定义某“操作”可以执行或不能执行的日期和时间跨度,如工作日内的每天8:00-18:00等,其可以在多个不同的操作中重复引用。一个时段对象的定义包含一个全局唯一的名称标识及一个或多个时间跨度。例如:

define timeperiod{
	timeperiod_name		nonworkhours                #日程名称
	alias			    Non-Work Hours              #别名
	sunday			    00:00-24:00			        ; Every Sunday of every week
	monday			    00:00-09:00,17:00-24:00		; Every Monday of every week
	tuesday			    00:00-09:00,17:00-24:00		; Every Tuesday of every week
	wednesday		    00:00-09:00,17:00-24:00		; Every Wednesday of every week
	thursday		    00:00-09:00,17:00-24:00		; Every Thursday of every week
	friday			    00:00-09:00,17:00-24:00		; Every Friday of every week
	saturday		    00:00-24:00			        ; Every Saturday of every week
}

  ⑧监控命令定义:

“命令”用于描述如何对主机或服务进行状态检测。服务对象的定义包含两个指令:名字(command_name)和命令行(command_line);名字用于标识此命令对象,命令行则是执行检测时真正要执行的命令。

当命令对象用于检测其它对象时,其通常需要用到额外的参数以标识要检测的某特定对象,此时,命令对象需要以command_name[!arg1][!arg2][...]的语法格式进行引用。因此,命令对象的定义中,命令行指令中通常会用到宏$ARG1$, $ARG2$...,对应用于接收[!arg1][!arg2][...]传递而来的参数。例如:

define command{
     command_name    notify-host-by-email        #命令名,用于调用
     command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}

  ⑨模板定义及继承:

Nagios通过功能强大的继承引擎来实现基于模板的对象继承。这就意味着可以定义将某类型的对象的通用属性组织起来定义为对象模板,并在定义其类型中的对象时直接从此模板继承其相关属性的定义。定义对象模板的方法很简单,通常只需要在定义某类型对象时使用register指令并将其值设定为0即可。对象模板的名称通常使用name指令定义,这与某特定类型对象使用的指令也有所不同。而定义此种类型的对象时,只需要使用use指令并将其值设定为对应模板的名称即可。例如:

##host模板定义:模板定义使用register 0作为关键字
define host{ 
       name                    generic-server       #模板名字
       check_command           check-host-alive     #命令
       check_interval          5                    #多久检测一次
       retry_interval          1                    #当服务出现问题,多久重试一次
       max_check_attempts      5                    #最大重试次数
       check_period            24x7                 #监控的时间周期
       notification_interval   30                   #错误通知间隔时长
       notification_period     24x7                 #通知时间周期
       notification_options    d,u,r                #变为何种状态通知
       register                0                    #模板定义关键字
}

##host模板继承:继承一般在对象定义文件中使用Use继承
define host{
       use                     generic-server       #继承generic-server模板
       host_name               webserver1           #主机名
       alias                   Web Server 01        #主机别名
       address                 172.16.100.11        #IP地址
       contact_groups          linux-admins         #联系组
}

一个对象在定义时也以同时继承多个模板,此时只需要为use指令指定以逗号分隔的多个模板名称即可。同时,Nagios也支持模板的多级继承。

  ⑩依赖关系:

为了描述Nagios对象间的依赖关系,这里要用到两个术语:master(被依赖的主机或服务)和dependent(依赖关系中的依赖于master的Nagios对象)。Nagios可以定义对象间的彼此依赖性,也可以为某对象定义其父对象,甚至也可以指定此依赖关系生效的时段。下面是一个关于主机依赖关系定义的例子:

define hostdependency{
    dependent_host_name             backuphost    #定义dependent主机
    host_name                       vpnserver1    #dependent主机名              
    dependency_period               web1          #依赖的主机 
    execution_failure_criteria      c,u           #定义master为何种状态时不再对依赖此master的主dependent机进行检测
    notification_failure_criteria   c,u,w         #定义master处于何种状态时不会发送dependent相关的主机问题通知到联系人。
}

服务间依赖关系的定义类似于主机间的依赖关系,例如:

define servicedependency{
       host_name                       mysqlserver       #运行该服务的主机
       service_description             mysql             #服务描述
       dependent_hostgroup_name        apacheservers     #dependent主机组
       dependent_service_description   webservice        #dependent服务描述
       execution_failure_criteria      c,u               #定义master为何种状态时不再对依赖此master的主机进行检测  
       notification_failure_criteria   c,u,w             #定义master处于何种状态时不会发送dependent相关的主机问题通知到联系人。
}
时间: 2024-10-31 10:00:45

Nagios配置介绍的相关文章

实战Nagios NSCA方式监控Linux系统资源使用情况 -- Nagios配置篇 -- Nagios Server端

关于nrpe的方式网上已经有很多很好的总结,我现在说说在我们系统中如何是用NSCA方式来获取我们需要的被监控节点的资源使用情况信息. 先讲讲Nagios Server端的基本配置: 1. nagios web gui 访问配置,系统中使用的是nagios core中推荐的配置方式,通过apache httpd访问nagios web,安装nagios的时候会自动寻找系统中安装的httpd,把nagios的httpd文件放到httpd的conf.d目录下,这样,只要生成一次nagios web访问

基于linux系统nagios安装介绍(一)

基于linux系统nagios安装介绍(一) 实验环境: (1)虚拟机操作系统:Centos6.7 32位 (2)nagios安装包:nagios-3.5.1-1.el6.i686 (3)nagios服务器端ip:192.168.100.120 (4)nagios客户端ip:192.168.100.113(即被监控端) nagios介绍: 是一个开源软件,可以监控网络设备网络流量. Linux/windows 主机状态,甚至可以监控打印机.它可以运行在 Linux 上或 windows 上,基于

实战Nagios NSCA方式监控Linux系统资源使用情况 -- Nagios配置篇 -- 被监控端

Nagios要求被监控端按照约定格式定时将数据发送到Nagios端.监控包括节点和服务2种. 节点监控约定数据格式如下: [<timestamp>] PROCESS_HOST_CHECK_RESULT;<host_name>;<host_status>;<plugin_output> 格式很容易理解,数据提交时间戳,被监控节点名称,节点状态(UP/DOWN/UNREARCHABLE),插件自定义的额外数据.状态具体每个字段的解释如下: 1. timestam

烂泥:学习Nagios(二):Nagios配置

本文首发于烂泥行天下 nagios安装完毕后,我们现在就来配置nagios.有关nagios的安装,可以参考<烂泥:学习Nagios(一):Nagios安装>这篇文章. 说明:为了和nagios版本的保持一直,我们在此使用的是nagios最新版nagios-4.1.0rc1. 注意:最新版的nagios可在web页面查看其运行的PID. 一.nagois监控对象 nagios监控的对象比较多,我们可以从颗粒度的不同进行划分,分为笼统对象和详细对象. 1.1笼统对象 nagios监控的笼统对象可

nagios配置过程详解

一.nagios配置过程详解 1.nagios默认配置文件介绍 nagios安装完毕后,默认的配置文件在/usr/local/nagios/etc目录下,每个文件或目录含义如下表所示: 2.配置文件之间的关系 在nagios的配置过程中涉及到的几个定义有:主机.主机组,服务.服务组,联系人.联系人组,监控时间,监控命令等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的. 成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:

Centos 7.3下 Linux For SQL Server安装及配置介绍

Centos 7.3下Linux For SQL Server安装及配置介绍 说到SQL Server服务,我们大家都知道是Microsoft公司的数据库服务,当然说到数据库,现在主要分为三大商:1:Oracle.2:Msql Server.3:Mysql:三种数据库在当下环境受到不了不同程度的关注:比如oracle主要应用到大型的商业比较多,比如银行:SQL Server主要在常见的互联网公司使用:mysql主要应用于小型的企业或者服务商使用:当然从费用上来说,Oracle是最贵的,也是最为稳

Centos7+Mariadb集群-主从配置介绍

近期一直在恶补Linux相关的知识,主要是就是学Linux下的基本日常应用服务器的配置及优化,今天我们主要介绍一下在Centos7下安装及配置Mysql 集群,说到集群,其实就是为了提高服务的高可用性.对于高可用的相关服务今天不是主要介绍内容,今天主要介绍MYSQL的主从配置.对在Linux下的其他服务的介绍及服务高可用负载均衡我们将会在后期的文章中介绍.开始今天的介绍:Centos7+Mysql主从配置. 环境介绍: Hostname:A-S IP:192.168.5.21 Role:Mysq

Python+Nginx实现邮件POP、IMAP、SMTP代理配置介绍

说到Python,大家都知道,是在运维方面的管理人员需要掌握的一门技术,为什么这么说呢,在运维方面Python开发语言应用比较广,以致可以帮助管理员提高工作效率,具体我就不多少了,接着我们说说邮件代理,因为公司的邮箱系统是使用是IBM的Domino Lotus服务,如果对Lotus了解的都知道,Lotus是文件数据库类型的服务器类型,用户的所有邮箱数据库都是独立的xxx.nsf,而通过数据库模板xxx.ntf进行创建或者定时刷新数据,来保证数据库的额稳定性.而当用户数量多的话,就需要创建多台邮件

Citrix 6.5 详细安装及配置介绍

Citrix 6.5 详细安装及配置介绍 说到虚拟机化,相信大家都对虚拟化的概念及环境的搭建都有一定的了解,我们都知道目前最主流的虚拟化产品有很多,比如microsoft Hyper-v.vmware workstation.vmare vsphere.citrix等产品,我之前的环境搭建都基于hyper-v和vmware vsphere的,近期呢,闲着没事想体验一下citrix产品,目前citrix虚拟化xencenter 6.5,所以我们今天就介绍一下xencenter6.5的全新安装及配置