第 7 章 运行Nagios的基本操作

7.1. 验证配置文件的正确性

每次修改过你的配置文件,你应该运行一次检测程序来验证配置的正确性。在运行你的Nagios程序之前这是很重要的,否则的话会导致Nagios服务因配置的错误而关闭。

为验证你配置,运行Nagios带命令行参数 -v,象这样:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

如果你确实忘记了一些重要的数据或是错误地配置了,Nagios将会给出一个报警或是一个错误信息,其中会给出错误的位置。错误信息通常会打印出错误配置的文件中的那一行。在错误时,Nagios通常是在预检查出有问题打印出问题的源配置文件行后退回到命令行状态。这使得Nagios不会因一个错误而落入需要验证一个因错误而嵌套的配置循环错误之中。报警信息可通常是被忽略的,因为一般那些只是建议性的并非必须的。

一旦你已经验证了你配置文件并修改过你的错误,就可以继续下去,启动或重启Nagios服务了。

7.2. 启动与停止Nagios

有多于一种方式来启动、停止和重启动Nagios,这里在有更通常做的方式...

提示

在你启动或重启动你的Nagios程序之前,你总是要确保你验证你的配置文件已经通过。

7.2.1. 启动Nagios

  1. 初始化脚本:最简单的启动Nagios守护进程的方式是使用初始化脚本,象这样:
    /etc/rc.d/init.d/nagios start
  2. 手工方式:你可以手动地启动Nagios守护进程,用命令参数-d,象这样:
    /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

7.2.2. 重启动Nagios

当你修改了配置文件并想使之生效的话,重启动或重载入动作是必须的。

  1. 初始化脚本:最简单地重启动Nagios守护进程的方式是使用初始化脚本,象这样:
    /etc/rc.d/init.d/nagios reload
  2. Web接口方式:你可以利用WEB接口,通过点击“进程信息”的超链接页面里的“重启动Nagios进程”来重启动Nagios,见图
  3. 手工方式:你可以手动地发一个SIGHUP信号,象这样:
    kill -HUP <nagios_pid>

7.2.3. 停止Nagios

  1. 初始化脚本:最简单地停止Nagios守护进程的方式是通过初始化脚本,象这样:
    /etc/rc.d/init.d/nagios stop
  2. Web接口方式:你可以利用WEB接口,通过点击“进程信息”的超链接页面里的“关闭Nagios进程”来停止Nagios,见图
  3. 手工方式:你可以手动发一个SIGTERM信号,象这样:
    kill <nagios_pid>

7.3. 快速启动选项

7.3.1. 介绍

只有很少几件事可以减少Nagios的启动或重启总时间。加速启动方法包括有移除些负担还包括加快配置文件处理过程。

利用这些技术在如下一种或几种情况时特别有效:

  1. 大型安装配置
  2. 复杂地配置(过度地利用模板特性)
  3. 需要进行频繁重启动的安装模式

7.3.2. 背景

每次Nagios启动和重启时,在它着手进行监控工作之前必须要处理配置文件。启动过程中的配置处理包括如下几步:

  1. 读入配置文件
  2. 解析模板定义
  3. 重粘连("Recombobulating")对象(是我想到的应做各种工作)
  4. 复制对象定义
  5. 继承对象属性
  6. 对象定义排序
  7. 验证对象关联关系的完整性
  8. 验证回路
  9. 和其他...

当有很大的或是很复杂的配置文件要处理时有几步非常消耗时间的。有没有加快这些的办法?当然有!

7.3.3. 评估启动时间

在做让启动速度更快的事情之前,需要看看可能性有多少和是否有必要涉足此事。这个比较容易-只是用-s命令行开关启动Nagios以取得计时和调度信息。

下面是个输出样例(做过精减,只是显示了有关部分),在这个例子中,假定Nagios配置为对25个主机和超过10,000个服务进行监控。

/usr/local/nagios/bin/nagios -s /usr/local/nagios/etc/nagios.cfg Nagios 3.0-prealpha Copyright (c) 1999-2007 Ethan Galstad (http://www.nagios.org) Last Modified: 01-27-2007 License: GPL Timing information on object configuration processing is listed below. You can use this information to see if precaching your object configuration would be useful. Object Config Source: Config files (uncached) OBJECT CONFIG PROCESSING TIMES (* = Potential for precache savings with -u option) ---------------------------------- Read: 0.486780 sec Resolve: 0.004106 sec * Recomb Contactgroups: 0.000077 sec * Recomb Hostgroups: 0.000172 sec * Dup Services: 0.028801 sec * Recomb Servicegroups: 0.010358 sec * Duplicate: 5.666932 sec * Inherit: 0.003770 sec * Recomb Contacts: 0.030085 sec * Sort: 2.648863 sec * Register: 2.654628 sec Free: 0.021347 sec ============ TOTAL: 11.555925 sec * = 8.393170 sec (72.63%) estimated savings Timing information on configuration verification is listed below. CONFIG VERIFICATION TIMES (* = Potential for speedup with -x option) ---------------------------------- Object Relationships: 1.400807 sec Circular Paths: 54.676622 sec * Misc: 0.006924 sec ============ TOTAL: 56.084353 sec * = 54.676622 sec (97.5%) estimated savings

OK,看看发生了什么。先看汇总信息,大概有11.6秒用于处理配置文件有56秒来验证配置。这意味着每次用这个配置启动或重启Nagios时,它大约会有68秒来做启动事项而不会做任何监控的事情!如果是在定制配置Nagios过程中也是不可容忍的。

那么怎么办?看一下输出内容,如果运用了优化选项,Nagios将可以在配置读取过程节省大约8.4秒而在验证过程可节省63秒。

哇!从68秒到只有5秒?!是的!看看下面是怎么做到的。

7.3.4. 预缓存对象配置

Nagios可在解析配置文件过程中做些加速,特别是当配置中使用了模板来做继承等的时候。为降低Nagios解析配置文件的处理时间可用Nagios预处理与预缓存配置文件的功能。

当用-p命令参数来运行Nagios时,Nagios将读入配置文件,处理后将配置结果写入预缓存文件(由主配置文件中precached_object_file域指定文件位置)。该预缓存配置文件将包含了预处理后的信息将使Nagios处理配置文件更容易和快捷。必须把-p参数选项与-v或-s命令参数一起使用,如下例。注意要做预缓存配置文件之前配置应是已被验证过的。

/usr/local/nagios/bin/nagios -pv /usr/local/nagios/etc/nagios.cfg

预缓存配置文件有大小明显地比原有配置文件大。这是正常的由设计初衷决定的。

一旦预缓存对象配置文件创建,可以启动Nagios时带上-u命令行选项以让它使用预缓存配置文件而不是配置文件本身。

/usr/local/nagios/bin/nagios -ud /usr/local/nagios/etc/nagios.cfg

重要

如果更改了配置文件,必须在Nagios重启动前要重新验证和重建预缓存配置文件。如果没有重构建预缓存配置文件,Nagios将使用旧配置运行因为是由旧配置生成的预缓存文件,而不是用新的原始配置文件。

7.3.5. 跳过回路检测

第二步(也是最耗时)部分是对配置中的回路进行检测。在上面例子中这一步几乎用去了1分钟来验证配置验证。

什么时回路检测和为什么要做这么长时间?回路检测逻辑是为了确保在你的主机、主机依赖、服务和服务依赖等对象之间不存在任何的循环路径。如果在配置中有循环路径,Nagios将会因死锁而停止。用时较长原因是由于没有使用较高效的算法。欢迎提供更高效发现回路的算法。提示:这意味着EMail给我有关Nagios论文的计算机科学系研究生将有机会得到些回赠代码。:-)

如果你想在Nagios为启动时跳过回路检测,可以在命令行回加上-x参数,象这样:

/usr/local/nagios/bin/nagios -xd /usr/local/nagios/etc/nagios.cfg

重要

当要在启动和重启前跳过回路检测之前,验证配置文件的正确性是非常非常重要的!没有这么做将有可能导致Nagios逻辑上的死锁。你已被我提醒过了啊!

7.3.6. 联合起来使用

按照下面步骤将会使用预缓存配置文件并且跳过回路检测以充分加速启动。

1、验证配置文件并生成预缓存配置文件,用如下命令:

/usr/local/nagios/bin/nagios -vp /usr/local/nagios/etc/nagios.cfg

2、如果Nagios正在运行,停掉它;

3、启动Nagios,让其使用预缓存配置文件而且跳过回路检测:

/usr/local/nagios/bin/nagios -uxd /usr/local/nagios/etc/nagios.cfg

4、当更改了原始配置文件时,需要重启动Nagios并修改现有内容,重新回到步骤1去验证配置并重构预缓存配置文件。一旦做好了,就可以通过Web接口来重启Nagios或是在系统中发个SIGHUP信号,如果没有重构预缓存配置文件,Nagios将用旧配置运行,因为它首先会读入缓存配置文件而不是源配置文件;

5、就这么多!祝你可以加快启动过程。

7.4. 关于CGI程序模块的信息

7.4.1. 说明

这里将描述一下随Nagios发行的几个CGI程序模块,每个CGI模块都需要做充分的授权设置。默认情况下CGI程序将依依赖于你在Web服务程序里的授权和对你所请求的视图给你的授权。更多的有关授权配置的信息可以在这里找到。

7.4.2. 索引

Status CGI

表 7.1. 


模块文件名status.cgi

描述:在Nagios里这是一个很重要的CGI模块。它可以让你观测到被监测的全部主机和服务的当前状态。它将生成本个主机类型的输出报告 - 全部的(或部分主机)以成组方式给出状态报告和全部的服务(或部分主机上的全部服务)的状态。

授权要求:

  1. 如果你已被授权对全部主机你就可以看到全部主机和全部服务。
  2. 如果你已被授权对全部的服务你就可以看到全部服务。
  3. 如果你是一个被授权的联系人你就可以看到以你为联系人的全部主机和服务。

Status Map CGI

模块文件名statusmap.cgi

描述:这个CGI模块将创建一个基于你监测网络全部主机的二维地图。使用Thomas Boutell的gd库(版本是1.6.3或更高)来生成一个PNG图,里面的二维坐标依赖于每个主机对象的定义(包括可以给每个主机定义一个好看的图标)。如果你宁可让CGI程序自己自动地设定主机的坐标,用一下这个default_statusmap_layout域来指定一个二维图生成算法。

授权要求:

  1. 如果你已被授权对全部主机你就可以看到全部主机。
  2. 如果你是一个被授权的联系人你就可以看到以你为联系人的主机。

注意

没有被授权的用户只能看到那些主机的节点处于未知状态。我真的让它无法看到任何东西,如果你无法看到主机依赖的话,你甚至无法看到一个二维图...

WAP Interface CGI

模块文件名statuswml.cgi

描述:这个CGI模块将给WAP接口提供网络状态服务。如果你有一个WAP设备(象一个带因特网接入能力的移动电话),你可以在移动中观看状态信息。在主机组汇总、主机概览、主机详细信息、服务详细信息、全部的故障告警、全部未处理故障等等不同的报告,除了状态信息外,同样可以从移动电话里来设置取消告警、关闭检测和通知故障等。这个功能很酷吧?

授权要求:

  1. 如果你已被授权看系统信息你可以看到Nagios进程信息。
  2. 如果你已被授权对全部主机你可以看到全部主机和服务的状态数据。
  3. 如果你已被授权对全部的服务你可以看到全部服务的状态数据。
  4. 如果你是一个被授权的联系人你可以看到以你做为联系人的主机和服务的状态数据。

Status World CGI (VRML)

模块文件名statuswrl.cgi

描述:这个CGI模块将对你所监控网络的全部主机生成一个三维虚拟视图。这些绘制中所用的主机三维坐标(以及渲染图片)来自于配置文件中的主机定义。如果你想让CGI程序模块自动地生成三维坐标,可以设置default_statuswrl_layout域来指定一个三维图坐标生成算法。同样,在你要做观察之前你也应在你系统里安装一个虚拟现实的浏览器(象CortonaCosmo PlayerWorldView)。

授权要求:

  1. 如果你已被授权对全部主机你就可以看到全部主机。
  2. 如果你是一个被授权的联系人你就可以看到以你为联系人的主机。

注意

对于没有被授权的用户,将在没授权的主机节点上看到未知状态。我真的让他无法看到任何东西,如果你无法看到主机依赖关系时你甚至无法看到一个三维图...

Tactical Overview CGI

模块文件名tac.cgi

描述:这个CGI模块给了一个网络活动的“鸟瞰图”。这容许你快速地得到网络概况、主机状态和服务状态。在已被“处理”的故障(象被认同的和关闭告警的故障)和没有被捕获的问题之间做出区分辨别,且是需要提请关注的。如果你在监控大量的主机和服务并且想只是用一组画面来分析处理这些故障的话这个会很有用。

授权要求:

  1. 如果你已被授权对全部主机你可以看到全部主机和全部服务。
  2. 如果你已被授权对全部的服务你可以看到全部服务。
  3. 如果你是一个被授权的联系人 你就可以看到以你为联系人的全部主机和服务。

Network Outages CGI

模块文件名outages.cgi

描述:这个CGI将给出你网络中的引发网络出错的“问题”主机列表。这对于管理一个大型的网络和想快速定位网络故障来源的情况是很有用的。列表中的主机将按出错问题的先后关系来排列。

授权要求:

  1. 如果你已被授权对全部主机你就可以看到全部主机。
  2. 如果你是一个被授权的联系人你就可以看到以你为联系人的主机。

Configuration CGI

模块文件名config.cgi

描述:这个CGI模块将让你可以看到全部对象(象主机、主机组、联系人、联系人组、时间周期、服务等等)的配置,这些配置写在你的对象配置文件里面。

授权要求:

  1. 你必须被授权可以看到任何配置信息和任意一种配置内容。

Command CGI

模块文件名cmd.cgi

描述:这个CGI模块将让你给Nagis进程发出命令。虽然它有很多个命令参数,但你最好是独立地使用它们。在不同的Nagios版本间它们有很大地不同。用extended information CGI模块来做为发布命令的起点。

授权要求:

  1. 你必须被授权做系统命令以使你发出对Nagios有影响的命令(重启动、关闭、模式切换等等)。
  2. 如果你被授权在全部主机上执行命令以使你可以对全部主机和服务发出命令。
  3. 如果你被授权对全部服务执行命令以使你可对全部服务发出命令。
  4. 如果你是一个被授权的联系人你可以对你做为联系人的主机和服务上发出命令。

注意

如果没有使用在CGI配置文件里use_authentication选项,这个CGI模块将不会让你对Nagios执行任何命令,这是对你设置的一种保护。如果你决定在WEB里设置成非授权管理状态来运行,我建议你最好移走这个CGI模块。

Extended Information CGI

表 7.2. 


模块文件名extinfo.cgi

描述:这个CGI模块将让你看到Nagios进程信息、主机和服务状态统计、主机和服务注释和其他信息等。同样它也可以做为对Nagios发出命令的服务,跟command CGI模块一样。虽然它有几个命令参数,但你最好是独立地用它们 - 在不同的Nagios版本之间它们会有不同。你可以通过点击在页面边上的“网络健康状况”和“进程信息”里的链接来进到这个CGI模块,也可以通过点击status CGI里的主机或服务上的链接进入。

授权要求:

  1. 你必须被授权看系统信息以使你可以看到进程信息报告。
  2. 如果你已被授权对全部主机你可以看到全部主机和服务的扩展信息。
  3. 如果你已被授权对全部的服务你可以看到全部服务的扩展信息。
  4. 如果你是一个被授权的联系人你可以看到以你做联系人的全部主机与服务的扩展信息。

Event Log CGI

模块文件名showlog.cgi

描述:此CGI模块用于显示日志文件。如果已设置日志回滚使能,可以用顶部的导航链接来在打包的日志文件中浏览当前告警。

授权要求:

  1. 你必须被授权看系统信息以使你可看到日志文件报告。

Alert History CGI

模块文件名history.cgi

描述:这个CGI模块被用于显示部分或是全部主机的历史故障。这个是显示日志文件CGI模块信息的子集。你可以过滤显示输出内容,只挑出指定类型的故障来查看(如按硬故障和软故障分类,或按服务和主机告警的类型来显示等)。如果你设置了日志回滚,你可以通过页面顶端的导航链接来在打包的日志文件中查看当前的历史信息。

授权要求:

  1. 如果你已被授权对全部主机你可以看到全部主机和服务的历史信息。
  2. 如果你已被授权对全部的服务你可以看到全部服务的历史信息。
  3. 如果你是一个被授权的联系人你可以看到以你做为联系人的全部服务和主机的历史信息。

Notifications CGI

模块文件名notifications.cgi

描述:这个CGI模块可以用于显示给各类联系人而发出主机和服务的通知。这个输出是 The output is basically a subset of the information that is displayed by the 日志CGI模块显示内容的子集。你可以过滤输出显示内容,只是显示指定的通知类型(如服务通知、主机通知、给指定联系人的通知等)。如果设置了日志回滚选项使能,你可以通过在页面顶端的导航链接来在打包的日志文件中查看当前的通知。

授权要求:

  1. 如果你已被授权对全部主机你可以查看全部的主机和服务的通知报告。
  2. 如果你已被授权对全部的服务你可以查看全部服务的通知。
  3. 如果你是一个被授权的联系人你可以查看以你为联系人的全部服务和主机的通知报告。

Trends CGI

模块文件名trends.cgi

描述:这个CGI模块可以创建一个主机或服务的任意时间段内的状态趋势图。为了让此CGI模块更有用,你需要设置日志回滚选项使能并保留好打包的日志文件,打包日志文件保留路径在log_archive_path域里设置。这个CGI模块使用了Thomas Boutell的gd库(版本1.6.3或更高)以创建状态趋势图。

授权要求:

  1. 如果你已被授权对全部主机你可以查看全部主机和全部服务的趋势图
  2. 如果你已被授权对全部的服务你可以查看全部服务的趋势图。
  3. 如果你是一个被授权的联系人你可以查看以你为联系人的全部服务和主机的趋势图。

Availability Reporting CGI

表 7.3. 


模块文件名avail.cgi

描述:这个CGI模块可用于查看用户定制的指定时间段内的可用性报告。为使这个CGI程序更多地被运用,你要设置日志回滚使能并保留打包的日志文件,日志文件保存于log_archive_path域里面。

授权要求:

  1. 如果你已被授权对全部主机你可以查看全部主机和全部服务的可用性数据报告。
  2. 如果你已被授权对全部的服务你可以查看全部服务的可用性数据报告。
  3. 如果你是一个被授权的联系人你可以查看以你为联系人的全部服务和主机的可用性数据报告。

Alert Histogram CGI

模块文件名histogram.cgi

描述:这个CGI模块可用于显示在用户定制的时间段内的主机和服务的可用性曲线。为使这个CGI更多地利用,你须设置日志回滚选项并保留你的打包日志文件,日志文件保存于log_archive_path域设置的路径里。这个CGI模块使用了Thomas Boutell的gd库(版本1.6.3或更高)以创建历史曲线图。

授权要求:

  1. 如果你已被授权对全部主机你可以查看全部的主机和全部服务的历史曲线。
  2. 如果你已被授权对全部的服务你可以查看全部服务的历史曲线。
  3. 如果你是一个被授权的联系人你可以查看以你为联系人的全部服务和主机的历史曲线报告。

Alert Summary CGI

模块文件名summary.cgi

描述:这个CGI模块提供了有关主机和服务告警的概要性的报告,包括总的和最大的告警源等。

授权要求:

  1. 如果你已被授权对全部主机你可以查看全部主机和全部服务的汇总信息。
  2. 如果你已被授权对全部的服务你可以查看全部服务的汇总信息。
  3. 如果你是一个被授权的联系人你可以查看以你为联系人的全部服务和主机的汇总信息。