Zenoss 和网络监控艺术

作者:Jeramiah Bowling

如果森林里有一棵树倒了,但没有人听到,它会发出声音吗?这是一个经典的疑问,旨在将你的思想带入禅宗般的寂静状态。无论你是否想听到树倒的声音,如果你运行一个网络,你可能都想在服务器宕机时听到警报。许多组织利用历史悠久的简单网络管理协议 (SNMP) 作为一种主动监控其网络并监听故障事件的方式。

在基本层面上,SNMP 只需要两个要素即可工作:管理服务器和被管理设备(或多个设备)。管理服务器以固定的时间间隔从被管理设备拉取状态和健康信息,并将这些信息存储在一个表中。当定义的行为发生时(例如错误或“陷阱”),被管理设备使用本地 SNMP 代理通知管理服务器,这些信息也存储在服务器的同一个表中。最终结果是一个准确、实时的中断报告机制。然而,SNMP 协议并未规定如何为最终用户呈现和管理这些表中的数据。这就是一个名为 Zenoss(发音为 Zeen-ohss)的有前途的新开源网络监控软件的用武之地。

Zenoss 适用于大多数 Linux 发行版,它建立在 SNMP 的基本操作之上,并使用全面的界面来管理即使是最大和最多样化的环境。“核心”版本的 Zenoss(本文中使用)在 GPLv2 许可下免费提供。还有一个企业版,提供额外的功能和支持。在本文中,我们在 CentOS 5.1 系统上安装 Zenoss,以观察其在网络监控角色中的实用性。然后,我们使用以下系统创建一个模拟的多系统服务器网络:一个基于 Fedora 的 Postfix 电子邮件服务器、一个运行 Apache 的 Ubuntu 服务器和一个运行文件和打印服务的 Windows 服务器。为了节省空间,这里只详细讨论 CentOS 的安装。对于被管理系统,仅涵盖 SNMP 的安装和配置。

构建 Zenoss 服务器

首先选择您的硬件。Zenoss 没有具体的硬件要求,但它严重依赖 MySQL,因此您可以将 MySQL 的要求作为大致的指导。我建议使用最快的可用处理器、1GB 内存、足够快的硬盘以提供可接受的 MySQL 性能以及千兆以太网用于网络。我运行了几个测试配置,这个配置对于中型网络(100 多个节点/设备)来说似乎足够了。为了保持配置简单,在测试环境中禁用了所有防火墙和 SELinux 实例。如果您在环境中使用防火墙,请打开端口 161 (SNMP)、8080 (Zenoss 管理页面) 和 514(如果您将 syslog 与 Zenoss 集成)。

在服务器上使用您自己的偏好安装 CentOS 5.1。我使用了没有 X Window System 或桌面管理器的裸机安装。分配一个静态 IP 地址和任何其他相关的网络信息(DNS 服务器等)。操作系统安装完成后,使用下面的 yum 命令安装以下软件包

yum install mysql mysql-server net-snmp net-snmp-utils gmp httpd

如果 mysqld 或 httpd 服务在 yum 安装后没有启动,请启动它并设置为在您配置的运行级别运行。接下来,从 Sourceforge.net 下载最新的 Zenoss Core .rpm 包(在撰写本文时为 2.1.3),并使用命令行中的 rpm 安装它。要在 .rpm 包安装后启动所有与 Zenoss 相关的守护进程,请在命令提示符下键入以下内容

service zenoss start

从任何机器启动 Web 浏览器,并使用端口 8080 输入 Zenoss 服务器的 IP 地址(例如,http://192.168.142.6:8080)。使用默认帐户 admin 和密码 zenoss 登录到站点。这将打开主仪表板。仪表板是被管理设备状态的分区视图。如果您不喜欢默认显示,可以使用端口小部件(窗口)上的各种下拉列表以您想要的任何方式排列仪表板。我建议将“生产状态”端口小部件设置为显示“生产”,以便我们可以在添加测试系统后看到它们。

Zenoss 中几乎所有与被管理设备相关的内容都围绕类展开。通过类,您可以创建无限数量的系统、进程或服务分类进行监控。要开始添加设备,我们需要在顶层 /Devices 类中设置我们的 SNMP 团体字符串。SNMP 团体字符串就像用于验证设备之间流量的密码。如果一个设备想要与另一个设备通信,它们必须具有匹配的团体名称/字符串。在许多部署中,管理员使用默认的团体名称 public(和/或 private),这会造成安全风险。我建议更改这些字符串并将它们变成一个短语。您可以添加数字和字符,使团体名称更难猜测/破解,但我发现短语更容易记住。

单击左侧导航菜单上的“设备”链接,以便 /Devices 出现在页面顶部附近。单击“z属性”选项卡并向下滚动。在 zSNMPCommunitiy 字段中输入 SNMP 团体字符串。对于我们的测试环境,我使用了字符串 whatsourclearanceclarence。您可以对不同的系统子类或单个系统使用不同的字符串,但是通过在 /Devices 类中设置它,它将用于任何子类,除非它被覆盖。您还可以在 /Devices 类下的 zSNMPCommunities 中列出多个字符串,这允许您为稍后讨论的发现过程定义多个字符串。确保您的团体字符串 (zSNMPCommunity) 在此列表中。

在 Linux 客户端上安装 Net-SNMP

现在,让我们设置我们的 Linux 系统,以便它们可以与 Zenoss 服务器通信。在其他 Linux 服务器上安装和配置操作系统后,在每个服务器上使用以下命令安装 Net-SNMP 软件包(在 Ubuntu 服务器上)

sudo apt-get install snmpd

在 Fedora 服务器上使用

yum install net-snmp 

安装 Net-SNMP 软件包后,编辑掉 /etc/snmp/snmpd.conf 开头“访问控制”部分中的任何其他行,并添加以下行

##      sec.name  source      community
com2sec local     localhost   whatsourclearanceclarence
com2sec mynetwork 192.168.142.0/24   whatsourclearanceclarence

##  group.name  sec.model  sec.name
group MyROGroup	v1         local
group MyROGroup	v1         mynetwork
group MyROGroup	v2c        local
group MyROGroup	v2c        mynetwork

##         incl/excl subtree  mask
view all   included  .1        80

##             context sec.model sec.level prefix  read   write  notif
access MyROGroup ""      any       noauth  exact    all    none   none

不要编辑掉最后一个“访问控制”部分下方的任何行。请注意,以上仅是一种轻微限制性的配置。如果您想加强访问控制,请查阅 snmpd.conf 文件或 Net-SNMP 文档。在 Ubuntu 服务器上,您可能还需要更改 /etc/snmp/default 文件中的以下行,以允许 SNMP 绑定到本地环回地址以外的任何地址

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'
在 Windows 上安装 SNMP

在 Windows 服务器上,从控制面板访问“添加/删除程序”实用程序。单击左侧的“添加/删除 Windows 组件”按钮。向下滚动组件列表,选中“管理和监控工具”,然后单击“详细信息”按钮。在列表中选中“简单网络管理协议”,然后单击“确定”进行安装。关闭“添加/删除”窗口,然后从控制面板中的“管理工具”进入“服务”控制台。在列表中找到 SNMP 服务,右键单击它,然后单击“属性”以打开服务属性选项卡。单击“陷阱”选项卡,然后键入团体名称。在“陷阱目标”列表中,添加 Zenoss 服务器的 IP 地址。现在,单击“安全”选项卡,并选中“发送身份验证陷阱”框,输入团体名称,并赋予其“只读”权限。单击“确定”,然后重新启动服务。

返回到 Zenoss 管理 Web 页面。单击“设备”链接进入 /Devices/Servers/Windows 的子类,然后在“z属性”选项卡上,在 zWinUser 和 zWinPassword 字段中输入域管理员帐户和密码的名称。此帐户使 Zenoss 可以访问 Windows 系统上的 Windows Management Instrumentation (WMI)。在离开之前,请务必单击页面底部的“保存”。

将设备添加到 Zenoss 中

现在我们的系统已经安装了 SNMP,我们可以将它们添加到 Zenoss 中。设备可以单独添加,也可以通过扫描网络添加。让我们两者都做。要将我们的 Ubuntu 服务器添加到 Zenoss 中,请单击“管理”导航部分下的“添加设备”链接。输入服务器的 IP 地址和团体名称。在“设备类路径”下,将选择设置为 /Server/Linux。您可以在添加系统之前在此页面上添加各种其他硬件、软件和 Zenoss 信息,但至少需要 IP 地址名称和团体名称(图 1)。单击“添加设备”按钮,发现过程将运行。当显示结果时,单击新设备的链接以访问它。

Zenoss and the Art of Network Monitoring

图 1. 将设备添加到 Zenoss 中

要扫描网络中的设备,请单击导航菜单“按浏览”部分下的“网络”链接。如果您的网络不在列表中,请使用 CIDR 表示法添加它。添加后,选中您的网络旁边的复选框,并使用下拉箭头单击“选择发现设备”选项。您将看到与之前类似的结果页面。完成后,单击结果页面底部的链接以访问新设备。任何找到的设备都将放置在 /Discovered 类中。因为我们应该已经发现了 Fedora 服务器和 Windows 服务器,所以应将它们分别移动到 /Devices/Servers/Linux 和 /Devices/Servers/Windows 类中。这可以从每个服务器的“状态”选项卡完成,方法是使用主下拉列表并选择“管理”→“更改类”。

如果到目前为止一切顺利,我们现在拥有一个功能正常的 SNMP 监控系统,能够监控我们系统上的心跳/可用性(图 2)和性能信息(图 3)。您可以自定义其他各种状态和性能监视器以满足您的需求,但在这里我们将使用默认的 localhost 监视器。

Zenoss and the Art of Network Monitoring

图 2. Zenoss 仪表板

Zenoss and the Art of Network Monitoring

图 3. 性能数据在发现后几乎立即收集。

创建用户和设置电子邮件警报

此时,我们可以使用仪表板来监控被管理设备,但只有当我们访问站点时才会收到通知。如果我们能通过电子邮件接收警报会更有帮助。要设置电子邮件警报,我们需要创建一个单独的用户帐户,因为警报在 admin 帐户下不起作用。单击“管理”导航部分下的“设置”链接。使用菜单上的下拉箭头,选择“添加用户”。在提示时输入用户名和电子邮件地址。单击列表中的新用户以编辑其属性。为新帐户输入密码,并分配“管理员”角色。单击页面底部的“保存”。注销 Zenoss,然后使用新帐户重新登录。重新打开设置页面,然后输入您的 SMTP 服务器信息。设置 SMTP 后,我们需要为我们的新用户创建一个警报规则。单击“用户”选项卡,然后单击列表中刚刚创建的帐户。在结果页面中,单击“编辑”选项卡,然后输入您要将警报发送到的电子邮件地址。现在,转到“警报规则”选项卡,并使用下拉箭头创建一个新规则。在新警报规则的“编辑”选项卡上,将“操作”更改为“电子邮件”,“启用”更改为“真”,并将“严重性公式”更改为“>= 警告”(图 4)。单击“保存”。

Zenoss and the Art of Network Monitoring

图 4. 创建警报规则

上面的规则在任何生产服务器遇到评级为“警告”或更高级别的事件时发送警报(图 5)。使用过滤器,您可以创建任意数量的规则,并使它们仅应用于特定设备或设备组。例如,如果您想将警报时间限制在工作时间内,请使用“警报规则”上的“计划”选项卡来定义一个窗口。如果没有指定计划(默认),则规则始终运行。在我们的规则中,只会通知一个用户。您还可以从“设置”页面创建用户组,以便通知多人,或者您可以在用户属性中使用组电子邮件地址。

Zenoss and the Art of Network Monitoring

图 5. Zenoss 警报会新鲜地发送到您的邮箱。

服务和进程

我们可以通过添加一个进程和一个服务供 Zenoss 监控来扩展我们对测试系统的视图。当我们在 Zenoss 中提到进程时,我们指的是在被管理设备上运行的活动程序,通常是守护进程。Zenoss 使用正则表达式来监控进程。

要在邮件服务器上监控 Postfix,首先,让我们将其定义为一个进程。导航到导航菜单“类”部分下的“进程”页面。使用“操作系统进程”旁边的下拉箭头,然后单击“添加进程”。输入 Postfix 作为进程 ID。当您返回到上一页时,单击新进程的链接。在进程的“编辑”选项卡上,输入master在“正则表达式”字段中。在离开之前单击“保存”。转到进程的“z属性”选项卡,并确保 zMonitor 字段设置为“真”。再次单击“保存”。从仪表板导航回邮件服务器,然后在“操作系统”选项卡上,使用最上面菜单的下拉箭头选择“添加”→“添加操作系统进程”。添加进程后,如果 Postfix 进程降级或失败,我们将收到警报。在服务器的“操作系统”选项卡上,选中新添加的 Postfix 进程旁边的复选框,然后从“操作系统进程”下拉菜单中选择“锁定操作系统进程”。在下一组选项中,选择“锁定以防止删除”。这可以保护进程在 Zenoss 重新建模服务器时不会被覆盖。

Zenoss 中的服务由活动的网络端口而不是运行的守护进程定义。软件中内置了大量服务,如果您愿意,也可以定义自己的服务。内置服务分为两类:“IP 服务”和“Win 服务”。“IP 服务”使用 1-65535 之间的任何端口,包括常见的网络应用程序/协议,例如 SMTP(端口 25)、DNS(53)和 HTTP(80)。“Win 服务”旨在与 Windows 服务器一起使用(图 6)。

Zenoss and the Art of Network Monitoring

图 6. Zenoss 附带了大量预定义的 Windows 服务进行监控。

添加服务比添加进程简单得多,因为 Zenoss 中预定义了很多服务。要在我们的 Web 服务器上监控 HTTP 服务,请从仪表板导航到服务器。使用服务器“操作系统”选项卡箭头上的主菜单下拉箭头,然后选择“添加”→“添加 IP 服务”。输入HTTP在“服务类字段”中。请注意,当您键入字母时,该字段开始预填充匹配项。选择 TCP 作为协议,然后单击“确定”。在结果页面上单击“保存”。与“操作系统进程”过程一样,返回到服务器的“操作系统”选项卡并锁定新的 IP 服务。Zenoss 现在正在监控服务器上的 HTTP 可用性(图 7)。

Zenoss and the Art of Network Monitoring

图 7. 将 HTTP 作为 IP 服务进行监控

这仅仅是开始

Zenoss 中还有许多其他功能,此处篇幅有限无法涵盖,包括网络地图(图 8)、用于多地点监控的 Google Maps API(图 9)以及 Zenpacks,它们为常见应用程序提供额外的监控和性能捕获功能。

Zenoss and the Art of Network Monitoring

图 8. Zenoss 自动为您绘制网络地图。

Zenoss and the Art of Network Monitoring

图 9. 可以使用 Google Maps API 在地理上监控多个站点。

在本文的篇幅中,我们相对轻松地部署了一个企业级监控解决方案。虽然部署起来出奇地容易,但 Zenoss 也具有深厚的功能集。它轻松地与同一产品领域的商业竞争对手匹敌,甚至超越它们。它易于管理,高度可定制,并由充满活力的社区提供支持。

尽管只要您从事网络工作,您可能就无法达到寂静的心境,但有了 Zenoss,至少您可以晚上安心入睡,因为您知道当事情发生故障时您会听到警报。希望它们不会是树木。

Jeramiah Bowling 担任系统管理员和网络工程师已超过十年。他在马里兰州亨特谷的一家地区会计和审计公司工作,并拥有多项行业认证,包括 CISSP。欢迎您在 jb50c@yahoo.com 留下您的评论。

加载 Disqus 评论