在上一篇文章中,介绍了OpenNMS中通知路径的定义,下面可以详细看下它的内容从其对应的XSD文件中,我们可以看到destinaPaths.xml文件其顶层元素为destinationPaths,具体内容包括如下:

  1. 包含一个头部定义
  2. 一个或者多个通知路径(path)

其中每个路径又由以下元素构成:

  • 一个或者多个通知目标(target)
  • 是否发送升级通知消息

另外对于通知路径而言,还有两个属性可供配置,即该通知路径名称,这个当然可以随便自己定义,但推荐的是以动宾结构来定义,即通知方式+通知目标,例如email-admin,这表示以email的方式通知admin用户。另外还有一个属性为initial-delay,该属性表示,当触发通知的事件发生后,等待多少时间开始发送该通知,默认为立即发送。即相当于initial-delay为0。

而通知目标(target)又由以下元素构成:

  • 目标名称
  • 是否开启自动通知
  • 一个或者多个通知方式

即针对每个通知目标,可以选择多种通知方式。这里的自动通知功能配置的作用在上一篇文章中介绍过,这里再提一下,当一些事件如接口down或者服务不可用后,会发送一个故障通知给用户,OpenNMS提供了一种自动确认机制,即当OpenNMS在以后某个时刻发现该故障恢复后,OpenNMS会生成一个对应的接口又UP或者服务又可用的事件,但OpenNMS会对该事件自动进行确认,从而触发OpenNMS自动发送该通知,通知用户接口UP或者服务可用的消息。但用户也可以选择不接受这种自动通知,就是通过这里的关闭自动通知即可。但是这里注意的是,如果在自动确认某个故障之前,用户已经收工确认了改故障,则不会再自动发送该通知。

在介绍上面的通知目标时,我们提到了可以为该目标定义一个或者多个通知方式,例如短信、Email、页面通知等,那么我们看下OpenNMS中式如何定义这些通知方式的。

在OpenNMS中,通知方式又称为通知命令(notification commands),它们的定义在文件notificationCommands.xml文件中。

下面看下该文件的定义,该文件根元素为notification-commands,它由一个header头定义及一个或者多个通知命令构成。而每个通知命令又由以下几个元素组成:

  • 命令名称
  • 执行该命令对应的java类或者某个可执行文件
  • 注释
  • 命令参数

另外通知命令还有个参数即该命令是否为二进制可执行文件,如果为二进制可执行文件,则直接执行该文件,否则调用其对应的java类。

关于通知这一部分最后还差一个重要内容就是通知消息本身了,前面介绍的都是关于通知的目的及通知的方式的定义,而现在我们就来关注通知本身的内容了,这部分内容定义在notifications.xml文件中,下面我们看下该文件的构成,该文件的根元素为notifications,其包含一个头部说明(header)及一个或者多个通知构成。每个通知又由以下部分构成:

  • UEI:触发该通知的事件的标识符
  • rule:定义了一个过滤器,即事件必须满足该过滤器,才会发送通知,通常为IP地址或者服务即只有当某些IP上的某些服务故障才会触发通知消息
  • destinationPath:通知目标路径
  • text-message:通知的文本内容
  • subject:通知主题,特别是在发送邮件通知时,可以用于作为邮件的主题
  • 通知状态:即该通知打开或者关闭,如果置为关闭,则永远不会发送该类型通知

以上只是通知定义中常用的一些组成部分,另外还有一些其他元素,就不在这一一赘述。

小结一下OpenNMS中的通知机制,通过定义通知路径来定义通知的目标对象及通知的方式,定义通知消息时,又将通知消息与通知路径关联起来,一个通知可以发送给多个用户,每个用户,可以以多种方式通知。