在 Ajax 应用程序上使用 Nagios

用开源的主机、服务和网络程序监视应用程序

主机、服务和网络的瓶颈常常需要付出昂贵的代价。为了确保服务级协议(Service Level Agreement,SLA)保证,必须通过网络对 Ajax 应用程序进行远程控制。在本文中,了解如何快速安装和启动 Nagios(一种开源主机、服务和网络监视程序)以及该程序是如何提供帮助的。学习如何监视冗余和故障转移,并了解一些能解决环境和网络问题的基于 Nagios 的产品。

Judith Myerson, 系统工程师兼架构师

Judith M. Myerson 是一位系统工程师兼架构师。她擅长的领域包括中间件技术、企业级系统、数据库技术、应用程序开发、网络管理、安全性和项目管理。



2008 年 9 月 05 日

简介

在我的一篇有关 Ajax 安全工具(参见 参考资料)的文章中,我推荐了一些增强应用程序的工具,包括 Firefox 工具和插件,用来提高和解决 Ajax 应用程序内部的安全问题。在另一篇有关 “加速 Ajax 应用程序的同时避开 Web 服务漏洞” 的文章中,我展示了什么是 Web 服务漏洞以及 Service Level Agreement 的重要性,还推荐了一些用来在网络上加速应用程序的工具。

在本文中,我将侧重介绍 Nagios,一种可用于 Ajax 应用程序的开源主机、服务和网络监视程序。我将讨论如何快速安装和启动 Nagios、访问 CGI 并监视主机和服务。我还会展示如何监视冗余和故障转移、监测和处理状态振荡(state flapping)以及解决安全性和性能问题。

Ajax 资源中心

请访问 Ajax 资源中心,这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki 和新闻。任何 Ajax 的新信息都能在这里找到。

在这之后,我还会依次讨论几个核心插件,比如 NRPE、NASA 和 NDOUtil,它们必须和 Nagios 程序一起使用。最后,我会给出一些示例,您将基于 Nagios 的产品用于自动化、环境监视和企业管理等解决方案时,可以参考它们。

Fedora 系统上的 Nagios

开始之前,先查找 Nagios 网站上的 Fedora 6、OpenSUSE 和 Ubuntu(有关链接,请参见 参考资料)的快速开始指南。如果想要有关针对其他操作系统和 Linux® 发布版的指导,可以转到 Nagios Community 并单击左边导航内的 User-Contributed Documentation。如果您还是找不到所需的文档,可以修改我在本文中给出的 Fedora 代码,以便能够在非 Fedora 系统上安装和配置 Nagios。

在安装 Nagios 之前,使用 yum 来安装 Apache、CC 编译器和 GD 开发库。安装 Nagios 会自动创建用于存储插件的 /usr/local/nagios 目录并配置 Nagios 来监视 CPU 负载、磁盘使用、内存使用和本地系统的其他方面。安装成功之后,就能访问 http://localhost/nagios/ 上的 Nagios 了。

创建帐号

创建一个帐号开始 Nagios。要创建帐号,必须具备根用户身份,然后才能创建一个新的 nagios 用户帐号并设定密码。清单 1 给出了创建帐号所需的代码。

清单 1. 创建用户帐号
su -l
/usr/sbin/useradd nagios
passwd nagios

创建一个新的 nagcmd 组以便外部命令可以通过 Web 界面提交。向此组添加 nagios 用户和 apache 用户,如清单 2 所示。

清单 2. 创建新组
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -G nagcmd nagios
/usr/sbin/usermod -G nagcmd apache

下载 Nagios

要存储下载的 Nagios,必须先创建一个目录,如清单 3 所示。

清单 3. 创建新目录
mkdir ~/downloads
cd ~/downloads

导航到 Nagios Web 站点并从该站点下载 Nagios。然后,解压缩 Nagios 源代码 tarball,如清单 4 所示。

清单 4. 解压缩源代码
cd ~/downloads
tar xzf nagios-3.0.2.tar.gz
cd nagios-3.0.2

配置 Nagios

接下来运行 Nagios 配置脚本,传递创建的组名。然后,编译 Nagios 源代码,如清单 5 所示。

清单 5. 运行和编译代码
./configure -with-command-group=nagcmd
make all

安装二进制文件、init 脚本、示例配置文件并设置外部命令目录上的权限,如清单 6 所示。

清单 6. 安装二进制文件并设置权限
make install
make install-init
make install-config
make install-commandmode

下一步是编辑 /usr/local/nagios/etc/objects/contacts.cfg 配置文件并将与 nagiosadmin 联系人定义相关的电子邮件地址更改为想要用来接收警告的地址。然后,通过输入 make install-webconf 在 Apache conf.d 目录安装 Nagios Web 配置文件。

创建管理员帐号

创建 nagiosadmin 帐号登录到 Nagios Web 界面。重启 Apache,使新设置生效,如清单 7 所示。

清单 7. 创建帐号并重启 Apache
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
service httpd restart

完成

解压缩 Nagios 插件源代码 tarball,然后编译和安装这些插件,如清单 8 所示。

清单 8. 解压缩并安装插件
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

将 Nagios 添加到系统服务列表并让它在系统启动时自动开启,如清单 9 所示。

清单 9. 向系统服务添加 Nagios
./configure --with-nagios-user=nagios --with-nagios-group=nagios
chkconfig --add nagios
chkconfig nagios on

接下来,验证示例 Nagios 配置文件。最后,如果没有错误,启动 Nagios。清单 10 展示了这个过程。

清单 10. 验证配置文件并启动 Nagios
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
service nagios start

访问 CGI

不要求您一定要访问 CGI。但如果您试图访问它们,就会得到 “Internet Server Error” 消息。这是因为 Fedora 自带已安装的 SELinux(Security Enhanced Linux),并且默认为 Enforcing 模式。

解决这个问题需要两个步骤。第一,检查 SELinux 是否处于 Enforcing 模式。然后,将 SELinux 设置为 Permissive 模式,如清单 11 所示。

清单 11. 检查 SELinux 并设置为 Permissive 模式
Getenforce
Setenforce 0

要想让此更改永久生效,必须修改 /etc/selinux/config 内的设置并重启。

也可以在 SELinux enforcing/targeted 模式下运行 CGI,如清单 12 所示。

清单 12. 在 SELinux 模式下运行 CGI
chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
chcon -R -t httpd_sys_content_t /usr/local/nagios/share/

完成之后,就可以在 http://localhost/nagios/ 访问 Nagios Web 界面了。

如果想要远程访问 Nagios 界面,请确保您机器的防火墙规则的配置允许访问 Web 服务器。

安装后的修改

安装完 Nagios 并确保其正确运行后,除了本地机器(监视主机)之外,您一定还想监视更多的东西。监视远程 Linux/UNIX™ 主机的一种方式是使用 NRPE 插件来监视磁盘使用、CPU 负载、内存使用和其他远程主机上的本地资源/属性。要获得更多的监视链接,请参看 参考资料

您最可能监视的是 Windows® 机器、Netware 服务器、路由器/交换机、网络打印机和公共可用的一些服务(HTTP、FTP、SSH 等)。

监视冗余和故障转移

有了冗余服务器之后,当运行 Nagios 的主服务器失败或部分网络不可用时(这可能会影响 SLA 保证),仍然能够监视网络。在实现冗余监视工具之前,要确保已经为主服务器和服务实现了事件处理程序、向 Nagios 发出了外部命令、在远程服务器上执行了 NRPE 插件,并已经用 check_nagios 插件检查了 Nagios 进程。您需要修改 Nagios 发布版的 eventhandlers 子目录中的示例脚本。

场景 #1

在一个实现了冗余的场景中,主服务器和辅助服务器均监视网络上相同的主机和服务。在正常情况下,只有主服务器会在有问题时向联系人发出通知。运行 Nagios 的冗余服务器只有在主服务器宕机或停止运行 Ajax 应用程序后才向联系人发出有关问题的通知。

要确保主服务器发生故障和辅助服务器实施接管之间的延迟时间最小。实现最短时间的办法之一是:让主服务器重新检查辅助服务器,以实现快速检测主服务器上的问题。

场景 #2

故障转移监视的基本目标是让主服务器上的 Nagios 进程运行,同时让辅助服务器上的 Nagios 进程空闲。如果主服务器上的进程停止运行(或主服务器死机),冗余服务器的 Nagios 进程就会开始实施监视。

检测和处理状态震荡

当服务或主机状态更改过频繁时,就会发生震荡,这会导致大量的问题和恢复通知。震荡常常表明配置有问题(比如限值太低)、服务有麻烦或存在影响 SLA 保证的网络问题。

当主机或服务的状态更改百分比超过最高限值时,主机或服务就会发生震荡。当主机或服务的状态更改百分比低于最低限值时,主机或服务就会停止震荡(假设之前一直震荡)。

对于主机和服务,都有全局的高、低限值以及您能配置的特定于主机和服务的限值。如果没有特定于主机和服务的限值,Nagios 将会使用全局限值来进行震荡检测。要启动震荡检测,需要将 flap_detection 指令设为 1。

安全性考虑

应该考虑的安全性措施有:使用专用的监视服务来为 Ajax 应用程序安装 Nagios,并确保只有 Nagios 用户才能在检查结果目录进行读写。不要作为根用户运行 Nagios。

如果使用的是外部命令,请确保在 /user/local/nagios/var/rw 目录内设置了适当的权限。您需要 CGI 身份验证并在命令定义中使用完整路径。

不要忘记用 $USERn$ 宏隐藏敏感信息,并确保访问远程代理。请加密各个 Nagios 安装之间、Nagios 服务器之间以及监视代理之间的通信信道。在通知中使用宏之前,从宏中去除危险字符,这也很重要。

优化 Nagios

本节讨论了优化 Nagios 改进服务器性能时需要考虑的几个问题。首先,禁用环境宏、调整缓冲槽并检查服务延时,以确定最大并发检查的最佳值。使用已编译的 — 而非已解析的 — 插件,定期进行主机检查并启用缓存主机检查。

接下来,优化硬件以获得最佳性能,设置 Nagios 守护进程在处理主机和服务检查结果时所能花费的最长时间。尤其重要的是,要充分利用 Multi Router Traffic Grapher(MRTG — 有关链接,请参见 参考资料)的图形性能统计数据来了解 Nagios 在一段时间内处理负载的情况,以及配置更改对它的影响。

获得 Nagios 插件

Nagios 自带三个核心插件:NRPE、NDOUtils 和 NSCA。除了它们提供基本的命令行选项外,还可以添加 Nagios Plugin Manual 内所列的其他选项。有关各插件和手册的链接,请参看 参考资料

NRPE

NRPE 的主要用途是让您能在远程 Linux/UNIX 机器上执行 Nagios 插件。NRPE 能通过 ftp 和 http 检查位于其他主机上的远程服务。Nagios 能够从监视主机监视远程机器上的 CPU、磁盘使用、内存使用和其他本地资源。

由于这些公共资源通常不会公开给外部机器,所以 NRPE 必须安装在远程机器上。它让您能在远程 Windows 机器上执行脚本并检查各项指标。

虽然使用 SSH 要远比 NRPE 安全,但 SSH 为监视主机和远程机器带来了更大的 (CPU) 负载。如果要监视成百上千的机器,这就成问题了。很多 Nagios 管理员都更趋向于使用 NRPE,因为它带来的负载较少。

NDOUtils

NDOUtils 让您能够将配置和事件的当前和历史数据从一个或多个 Nagios 实例导出到一个 MySQL 数据库。将来自 Nagios 的信息存储到数据库能加快检索速度。

NSCA

NSCA 在监视主机上安装,让您能够将来自远程机器和应用程序的被动警告和检查与 Nagios 集成。这对于处理安全性警告以及冗余和分布式 Nagios 设置都很有用。

产品示例

Websensor 是一种数字环境监视设备,能够监视温度、相对湿度和亮度(光度)、DC 电压和触点闭合。它还带有一种插件,让您能用 Nagios 监视各项环境指标。

WebReboot 是一种设备,让您无需物理访问服务器就可以远程重启、开启或关闭服务器。对于服务器锁定、BSOD、病毒感染和意外断电,它对恢复过程非常有用。

Opengear Management Gateways 和 Console Servers 可以帮助您检查 IT 基础设施中的问题。它使您可以安全访问和控制远程数据中心的所有服务器、路由器、交换机和电源设备,让您能够纠正问题。

要获得有关其他产品的信息,请访问 Nagios Web 站点。

结束语

本文帮您提前计划好用 Nagios 改进 Ajax 应用程序的监视和性能,Nagios 是远程服务器上的一种开源主机、服务和网络程序。由于网络性能不仅对于开发人员十分关键,对于测试人员、系统管理员和潜在客户也很重要,因此意识到并解决潜在性能和环境监视问题能让开发团队和用户体验畅通无阻。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Web development
ArticleID=333638
ArticleTitle=在 Ajax 应用程序上使用 Nagios
publish-date=09052008