Nagios的配置文件:

Nagios安装后有四种默认的配置文件:主配置文件、CGI配置文件、资源定义文件、对象定义文件。这些配置文件间具有一些关系,只有充分理解各配置文件,才能使得配置Nagios服务如行云流水。

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

CGI配置文件(cgi.cfg):

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

main_config_file                              #主配置文件是哪个
physical_html_path=/usr/local/nagios/share #网页目录
url_html_path=/nagios #URL路径
use_authentication= #是否启用认证
use_ssl_authentication= #认证是否启用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

资源定义文件(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组名称之间以逗号分隔;

对象定义文件(object_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 # 检测间隔
retry_interval # 重试间隔,一次检测失败后,重试的间隔
max_check_attempts # 最大检测次数,一次检测失败后,重复检测的次数
check_period 24x7 # 检测的时间段
contact_groups linux-admins # 联系人组
notification_interval # 再次通知间隔
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 #检测时间间隔
check_period 24x7 #检测的时间
retry_interval #重试时间间隔
max_check_attempts #最大检测次数
notification_interval #再次同时间隔
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 Admin@logsite.cn #邮件地址
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 :-: ; Every Sunday of every week
monday :-:,:-: ; Every Monday of every week
tuesday :-:,:-: ; Every Tuesday of every week
wednesday :-:,:-: ; Every Wednesday of every week
thursday :-:,:-: ; Every Thursday of every week
friday :-:,:-: ; Every Friday of every week
saturday :-: ; 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 #多久检测一次
retry_interval #当服务出现问题,多久重试一次
max_check_attempts #最大重试次数
check_period 24x7 #监控的时间周期
notification_interval #错误通知间隔时长
notification_period 24x7 #通知时间周期
notification_options d,u,r #变为何种状态通知
register #模板定义关键字
} ##host模板继承:继承一般在对象定义文件中使用Use继承
define host{
use generic-server #继承generic-server模板
host_name webserver1 #主机名
alias Web Server #主机别名
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相关的主机问题通知到联系人。
}

监控服务 - Nagios配置文件详解的更多相关文章

  1. Nagios配置文件详解

    首先要看看目前Nagios的主配置路径下有哪些文件.[root@nagios etc]# ll总用量 152-rwxrwxr-x. 1 nagios nagios 1825 9月  24 14:40 ...

  2. nfs服务端配置文件详解

    配置参数语法 配置文件路径 /etc/exports 可以使用#进行注释说明 一个完整的配置实例至少需要3个参数 1.被共享的目录 必须是存在的目录 2.向谁共享 可以指定主机或网络范围,支持通配符* ...

  3. Nagios监控平台搭建及配置文件详解

    Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员, ...

  4. 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装

    Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...

  5. Linux:SSH服务配置文件详解

    SSH服务配置文件详解 SSH客户端配置文件 /etc/ssh/ssh——config 配置文件概要 Host * #选项“Host”只对能够匹配后面字串的计算机有效.“*”表示所有的计算机. For ...

  6. Linux系统学习 二十一、SAMBA服务—相关文件、配置文件详解

    3.相关文件 常用文件: /etc/samba/smb.conf      #配置文件 /etc/samba/lmhosts        #对应NetBIOS名与主机的IP的文件,一般Samba会自 ...

  7. Apache服务的主要目录和配置文件详解

    Apache服务的主要目录和配置文件详解 2014-01-14 19:05:14 标签:httpd配置文件详解 apache配置文件 httpd配置文件 apache文件目录 原创作品,允许转载,转载 ...

  8. httpd配置文件详解及实例

    httpd配置文件详解及实例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.http协议的组成 http协议是C/S架构:我们可以把浏览器(如:IE,Firefox,Safar ...

  9. Rsyslog配置文件详解

    Rsyslog配置文件详解https://my.oschina.net/0757/blog/198329 # Save boot messages also to boot.log 启动的相关信息lo ...

随机推荐

  1. C++注意事项

    1.static和const不能同时修饰类的成员函数(static int getde()const;) 分析:原因在于const会在函数中添加一个隐式参数const this*,而static是没有 ...

  2. CSS 中 Font-Family 中英文对照表

    在 CSS 中,我们经常会使用 Font-Family 属性来定义字体.其中,中文字体如果直接使用中文名称,很有可能在非中文的系统环境下造成字体异常.所以通常使用字体的英文名称定义 Font-Fami ...

  3. 自学C++第一天

    常引用: 可以用在复制构造函数里面.

  4. iOS: How To Make AutoLayout Work On A ScrollView

    iOS: How To Make AutoLayout Work On A ScrollView Posted on June 11th, 2014 Ok, I’ll admit. I’ve been ...

  5. WIN32服务程序(三):完整的服务程序实例

    前面我们所讲的“服务程序”,更准确地说是服务控制程序,例如我们通过输入应用的路径,将一个应用程序添加到服务控制管理器.一个服务控制程序可以将一个程序添加到服务控制管理器中,并控制它的运行.停止和删除等 ...

  6. Java高级规范之二

    二十一.提交java代码前应该检查是否有没用的语句,如:System.out.println(); jsp页面上面是否有alert调试信息 不规范示例:暂无 规范实例:暂无 解析:因为如果保留了有可能 ...

  7. 电脑重装BIOS设置中文翻译

  8. JavaScript中本地对象、内置对象和宿主对象

    链接:http://www.cnblogs.com/luckyXcc/p/5892896.html(Milk.╮的博客园提供) 其中内置对象只有两种:ECMA-262 只定义了两个内置对象,即 Glo ...

  9. Android之ListView&ViewPager模拟新闻界面

    模拟新闻 APP 的界面 1)写 ListView 之前先写布局: 这里有两种 Item 的布局: <?xml version="1.0" encoding="ut ...

  10. 粗略了解struts2

    花了半天的时间再把struts2详细拟了一遍,之前用习惯了servlet加jsp,再看struts2的时候终于明白为什么大家都愿意学,以人类天生的惰性,要让他们愿意去学习一个新的东西,这东西一定可以让 ...