第 11 章 软件集成相关的内容

11.1. 软件集成概览

11.1.1. 介绍

Nagios可以非常容易地与现有框架集成,这也就是为何Nagios被广泛地应用的一原因。有不少方式来与现有管理软件进行集成,你使用管理软件来监控你所拥有的各种各样的新型或用户定制的硬件、服务或是应用程序。

11.1.2. 集成的要点

为了监控新硬件、服务或是应用程序,审视如下的文档:

为使Nagios取得外部应用程序的数据,审视如下的文档:

将状态、性能或是告警信息报送给外部应用,审视如下文档:

11.1.3. 集成事例

我记录下了一些事例来看一下Nagios是如何与外部程序集成的,它们是:

  1. TCP Wrappers(安全事件报警)
  2. SNMP Traps (卷备份作业的状态)

11.2. SNMP陷井集成

11.2.1. 介绍

注意

Nagios并没有设计成一个可替代完全SNMP管理功能的象HP OpenView或OpenNMS那样的应用程序。然而,你可以在Nagios中设置好SNMP陷井来接收来自于网络中的主机发出的SNMP警报。

SNMP的无所不管除了恶长以外一无是处。接收SNMP消息并将它放到Nagio里(象强制检测结果一样)是件很繁闷的事。为使之更简单,建议你取出Alex Burger的SNMP Trap Translator项目,它位于http://www.snmptt.org,这里面在Nagios里集成了Net-SNMP、SNMPTT及增强型的消息陷井处理系统。

好了,就这么多。

11.3. TCP Wrapper集成

11.3.1. 介绍

本文档解释如何容易地在Nagios里用TCP Wrapper对联接尝试被拒绝而产生警报。例如,一个非授权主机试图联接SSH服务器,可以在Nagios里收到一个含有被拒绝主机名的警报。如果在Linux/Unix机器上实现了这个功能,就会惊讶地发现在网络里竟会有如此多的端口扫描。

集成的前提是:

  1. 已经熟悉强制检测及其工作方式;
  2. 已经熟悉可变服务及其工作方式;
  3. 想要报警的主机(就是使用了TCP wrappers的机器)是一台远程主机(在例子中命名为firestorm)。如果与运行Nagios的机器是同一台,需要对下面给出的例子做些修改才行。
  4. 已经在Nagios监控服务机上安装有NSCA守护服务并且在那台安装有TCP Wrapper的远程主机上安装有NSCA(send_nsca)客户端软件。

11.3.2. 定义一个服务

如果条件具备,给远程主机(firestorm)创建一个主机对象定义

下一步,给这台运行有TCP Wrapper的主机(firestorm)在对象配置文件里加一个服务对象定义,服务对象定义的可能会是这样的:

define service{ host_name firestorm service_description TCP Wrappers is_volatile 1 active_checks_enabled 0 passive_checks_enabled 1 max_check_attempts 1 check_command check_none ... }

在服务对象定义里有几个很重要:

  1. 打开可变服务(is_volatile=1)功能开关,因为每一个检测到的报警都要送出一个通知;
  2. 服务的自主检测被关闭,而强制检测功能打开。这说明Nagios将不会对服务自主地做检测-全部报警信息将是由外部源通过强制方式提供给Nagios;
  3. 服务对象里的max_check_attempts值设定为1。这保证了当首条报警产生时就有送出一个通知。

11.3.3. 配置TCP Wrappers

现在需要修改在firestorm机器上的/etc/hosts.deny文件了。为使TCP wrappers对每个被拒绝的联接尝试都送出一条报警,需要加上这一行:

ALL: ALL: RFC931: twist (/usr/local/nagios/libexec/eventhandlers/handle_tcp_wrapper %h %d) &

这行里假定在firestorm机器上有个脚本名字是handle_tcp_wrapper且放在/usr/local/nagios/libexec/eventhandlers/目录下,下面会给出脚本内容。

11.3.4. 写那个脚本

最后一件事是在firestorm上写那个handle_tcp_wrapper脚本,它将会把报警送给Nagios监控服务器,它可能会是这样的:

#!/bin/sh /usr/local/nagios/libexec/eventhandlers/submit_check_result firestorm "TCP Wrappers" 2 "Denied $2-$1" > /dev/null 2> /dev/null

注意handle_tcp_wrapper脚本调用了submit_check_result脚本来真正地送出报警。假定Nagios服务器被命名为monitor,这个submit check_result脚本内容可能会是这样的:

#!/bin/sh # Arguments # $1 = name of host in service definition # $2 = name/description of service in service definition # $3 = return code # $4 = output /bin/echo -e "$1\t$2\t$3\t$4\n" | /usr/local/nagios/bin/send_nsca monitor -c /usr/local/nagios/etc/send_nsca.cfg

11.3.5. 搞好了

已经全配置完成了,可以重启动一下firestorm机器上的inetd进程,并且重启动一下监控服务器上的Nagios进程。搞掟了。当firestorm上的TCP wrappers拒绝了一次联接尝试时,将会在Nagios里看到一条报警。报警的插件输出将会是这样的:

Denied sshd2-sdn-ar-002mnminnP321.dialsprint.net 

11.4. Nagios外部构件

11.4.1. 介绍

Nagios有许多"外部构件"软件包可供使用。外部构件可以扩展Nagios的应用并使之与其他软件集成。

外部构件可用于:

  1. 通过WEB接口来管理配置文件
  2. 监控远程主机(*NIX, Windows,等)
  3. 实现对远程主机的强制检测
  4. 减化并扩展告警逻辑
  5. ...和其他更多事情

你可以通过访问如下站点找寻外部构件:

这里对一些我开发的外部构件给一个简洁的介绍...

11.4.2. NRPE

NRPE是一个可在远程Linux/Unix主机上执行的插件的外部构件包。如果你需要监控远程的主机上的本地资源或属性,如磁盘利用率、CPU负荷、内存利用率等时是很有用的。象是用check_by_ssh插件来实现的功能一样,但是它不需要占用更多的监控主机的CPU负荷-当你需要监控成百上千个主机是这个很重要。

NRPE外部构件包和文档可以在http://www.nagios.org/上找到。

11.4.3. NSCA

NSCA是一个可在远程Linux/Unix主机上执行强制检测并将结果传给Nagios守护进程的外部构件包。这在分布式冗余/失效监控的设置时非常有用。

NSCA外部构件包和文档可以在http://www.nagios.org/上找到。

11.4.4. NDOUtils

NDOUtils是一个可以把全部状态信息保存到MySQL数据库里的外部构件。外个Nagios的库实例都可以把它们监控的信息保存到统一的中心数据库并集中报告。它将为一个Nagios新的基于PHH的WEB接口程序提供数据源服务。

NDOUtils外部构件包和文档可以在http://www.nagios.org/上找到。