使用 Nagios 进行网络管理

作者:Richard C. Harlan

当我在约翰迪尔农业营销中心开始工作时,我们在美国和加拿大周围有 12 个站点。这些地点混合使用了各种设备,包括较旧的服务器和桌面,提供从域服务到打印的所有功能。这给我们作为一个集中式 IT 组织带来了问题。我们如何管理和监控这些不同站点的服务器和 WAN 线路?

大约两年前,我们决定将用户数据从网络中心移到边缘。但是我们如何监控所有站点中来自多个制造商的所有设备?为了让您了解我们监控的设备,我们的每个主要站点都有一台 Maxtor 4100 网络附加存储 (NAS) 服务器,以及一台 Compaq 1600 服务器,用作打印服务器和域控制器。一些小型站点使用 Dell GX1 桌面作为本地打印服务器。在我们的主站点,Compaq TaskSmart N2400 是我们的主文件服务器。

由于这种多样化的设置,没有一家制造商的管理工具集能够满足我们的需求,而且使用多种工具来监控一切的想法并不是我想要做的。因此,我们不得不在制造商中立的监控工具中进行选择。我们发现的似乎分为三个不同的层级。低端解决方案无法很好地扩展以监控不断增长的服务器和主机数量。在大多数情况下,我们将被程序附带的工具所困扰。其他工具是我所谓的顶级产品,例如惠普的 OpenView。它会随着我们的需求扩展和增长,并监控我们想要的东西,但它的价格超出了我们的承受范围。

当我们开始对任何适合我们情况的东西失去信心时,我偶然发现了一个名为 NetSaint 的项目。NetSaint 是一个监控系统,它可以随着我们的需求增长,并允许我们使用开放框架监控我们想要的东西,从而允许我们编写自己的插件。NetSaint 不仅可以监控服务器和服务,还可以通过跟踪它向我们展示的趋势,使我们的工作更具前瞻性,而不是被动应对。

一切进展顺利,NetSaint 在约翰迪尔的一个较小部门中可靠地执行其工作。随着时间的推移,农业部门启动了一个 IT 部门化项目,目标是能够利用整个部门的专业知识领域。

随着这个新项目的启动,旧的监控问题再次浮出水面。当我们尝试转向更集中的 IT 结构时,我们需要执行其他监控程序所做的一切。此外,每个部门都可以自行做出 IT 决策以适应自身需求。因此,问题是:我们如何才能将正在使用的多种监控解决方案转变为一个标准的解决方案?这个解决方案需要能够处理监控数百台主机和数千项服务的可能性,同时允许各个部门提取数据到图表中以监控趋势。更麻烦的是,需要监控的设备更加多样化,从 Network Appliance 到 Sun 再到 Dell。

我们仍然面临财务约束,这意味着 OpenView 类别的产品超出了我们的承受范围。由于我们正在生产环境中使用 NetSaint,我们决定继续研究农业部门的 NetSaint 解决方案。我学到的第一件事是,如果您停止关注开源社区一段时间,当您回来时,很多事情都会发生变化。在这种情况下,NetSaint 不复存在了;它的后代是 Nagios (www.nagios.org)。在大多数情况下,Nagios 是 NetSaint 发展的下一步。我承认看到企鹅从主页上消失有些伤感,但我已经习惯了并继续前进。

研究该系统后,我们决定使用多层模型,每个加入监控项目的部门都配备 Nagios 服务器。这主要是为了确保没有一台服务器会过载,从而使我们能够维持所需的监控水平。考虑到这一点,我们在伊利诺伊州莫林的总部安装了父服务器,第一个子服务器安装在我们在堪萨斯州莱纳克萨的农业营销地点。

父服务器和子服务器的 Nagios 安装过程相同。我们在两者上都加载了 Red Hat 8,然后安装了 Nagios。系统附带的文档相当完整,可以轻松引导您完成安装过程。除了 Nagios 之外,我们还在每台服务器上安装了一个名为 Nagat 的程序(图 1)。Nagat 是 Nagios 的基于 Web 的配置工具。通过此安装,系统允许您在网页上填写空白,并根据您的答案生成配置文件。因此,经验不足的人也可以配置 Nagios、其服务和主机,而无需接触终端窗口。

Network Management with Nagios

图 1. Nagat 服务页面

由于我们使用了 Nagat,我们在 Red Hat 8 安装中遇到了一些困难。为了解决兼容性问题,我们不得不安装早期版本的 PHP (4.1.2) 和 Apache (1.3)。解决此问题后,我们能够非常快速地启动并运行系统。Nagat 有一些容易解决的错误,其中一个发生在服务编辑页面上:系统不保存联系人组。要解决此问题,您只需在第 39 行的 case 语句后添加以下几行

$saveobject['contact_groups'] =
    @implode("'",$saveobject['contact_groups']);

通过这样做,您将能够在更新服务时保存对联系人组的更改。

一切安装完毕后,我们开始着手整个项目中最困难的部分——服务器的配置。配置服务器本身并不难,难的是弄清楚我们希望系统做什么以及实现目标的路径。我们做出的第一个决定之一——我们现在正在扭转——是在没有原生数据库支持的情况下编译 Nagios。它满足了我们一年多的需求,但随着我们将更多部门添加到 Nagios 监控平台,挖掘 Nagios 提供的数据变得越来越重要。Nagios 附带的简单图表已不再足够。我们希望以尽可能多的方式对数据进行趋势分析,但这对于我们原始 Nagios 安装中的平面文本文件来说并不容易实现。

下一步是主配置,在大多数情况下,这实际上非常简单。您需要研究和探索一些事情,才能充分利用 Nagios 系统。其中之一是智能检查的概念。Nagios 系统不会同时运行所有服务检查,从而导致 CPU 使用率过高,而是将检查分散在五分钟内,从而降低 CPU 使用率。另一个需要关注的是并行服务检查;它们允许您一次运行多个服务检查,这对于具有多个 CPU 的系统非常有帮助。

父服务器和子服务器的配置几乎相同,但有两个重要的区别。子服务器默认关闭通知并启用主动检查,而父服务器则完全相反。这样做是为了降低父服务器的负载,并仅从一台计算机发送所有通知。[父服务器和子服务器的配置文件可在 ftp.linuxjournal.com/pub/lj/listings/issue111/6767.tgz 获取。]

从那里开始,下一步是定义 Nagios 应该执行的命令。这是我向使用此系统的人强调的一件事:Nagios 是一个框架。我的意思是,Nagios 本身不执行任何检查;这项工作留给 Nagios 可以调用的插件来完成。这很好,因为它允许您轻松编写自己的插件,只要您坚持 Nagios 提供的框架即可。由于我们编写的插件,我们现在能够监控最初不在 Nagios 插件分发中的系统。例如,我们现在能够监控 NetApp 文件管理器,从我们的 HP 打印机中提取页面计数,并将 Compaq Insight Manager 数据集成到 Nagios 系统中。

监控 Microsoft Windows 服务器的简单方法(但不是唯一方法)是使用 NSClient。NSClient 是一个加载在您的 Windows 机器上的程序,它作为服务运行。要运行它,请在 Windows 服务器上打开一个端口。为了安全起见,您可以使用密码访问该端口。在撰写本文时,该程序中没有内置加密功能用于与 Nagios 服务器通信。该插件允许您轮询服务器的内存利用率、磁盘利用率、处理器负载以及可以使用 Windows 性能管理器工具轮询的大多数其他信息。

一种稍微不同的方法用于监控您的 Linux 和 UNIX 系统。运行一个名为 Nagios Service Check Acceptor (NSCA) 的程序,可以在守护进程模式下或在 inetd 下运行。使用此程序,Nagios 启动一个名为 check_nsca 的插件,该插件在两台计算机之间打开一个加密会话,并运行插件来检查另一台计算机。系统的配置相当简单;在两台服务器之间选择一个加密标准,并在客户端上定义插件命令。完成此操作后,您就可以开始将数据拉回到 Nagios 中。

正如我之前所说,我们现在正在从 Nagios 默认的平面文件迁移到后端数据库。我们计划使用这些数据,通过使用 Crystal Reports 等工具来提供更好的数据趋势分析。Nagios 提供对两个数据库的原生支持:MySQL 和 PostgreSQL。Nagios 文件中提供了用于设置数据库和准备 Nagios 所有字段和表的脚本。我们决定使用 PostgreSQL。数据库全部设置好后,您需要使用 --with-mysql-xdata--with-pgsql-xdata 重新运行配置脚本。xdata 设置系统以将数据库用于所有内容。到目前为止,唯一不支持数据库的部分是配置文件。

最后这句话提出了一个有趣的观点:2003 年 3 月推出了一款附加组件,一个用于 Nagios 的 Webmin 插件(图 2),名为 NagMIN。它不仅像 Nagat 一样允许基于 Web 的 Nagios 配置,而且还提供了一些其他产品迄今为止没有提供的功能。首先,它提供对 Nagios 配置文件的数据库支持。其次,如果您开始设置 Nagios 安装,端口扫描功能(图 3)非常有用。我还没有完全尝试过此功能,但它声称可以执行网络发现,并将发现的内容转换为 Nagios 配置文件,从而省去了您必须自己输入所有数据的麻烦。NagMIN 应该适用于大多数系统,但更专业的监控很可能仍然需要手动输入到系统中。如果您想了解有关此插件的更多信息,请访问 SourceForge.net 网页。

Network Management with Nagios

图 2. NagMIN 主页

Network Management with Nagios

图 3. NagMIN 端口扫描发现要监控的服务。

我们将 Nagios 服务器设置为父/子关系。为此,系统的设置需要与独立系统略有不同。首先,我们仅在父服务器上安装了 Web 界面(图 4 和图 5)。所有子服务器都使用被动检查将其检查结果传输到父服务器。为了实现这一点,我们定义了一个 OCSP 命令来运行脚本,以将数据提交到父 Nagios 服务器。通过使用 OCSP 命令来运行脚本,使其在 Nagios 运行的每次检查后执行。因此,在大多数情况下,只有子服务器需要运行主动检查。这允许 Nagios 父服务器仅运行 Web 界面,并在出现问题时发送通知。

Network Management with Nagios

图 4. Nagios 服务详情

Network Management with Nagios

图 5. 状态摘要

现在您已经了解了我们如何设置 Nagios,让我告诉您它为我们做过的一些事情。在今年年初左右,我们购买了一个数字温度计,名为 TempTrax,它可以与 Nagios 配合使用。我们用它来读取我们主计算机房的温度读数。大约在三月初,我们了解了 Nagios 对我们有多重要。在一个星期五的凌晨 12 点左右,我收到了一条寻呼,告诉我计算机房温度有警告。在我穿好衣服的时间里,系统开始发出关于计算机房温度的严重寻呼。当我到达工作地点时,温度已超过 80° 并且还在上升。由于 Nagios,我有足够的时间紧急呼叫我们的空调人员,并在对计算机造成任何严重损坏之前修复了设备。我们后来发现,另外两个监控计算机房空调设备的系统未能拨出并提醒系统监控人员。如果 Nagios 没有提醒我们计算机房的问题,第二天早上我将会遇到更大的问题。

总的来说,我不得不说 Nagios 是一款出色的网络监控产品。如上所述,它是一个框架,它本身做不了多少事情——但这正是使其成为如此优秀产品的原因。因为它是一个框架,它只做您希望它做的事情。作为一个开放框架,使用 Nagios 设计新插件就像将检查输出格式化为 Nagios 期望的格式一样简单。通过这种方式,您的插件能够使用 Nagios 提供的所有功能,这非常多。最后,Nagios 是您至少应该看一看的东西,如果不在您自己的位置进行测试安装的话。我认为您不会失望的。

Network Management with Nagios
电子邮件:HarlanRichard@JohnDeere.com

Richard C. Harlan 是堪萨斯州莱纳克萨市约翰迪尔农业营销中心的网络工程师。您可以通过 harlanrichardc@johndeere.com 与他联系。

加载 Disqus 评论