Chinaunix首页 | 论坛 | 博客
  • 博客访问: 711230
  • 博文数量: 140
  • 博客积分: 5097
  • 博客等级: 大校
  • 技术积分: 991
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-05 19:13
文章分类

全部博文(140)

文章存档

2018年(1)

2015年(5)

2014年(5)

2013年(2)

2011年(16)

2010年(6)

2009年(9)

2008年(45)

2007年(26)

2006年(25)

分类: 系统运维

2006-01-19 12:23:04

mon
并行服务监视进程
 
全称
mon - 服务可用性的监视工具, 可以在失效时发出警报。

语法
mon [-dfhlMSv] [-a dir] [-A authfile] [-b dir] [-B dir] [-c config] [-D dir] [-i secs] [-k num] [-l dir] [-m num] [-p num] [-P pidfile] [-r delay] [-s dir]

描述
 mon是一个通用目的地资源监视系统,可以备用于监视网络服务的可用性,服务器问题,诸如温度等影响系统运行的环境条件。

  资源监视可以被视为两部分独立的任务:测试条件,当出现问题时触发动作。mon被设计用于检测独立的stand-alone服务并能作出相应的响应动作。mon以调度器的形式实现监视任务的执行,当监视器失效时可以调用响应的告警程序。


命令行选项

-a dir
 指明告警的教本路径。缺省是/usr/local/lib/mon/alert.d。多个路径用:隔开。相对路径缺省位于/usr/lib/mon下。

-b dir
 指定mon的基本目录。脚本目录、告警目录以及状态目录都相对于它。也可以制定为/.或者/usr/lib/mon缺省路径。

-B dir
 配置文件的基本目录。所有的配置文件都位于这个目录,包括: mon.cf, monusers.cf, 和 auth.cf文件

-A authfile
 认证配置文件的位置。缺省是 /etc/mon/auth.cf 如果目录 /etc/mon 或者,/usr/lib/mon/auth.cf 存在的话。

-c file
 基本配置文件。缺省位于/etc/mon/mon.cf 或者/etc/mon.cf.

-d
 允许调试模式

-D dir
 状态目录。缺省位于/var/state/mon, /var/lib/mon,和/usr/lib/mon/state.d

-f
 作为守护进程运行。建议使用这种方式运行mon

-h
 打印帮助信息。

-i secs
 睡眠间隔,用秒为单位。缺省值1,通常不需要调整这个值。

-k num
 设置日志历史文件最大数量。缺省100

-l
 从最后存储的状态文件获得状态信息。目前仅有的支持是:关闭 watches, services, 和 hosts.

-L dir
 设置日志文件目录。也可以参考配置文件的logdir项目。缺省的有效目录是/var/log/mon,否则位于基本目录的log.d目录下

-M
 使用m4包对配置文件进行预处理。

-m num
 设定最大进程数目的上限。

-p num
 设定监听端口号,缺省2583

-S
 启动已停止的调度器。

-P pidfile
 将服务的pid号存储在相应的文件里,缺省位于 /var/run/mon/mon.pid,/var/run/mon.pid, 和 /etc/mon.pid 。空值表示部存储pid于文件中。

-r delay
 随机设定每个服务调度前的秒数。指向配置文件中的全局变量randstart。

-s dir
 监控程序的所在目录。缺省 /usr/local/lib/mon/mon.d:mon.d. 多个报警脚本可以用:隔开。相对路径参考基本目录 (缺省/usr/lib/mon by default).

-v
 打印版本信息。

 
定义

monitor

 用于监视指定的服务是否正常运行的一个工具,并向调度程序返回提示信息。通常利用ICMP协议来检测主机的可到达性,或者是TCP服务的连接是否正常。

period

 由perl中Time::Period模块解释的周期类型。可以用星期x的英文缩写来表示。

alert

 当调度器检测到某个服务出现错误时,调用alert程序来发送告警消息。告警程序通过调度器获得命令行参数,通过标准输入接受数据。

hostgroup

 由主机名或ip指定的一个或者一组主机列表。

service

 一组参数集,用于处理一组特殊资源的监视任务。服务以模块化的形式添加:SMTP 服务, ICMP echo 能力, 磁盘空间可用性, 或者 SNMP 事件.

watch

 用于负责特定组的服务集。
 
操作

 当mon服务调度器运行的时候,首先读取配置文件以决定哪些服务需要监视。缺省的配置文件是/etc/mon.cf,或者使用-c参数指定特别的文件。如果配置文件是m4格式并经过预处理的,可以使用-M参数指定。这种配置文件也可以通过m4程序自动进行处理。

 监控调度器以监视客户连接、监控以及错误报警这样一个循环过程开始。每个服务都有在配置文件中指定一个特殊的时隙,用于设定调用监控进程的时间间隔。调 度器也可能临时被暂停。当调度器暂停地时候,客户一样可以连接服务,只是所连接的服务不被mon调度罢了。这个功能在服务被重新启动得时候非常有用,因为 你可以这样做:存储失效的主机或者服务,使用调度器重置服务,再次使主机或服务失效,最后启动调度器。他也允许对跨越几个客户端连接的修改做原子操作。更 多信息请看moncmd的帮助。
 
监控程序

监控进程由配置文件中hosts所指定的可用主机组的附带参数所调用。例如,watch组是servers,包含了smtp、nntp、ns等主机名,则monitor就以如下格式调用:

monitor fping.monitor -t 4000 -r 2

接着就以调用外部命令的形式执行fping.monitor程序

(MONITOR_DIR)/fping.monitor -t 4000 -r 2 smtp nntp ns

MONITOR_DIR 的指定了搜索目录,缺省为/usr/local/lib/mon/mon.d 或者是 /usr/lib/mon/mon.d,该目录的缺省值也可以由-s参数所指定,或者申明在配置文件中。如果主机组里的所有主机都失效的话, monitor就会发送告警消息到syslog守护进程,并且不再继续运行。但是可以通过指定服务定义中的"allow_empty_group" 选项来避免这种情况。如果monitor附带的参数是以;;结尾的话,随后的主机列表就不会被添加到有效的参数列表中。

环境变量

以下是定义服务时可用的环境变量,mon可以将这些变量传递到监视进程去。

MON_LAST_SUMMARY
monitor最后一次退出后返回屏幕信息的第一行。

MON_LAST_OUTPUT
monitor最后一次退出后的全部返回信息。

MON_LAST_FAILURE
服务最后一次失效的time(2)

MON_FIRST_FAILURE
服务第一次失效的time(2)

MON_LAST_SUCCESS
服务最后一次成功的time(2)

MON_DESCRIPTION
服务描述,使用描述标记定义在配置文件中。

MON_DEPEND_STATUS
依赖关系状态。0表示依赖失败,其他情况为1。

MON_LOGDIR
log文件的目录,由logdir全局配置变量指定。

MON_STATEDIR
由全局配置变量statedir指定的状态文件所在目录。

如 果"fping.monitor"运行正常则返回0,有错误的话返回非0值。返回信息的第一行有特殊的意义:他指出了monitor遇到的错误类型的÷以 及其他重要的描述,并且可以触发相应的告警程序。返回信息的剩余部分也会传递给告警处理程序,只是这部分不需要被告警解释。

如果当 前有一个monitor服务正在运行,而为这个服务设定的时间间隔已到,这时又有另一个服务需要启动时,新的服务会一直等待当前服务的运行完成才会启动。 例如,时间间隔设定为10秒,而当前的服务没有来得及在10秒未完成运行,另一个monitor服务会一直等到当前的服务正常退出后才会运行。

告警的判断逻辑

 如果一个monitor进程以0或者非0值返回时,相应的一般告警程序或者警报程序就会触发,触发行为取决于以下条件:

 如果指定的服务禁用告警设置,将不会发出告警信息。

 如果dep_behavior变量的值设定为'a',而该服务的“父依赖”失效的话,告警信息将被禁用。
 如果有一个事先公认的告警信息,除非触发的是警报事件,否则不会发出告警消息。
 如果一个告警事件没有事先指定,将会通过syslog(3)记录下告警行为并且不会发出告警消息。
 如果一个错误没有事先定义,该事件将不会发出告警消息。加入no_comp_alerts变量没有经过事先的定义,缺少相应的down告警消息,警报程序是不会触发的。

 如果当前进程在最后一次alertevery时间间隔里已经发出一条告警消息,那除非该告警摘要不同于上一个告警进程,是不会再发出另外的告警消息。- -当前的告警程序只会发出不同于上次的信息,重复的告警只会发出一次。否则使用以前所有的告警程序发送消息。设定observe_detail参数可以使 告警程序关注每一条信息中细节部分的变化,借此影响告警程序的行为。

  如果monitor一直处于失效状态,而且每一条告警信息的摘要都不同,通用告警 alertevery将不会限制持续的告警消息。原因在于如果告警信息的摘要部分变化了,就意味着有其他重要的事件发生,需要将这个消息通知用户。

告警程序

告警程序由-a参数指定,缺省位于/usr/local/lib/mon/alert.d。他们通过如下的命令行参数调用:

-s service
 Service标记来自配置文件。

-g group
 指明来自配置文件的主机组名。

-h hosts
 主机组的扩展版本,没有空间限制,但是包含在"word"下,

 设定到下一个警告信息发出的秒数。

-O
 特殊的选项,仅作为预期陷阱(trap)超时的结果返回警告。

-t time
 以time(2)的格式设定检测到错误时的时间。

-T
 仅当告警事件由一个陷阱(trap)触发时才设定该选项。

-u
 仅当告警被设定为upalert(警报)调用时才设定该选项。

 剩余的参数由配置文件 的alert区段里的相应部分提供。

 和monitor程序一起,告警程序和服务区定义的环境变量一起被调用。设置明确如下

MON_LAST_SUMMARY
 最后monitor退出返回信息的第一行。

MON_LAST_OUTPUT
 monitor进程最后退出返回信息全部内容,

MON_LAST_FAILURE
 服务进程最后一次失效的时间,格式time(2)。

MON_FIRST_FAILURE
 服务第一次失效的时间,格式time(2)。

MON_LAST_SUCCESS
 最后一次通过服务的时间,格式同上。

MON_DESCRIPTION
 服务描述,同时也在配置文件中的描述标记中定义。

MON_GROUP
 定义触发报警事件的检测组。

MON_SERVICE
 产生告警的服务标题。

MON_RETVAL
 monitor进程出错退出时的返回值,也可以作为陷阱的返回值。

MON_OPSTATUS
 服务的操作状态。

MON_ALERTTYPE
 指出触发的报警类型,可能是一下几种之一:"failure", "up", "startup", "trap", or "traptimeout"。

MON_TRAP_INTENDED
 仅当未知的mon陷阱被default/defaut watch/service捕获或者接收时才需要设置该选项。服务名和watch组用":"隔开。

MON_LOGDIR
 由全局变量logdir决定存放日志文件的目录。

MON_STATEDIR
 状态文件存放位置,由statedir全局变量指出。

 标准输入的第一行必须是问题的简短摘要,通常作为邮件标题提供给email,或者作为文本发送到数字页。对随后信息的解释任务则交给告警程序处理。邮件处理程序会根据作为参数输入的收件人列表参数,发送告警信件给相关的收件人。
 
配置文件 mon.cf

 配置文件包括0个或者多个hostgroup定义,以及0个或者多个watch定义。每一个watch定义包含一个或多个service定义。每一行如果以"#"开头,则表示改行是注释行,将被处理程序忽略。

 配置文件被一行行的解析。如果某一行过长,可以用"\"续行,做法如下:需要续行的结尾使用"\",紧随一个空格,接下来的续行以空格开头。这样就可以实现多行内容合并为一行。

配置文件全局变量

 设置全局变量可以替代已经预先编译好的缺省值。命令行指定的参数比起这些定义有更高的优先处理权限。

alertdir = dir
 需要指定告警脚本所在的完全路径。也可以由-a 命令行参数指定。多个告警路径可以由":"隔开,相对路径缺省基于/usr/lib/mon/目录下。
 当读入配置文件时,所有引用到的告警文件都将被搜索一遍以确认存在,同时把的告警脚本执行路径信息存储在一个hash表中。这个hash表仅在启动和重 置的时候产生,所以新加入的告警脚本在下一次重置之前不会被添加到脚本hash列表中(意味着新的脚本将暂时不可用)。

mondir = dir
 指定monitor脚本所在地完全路径。也可以由命令行参数-s指定。
 多个脚本可以通过":"隔开,且必须指明完全路径。
 当读入配置文件时,所有引用到的monitor文件都将被搜索一遍以确认存在,同时把脚本执行的路径信息存储在一个hash表中。这个hash表仅在启 动和重置的时候产生,所以新加入的monitor脚本在下一次重置之前不会被添加到脚本hash列表中(意味着新的monitor脚本将暂时不可用)。

statedir = dir
 指明存储状态信息的绝对路径,mon使用这个目录存储不同的状态信息。

logdir = dir
 指明存储log的绝对路径,mon使用该目录存储不同的日志信息,包括downtime日志。

basedir = dir
 状态、脚本、告警脚本的基本路径,以完全路径的格式指定。

cfbasedir = dir
 用户配置、认证文件所在的绝对路径,包括monusers.cf, auth.cf等。

authfile = file
 认证文件所在的绝对路径。

authtype = type [type...]
 指定用户的认证类型。类型可以是多个,由空格相互隔开。每个认证方法依次被检验。一旦所有指定的认证方法全部通过,改用户就被认为是可信的,在随即的会话中就不再进行认证检查。
 如果认证的类型是getpwnam,将使用Unix缺省的认证方法(通过调用getpwnam(3)函数将得到的密文和crypt(3)算法的密文进行比较)。如果系统采用了影子密码的话,该认证方式将无法正常工作。

 如果方法指定为userfile,程序将从用户信息文件读取用户名和经过hash算法加密的密码。用户信息文件由配置文件的userfile变量指定。
 如果方法为pam(可插入认证模块),将使用PAM作为用户认证的手段。具体信息由配置文件的pamservice全局变量指定。如果没有制定该变量,缺省使用PAM passwd 服务作为认证。
 
userfile = file
 用于上面提到的情况,即设置了认证类型后所需要的用户数据文件。该文件以'用户名 : 密码'这样的格式按行列出来。密码的值由UNIX系统的crpyt(3)函数返回。注意,该文件的格式和apache下的用户认证文件的格式相兼容。所以 你可以使用apache自带的htpasswd程序来管理mon的用户文件。
 一行如果以"#"开头则被程序略过。

pamservice = service
 仅当认证模式采用pam认证的时候才使用该参数。如果没有指定特别的参数,缺省的服务设定是passwd。

snmpport = portnum
 设定SNMP服务的端口。

serverbind = addr
 
trapbind = addr
 分别指定了服务和陷阱需要绑定的地址,如果没有指定,缺省值为INADDR_ANY,其含义是允许所有的连接。出于安全因素的考虑,建议将绑定地址设定为本地回路设备:loopback。

snmp ={yes|no}
 打开或者关闭snmp支持

dtlogfile = file
 指明了存储downtime日志的文件。当一个服务实效持续了一段时间后,接着stop失败,该事件就会被记录到日志文件中。如果该选项没有设置,就不会记录相关的日志信息。日子文件的格式大致如下:(#号表示注释可以忽略)

 timenoticed group service firstfail downtime interval summary.

 timenoticed is the time(2) the service came back up.

 group service is the group and service which failed.

 firstfail is the time(2) when the service began to fail.

 downtime is the number of seconds the service failed.

 interval is the frequency (in seconds) that the service is polled.

 summary is the summary line from when the service was failing.


dtlogging = yes/no
 关闭或者开启downtime日志,缺省关闭

histlength = num
 限定事件历史列表的最大长度(可记录的事件个数)。缺省100,该属性等效于命令行参数 -k。

historicfile = file
 如果设定该项参数,告警将会被记录在日志文件中,并且在启动的时候,部分历史纪录将被读入内存。

historictime = timeval
 定义启动时要读入的历史文件的数量。关于timeval可以参考"服务定义"的解释。

serverport = port
 设定服务需要绑定的断口号。该参数等效于命令行参数-p。通常该端口使用getservbyname(3)函数查找,缺省值2583。

trapport = port
 设定用于陷阱服务的UDP绑定端口。通常可以通过函数getservbyname(3)得到该端口,缺省2583。

pidfile = path
 存储pid信息的文件路径,等效于命令行参数-P。

maxprocs = num
 限定生成子进程的最大数量。主要目的是防止服务一下子开启过多的子进程而导致不安全的因素出现。其实只有当你错误配置了设置文件才会出现这种极端情况,一帮情况都可以避免。

cltimeout = secs
 设定客户非活动状态的超时时闸。这个设定可以防止服务受攻击以及帮助客户端的崩溃恢复。设定值可以是“1小时/1分钟/1秒”之一。

randstart = interval
 当服务启动以后,直到各个服务区段的interval值定义之前,相应的服务都不会被调度。这就有可能导致在第一个service被检查之前会有较长的 等待时间,而若有多件任务在同一时间间隔被调度的话将会导致服务的负载过高。那么,设定该选项就可以在调度程序(mon)启动期间首先对所有的 service检查一遍,或者是在重置mon进程之后。而经过检查,每个service和watch组的调度时隙都会被设为一个0~该值之间的一个随机 值。

dep_recur_limit = depth
 限制递归依赖的最大深度。如果发生递归依赖的深度超过设定值的话,该递归依赖将被强行中止并且发送消息记入syslog的日志文件。缺省的深度为10。

dep_behavior = {a|m}
 当一个处于依赖关系链的结点失效时,该选项可决定告警或monitor是否中止依赖表达式的继续执行。关于该行为的详细情况可以参考"Service Definitions"区段。这个选项也可以作为指定服务变量的全局缺省值来设定。

syslog_facility = facility
 指明用syslog记录日志的方式,缺省是daemon。

startupalerts_on_reset = {yes|no}
 当该项设定为yes的时候,startupalerts将会在客户端执行重置命令时被调用。缺省为no。

主机群部分

 该部分以关键词 hostgroup 开始,紧接着是组标识符,主机列表可以用一组主机名或者ip地址列表用空格隔开。组标识必须由英文字母、"-"、"."或者下划线混和组成。如果host列表一行写不下的话,可以下在hostgroup的下一行,例如:

hostgroup servers nameserver smtpserver nntpserver
       nfsserver httpserver smbserver
 另,hostgroup以空行结束。例如:
 hostgroup router_group cisco7000 agsplus
 
监视组部分
 
  该部分以关键词watch开始,空格后紧跟着的是一个已经定义过得hostgroup名。如果跟了一个没有定义过得hostgroup标记,系统就会自动创建以该标记命名的hostgroup,但是没有具体的成员。
  wathc部分包含了一个或者多个service(服务)定义。


  有一个特殊的watch组叫做"default"。如果这个缺省watch组和一个default服务一同被定义时,该定义部分将会处理mon执行过程中所有未知的陷阱事件。

服务定义

service servicename
  该选项以关键字service开始,空格后指定服务的标识符。
  service的组成是一个时间间隔、一个监视进程、以及一个或多个时间定义。
  如果在一个命名为“default”的watch组里定义"default"服务的话,则这一对default/default定义将处理未知的mon陷阱。

interval timeval
 关键词后指定一个时间值,表名监视脚本触发的频率。该时间值可以定义为"30s", "5m", "1h", or "1d", 意味着 30 秒, 5 分钟, 1 小时, 或 1天。当然也可以使用浮点数。

traptimeout timeval
 和interval的用法一样,指定一个特殊的时间阀值。用于设定监视服务监视外部资源陷阱事件的时间或者是一个失效被注册的时间。通常用于heartbeat型的服务中。

trapduration timeval
 当一个陷阱时间被接收到时,接收陷阱的服务仍会处于一个持续正常的状态。如果该值被设定,接收服务就会在一定时间内(timeval指定)处于失效状态,然后重置到成功状态。

randskew timeval
 与用固定时间间隔调度service监视脚本不同的是,randskew的设定可以使调度程序在一定的范围随机选择一个调度周期进行服务的调度,该范围 由interval的值加上或者减去randskew指定的值。举例如下:如果原有设定的interval为1m,而randskew设定为5秒,那么 mon就会在55~65秒之间随机的调度监视脚本。这个设定主要是为了解决负载的问题,当多个服务设定了同样的调度间隔的时候,可以通过设定该选项有效的 避免同一时刻负载过高的情况。

monitor monitor-name [arg...]
 关键字monitor后面跟随了一串参数,第一个个参数指出了mon需要周期调用的监视脚本的名字。当需要传递参数给监视脚本时,格式遵循类shell 的风格。脚本所在的目录由命令行参数-s指定。第二个参数开始都是该脚本程序所需的运行参数。脚本调用对应的主机列表由单前watch组里的hosts组 指定。如果该脚本调用行以";;"结束,则表示主机组不会作为该脚本的参数传递给调用程序。

allow_empty_group
 该选项允许某一个监视器没有相应的监视主机组。当hostgroup里的所有主机都无效时,缺省是不会调用该monitor的。
 
description descriptiontext
描述段
 跟在关键字description其后的是关于服务的简要描述,可以用于web页面的显示和email消息。该内容通过环境变量传递给告警程序和监视进程,并允许客户端查询

exclude_hosts 主机 [host...]
 列表中的主机将被排除在服务检查之外。

exclude_period 时间值
 如果定义了该时间值,在该段时间内监视器不会运行调度。

depend dependexpression
 depend关键字用于指定一个布尔表达式,结果为true或者false。该表达式用perl的语法书写,服从所有的perl语法规则。表达式在各自的包空间内检查结果,因此不会有意外的边界情况出现。如果在分析语法时发现有错误,将会由syslog记入日志中。
 在计算表达式之前,先会发生一系列的代换工作:类似 "group:service"这样的短语将被当前的服务名以及相应的状态值代替。这种代换是可递归计算的。例如,服务A依赖于服务B,服务B依赖于服务 C,于是A就依赖于(传递)C。成功的操作状态(等效于1)可以是 "STAT_OK", "STAT_COLDSTART", "STAT_WARMSTART", 和 "STAT_UNKNOWN"。大写词"SELF"表示当前watch组的缩写,用于表示"SELF:service"这样的组和服务。
 该特性可以用于那些含有依赖关系的报警或者监控服务。例如在SMTP测试服务中需要依赖ping的测试服务。

dep_behavior {a|m}
 用于检测依赖关系链里面告警或者监控的”限制“。
 用于告警限制时。如果该选项设定为"a"。依赖关系表达式将在服务的监控器退出后或者收到一个陷阱事件后计算。仅当计算结果为成功时告警才会发出,这也意味着在依赖关系链中没有任何节点失效。
 用于监控时。如果设定为"m",则依赖关系表达式将在该服务的监视器运行之前计算。如果计算结果为成功,该服务的监视器才会继续运行。否则,监视器就不会运行而且服务的状态仍然保持不变.-
 
周期定义

 周期定义用于设定传递告警消息的时间条件。

period [label:] 周期值
 一个周期组含有一个或者多个报警设定和变量,用于控制当出现失效状况时,告警事件发生的频率。period包含两个部分内容。第一部分为关键字 period,指明了来自 Patrick Ryan's的Perl 5模块Time::Period所描述的周期。更多信息可以参考perl的文档。
 第二部分是一个标号和冒号的组合。该标号是先前定义过的周期名,由合法的字符、数字、下划线的组合而成。这种形式可以用于多个period共用同一个定 义的情况。一个用户可以先定一个period没有设定告警时间参数的周期,而其他的用户可以再使用该定义,并设置自己的告警时间参数。

alertevery timeval [observe_detail]
 alertevery关键字的作用和interval变量一样,用于设置当服务持续处于失效状态时,告警的发生次数。例如,如果interval设定为 1小时,则周期段内的告警仅每一小时才触发一次。如果忽略了alertevery 的设定,告警消息就会在每次遇到失效的时候发出,无一保留。缺省情况是,如果连续的两个失效事件输出的信息摘要不同,alertevery的周期值就会被 覆盖,并随后发出一条告警信息。但是如果设定了最后一个参数[observe_detail] ,不但失效事件的摘要会输出,详细信息也会输出。关于如何禁止告警事件详细信息的技巧请参考“告警设计逻辑”一节。

alertafter num

alertafter num timeval

alertafter timeval

 该关键字有三种形式。一个是仅有num数量值,一个是仅有时间值,还可以是“数量 时间”。
 第一种情况中,仅当失效事件连续发生Num次后,告警才会触发。
 第二种情况表示,如果在超过timeval时间后有失效事件,就触发告警。其含义和先前定义的interval变量是一样的。
 第三种情况比较复杂,num和timeval必须是正数。当两个参数同时指定时,表示如果监视器在timeval时间内检测到num次失效事件的话,就 出发相应的告警事件。例如,设定值 "3 30m",则当30分钟内有三次失效事件发生的话,就触发一次告警事件发出消息。

numalerts num

 该变量告诉服务进程,在一个失效事件期间不要调用超过num次的告警。而告警计数器存放在per-period,每次事件结束重新进入成功状态时系统将重置该计数器。

no_comp_alerts
 
 如果设定该变量,系统将会在每次服务由失效状态转成功状态时调用upalerts告警程序,而非默认的"down"告警程序。
 
alert alert [arg...]

   该选项允许在一个服务失效周期内触发多个告警事件。Alert选项指明了告警的标识符关键字,随后跟着一个可选的退出变量,其作用等同于monitor中的变量定义,只是该变量不以;;结尾。退出变量的形式大致如下:
   exit=x 或者 exit=x-y
  表明仅当monitor的退出返回值在exit定义的范围内才会触发该告警程序。例如,告警行设定为
  alert exit=10-20 mail.alert mis
  仅当monitor的返回变量mis的值在10~20之间时,表示告警脚本程序mail.alert才会被调用。
  这一特性允许你将不同级别的告警任务按照不同的安全等级分层。
  mon会将ALERT PROGRAMS段里所提到变量自动传递给告警程序。

failure_interval timeval
 当服务检测到失效时,调整interval的周期值,使之和failure_interval设定的周期值相同。当服务恢复成功状态后,重置interval到初始值。

upalert alert [arg...]
 An upalert is the compliment of an alert。当一个服务的状态由失效转换到有效状态时,如果相应的“down”告警程序已经事先触发过,则会调用upalert告警程序。upalert 支持和alert一样的参数调用方法,也可以使用命令行参数-u 来指定一个普通的告警脚本作为upalert调用。每个period定义可以指定多个upalert告警程序。如果设定了per-period no_comp_alerts选项,则不管失效时是否触发"down"告警程序,最终都会调用upalert。

startupalert alert [arg...]
 仅当mon服务启动执行时调用它指定的告警脚本。
 
upalertafter timeval

 和前面一样,也是跟随时间类型的参数("30s", "1m", 等等.),主要用于控制upalert的触发时机。当一个被监视的服务在down状态保持一段时间(大于等于它定义的timaval)后恢复正常状态时, 相关的upalert脚本将会被调用。使用该选项可以防止由于“短调用”(频繁调用upalert)产生的性能问题。
 
认证配置文件

 由配置信息文件中authfile变量所指定的用户认证文件(也可以通过命令行参数-A指定)会在监视器启动时加载。该文件定义了用户所能执行命令的限 制。这个文本文件包含了注释、命令行定义、陷阱认证参数等信息。注释行以一个可选的空格开始,紧接着是pound"#"符号,空行忽略。
 文件主要被分为命令行区和陷阱定义区。格式如下:
        command section
         内容
or
       trap section
         内容


 一个定义段的内容从上述的定义句开始,一直到文件末尾或者遇上另一个定义结束。

 命令定义段由多个命令组成,每个命令后面由":"与用户列表隔开。这就表示只有所列出的用户采用有该命令的执行权限。假设用户文件没有指定"命令:用户 "列表,则mon将不接受任何用户的访问。显然,也可以在每个用户名前使用"!"表示将该用户排除在许可中。如果用户名使用了"AUTH_ANY",则所 有的用户都被允许执行该命令。

 trap段设定配置文件限制可以发送陷阱的用户和主机。格式如下:
 主机(主机名或者ip地址) 用户名 密码
 如果主机名为*,表示允许任何主机发送陷阱。如果用户名为*,表示允许所有用户发送陷阱。如果主机名和用户名为空,表示不接受任何用户和主机的陷阱事件。

 以下是一个范例:
 
command section

list: all
reset: root,admin
loadstate: root
savestate: root

trap section
127.0.0.1 root r@@tp4sswrd

 上面的配置告诉mon进程,允许所有用户访问list命令,用户root允许额外操作"reset", "loadstate", "savestate"三个命令,用户admin允许额外执行reset操作。

客户-服务接口

 mon服务进程监听TCP端口2583,也可以用命令行参数-p指定其他端口。通过shell执行命令行的方式运行mon服务。目前,服务在同一时刻只能接受一个用户。这一点会在今后的版本改进。
 
MON的陷阱问题

 mon很方便实现对特殊的"mon陷阱"进行接收,不管发出陷阱的是本地主机还是远程主机。目前,mon仅在perl语言的基础上实现发送mon陷阱的 功能,实现该功能的是perl的扩展模块Mon::Client接口。尽管现有的UDP包格式足够强大,可以允许你用任何语言编写陷阱功能。
 陷阱可以被mon配置文件中设定的任何watch/service组接收,然而我们还是建议你为陷阱设定专门的watch/service组。当你定义 一个专门的watch/service组时,不要包含任何"monitor"申明,因为陷阱处理不需要调用监视器。因此,也不用在watch定义中设定 hostgroup组,也不要包含任何实际的主机名。你要做的仅仅是建立用户名,mon会在运行时自动为你创建watch组。
 
以下是范例配置:

watch trap-service
       service host1-disks
               description TRAP: for host1 disk status
               period wd {Sun-Sat}
                       alert mail.alert someone@your.org
                       upalert mail.alert -u someone@your.org

 因为mon服务在一个默认得udp端口上监听任何陷阱,并缺省地将所有陷阱交给unknown组或者服务处理。但是你必须在配置文件中建立 “default”watch组和相应的“default”service组,并在这个特殊的组里设定必要的告警行为。如果你没有设定 default/default (watch组/service)的话,所有未知的陷阱事件都会由syslog处理记入日志文件,但不会发出告警消息。
 注意: 仅允许有一个 default/default 组合来处理缺省的监控和告警事务。
 如果不明白上面这一点的报警程序,就会错误的发送混乱的告警消息,可能在捕获到一个失效陷阱后,又紧跟着一个服务成功(ok)的陷阱消息,足以让人一头 雾水。关于这一点也可以看看前面提到的一个报警变量MON_TRAP_INTENDED 。千万不要在产品化的软件包中使用default/default组来捕获所有的陷阱行为,这会给你带来很多麻烦。如果你的确那么懒惰,不想写专门的陷阱 处理定义,那你最好禁用upalert的使用。并且在发送陷阱消息时使用环境变量MON_TRAP_INTENDED 来使你的陷阱消息看上去更友好、易懂一些。
这里是default的范例:


watch default
       service default
               description Default trap service
               period wd {Sun-Sat}
                       alert mail.alert someone@your.org
                       upalert mail.alert -u someone@your.org


 

范例

 范例位于发行包附带的example.cf中。


阅读(1948) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~