使用 Linux 进行网络监控

作者:Tristan Greaves

NOCOL,即在线网络运营中心,使指定的机器能够托管网络监控代理的集合。这些代理可以执行各种任务,从使用 ICMP ping 方法检查机器是否“启动”到通过请求测试页面来确保远程 Web 服务器按预期运行。这允许以多种方式诊断和报告网络上的问题,可以通过电子邮件、网页或专用终端进行。

警报系统通过升级工作。通常,任何报告的数据都归类为 INFO。但是,如果服务开始出现异常,则可以将其标记为 WARNING、ERROR 或 CRITICAL。如果问题未得到处理,它将升级(WARNING 将升级为 ERROR,ERROR 将升级为 CRITICAL)。例如,您可能有一台必须定期重启的机器。因此,您会期望 NOCOL 抱怨机器不时停止响应。在这种情况下,您会将此类事件归类为 WARNING。然后,您将随时了解重启何时发生:如果事件升级到 ERROR 或更高,您将知道有些严重错误发生了。

如今,大多数路由器和类似设备都与 SNMP(简单网络监控协议)兼容,并且几个 NOCOL 代理具有询问此类设备的能力。

安全注意事项

NOCOL 需要以 root 身份运行。在安装过程中,少数确实需要特权的二进制文件被设置为 SUID root。建议您在系统上创建一个名为“nocol”的用户,用于所有与 NOCOL 相关的活动,包括在安装期间使用它。

准备 Make

NOCOL 可从 ftp://ftp.navya.com/pub/ 获取。在撰写本文时,最新的稳定版本是 nocol-4.2.tar.gz,本文将使用该版本。

NOCOL 广泛使用 Perl,因此请确保在继续之前已安装 Perl。如果您的 Linux 系统不太可能尚未安装 Perl,请从 https://perldotcom.perl5.cn/CPAN/ 获取。

一旦您将 NOCOL 存档安全地放在您建议的监控服务器上(一台配备 32MB 内存的 486/66DX 机器对我们来说就足够了),请执行以下神奇操作

gzip -dc nocol-4.2.tar.gz | tar xvf-

我们在 Red Hat 5.2 系统上安装了 NOCOL,并进行了升级以允许使用 Linux 2.2.1 内核。进入新生成的 nocol-4.2 目录,然后键入

 ./Configure
然后,系统会询问您一些关于您的系统的简单问题
  • 输入顶层目录: NOCOL 树默认位于 /usr/local/nocol,但您可以根据需要进行调整。确保“nocol”用户有权写入您指定的任何目录。

  • 输入 man 页面的位置: 这些页面默认位于主树下,但您可能更喜欢将它们放在系统上更“传统”的位置。

  • 输入 man 页面的扩展名: 我坚持使用默认值 n 作为此选项。

  • 输入您的日志主机的完全限定名称: 我为主要 NOCOL 监视器设置的服务器也用于日志记录目的,此选项默认设置为安装机器的主机名。为简单起见,接受默认值。

  • 您的 MAIL 程序位于何处? 为了使 NOCOL 的电子邮件警报系统正常运行,它需要访问 mail 二进制文件。默认值 /bin/mail 应该适用于大多数 Linux 安装。

  • 操作电子邮件应发送到何处? 此电子邮件地址用于一般的 NOCOL 消息。根据需要进行设置。

  • 紧急/关键电子邮件应发送到何处? 同样,此电子邮件地址用于紧急事件(例如,“Web 服务器爆炸了!”)。

  • 您想使用哪个编译器? NOCOL 系统的部分代码是用 C 语言编写的。默认选择 cc 应该足够了。

  • 您想要哪些编译器选项 (-DDEBUG)? 这实际上是为开发人员准备的,因此接受默认值 -O 就可以了。

  • Perl 在您的系统上的位置在哪里? 在此处输入 Perl 二进制文件的路径,如果 /usr/bin/perl 是正确的,则接受默认值。

完成此操作后,您就可以编译该软件了。
编译和安装

可以预见的是,可以通过键入以下命令来启动编译过程

make

在我们的系统上,etherload(一种用于监控以太网负载的工具)编译失败。etherload 在这里没有介绍,我们希望这个问题在未来的版本中得到纠正。

现在安装软件

make install

使用 su 以 root 身份登录并键入

make root
预计会因 etherload 未编译而再次失败。

这样就完成了安装过程。现在剩下的就是让 NOCOL 为您的网络发挥作用。

配置监视器

监视器的示例配置文件安装在您建议的 NOCOL 树下的 /etc/samples 中。查看这些文件以熟悉其工作原理。

您可能要监控的第一件事是网络上的机器是否已启动并正在运行。传统的做法是查看它们是否响应 ping 请求。

要处理网络上的 UNIX 机器(那些运行 RPC 端口映射器的机器),请在 /etc 目录中创建一个名为 rpcpingmon-confg 的文件,键入如下内容

POLLINTERVAL    300
kenny           kenny.your-network.com
kyle            kyle.your-network.com
cartman         123.123.123.123

POLLINTERVAL 指示 NOCOL 应“扫描”网络的频率。在我们的示例中,它将每 300 秒(5 分钟)扫描一次。接下来是要监控的机器列表:第一列是“友好名称”,第二列包含 TCP/IP 主机名或 IP 地址。

对于非 UNIX 机器(路由器、Windows 机器等),您应该创建一个单独的文件,名为 ippingmon-confg。格式相同。

NOCOL 包含许多其他监视器(请参阅 NOCOL 套件),您应该研究和配置这些监视器以满足您的需求。示例配置文件很好地解释了它们的作用以及如何设置它们。

NOCOL 套件

最后的准备工作

在 NOCOL 可以开始分析您的网络之前,必须调整一些小的脚本。同样,这些脚本都位于您安装 NOCOL 的目录下。

Perl 脚本 bin/keepalive_monitors 处理监视器的自动启动。在第 32 行左右,您会找到以下两行(忽略换行)

PROGRAMS="noclogd etherload ippingmon rpcpingmon nsmon ntpmon
portmon"
PROGRAMS="$PROGRAMS radiusmon hostmon tpmon"

修改这些行,使其仅包含您实际配置的监视器。为了匹配此处讨论的两个监视器,您可以将它们合并为一行

PROGRAMS="ippingmon rpcpingmon"
脚本 bin/notifier 处理将警告电子邮件发送到配置期间指定的地址。默认情况下,当站点被标记为“critical”超过两个小时时,它将发送一封电子邮件。如果您对 Perl 感到自信,则可以指定更多时间过去后要联系的其他地址。在 AFTERx 行中指定这些地址
AFTER2="
AFTER3="
AFTER5="emergency-team@your-network.com"
NOCOL 附带一个自定义 crontab 文件,该文件将自动执行任何所需的内务处理,例如确保所有监视器都在运行并轮换日志。要安装它,请进入 NOCOL 树中的 /bin 目录并键入
su nocol
crontab crontab.nocol
启动扫描

要最终启动 NOCOL,请运行位于 bin 目录中的 keepalive_monitors 脚本。如果一切顺利,监视器将开始工作。

如果失败,请键入 ps aux | grep nocol (查看监视器是否正在运行),然后返回并检查您是否正确遵循了说明。

您很可能想查看 NOCOL 报告的内容。最简单的工具是 netconsole,它可以在控制台或通过 TELNET 会话运行。运行它并在提示时输入您的终端类型(例如 vt220)。控制台屏幕将出现,并且很可能是空的。默认设置为仅显示 CRITICAL 事件。

l 键可让您更改查看模式。将其设置为级别 4 (INFO),您将看到您的配置监视器收集的所有信息。有关示例,请参见列表 1。随意尝试不同的级别,直到找到最适合您需求的级别。h 键将显示全面的帮助屏幕。

列表 1

Linux 的串行控制台支持

在本文的安装过程中,我发现一个旧的 ICL DRS-10 串行终端隐藏在橱柜中。此终端或等效终端可以连接到 Linux 机器并用作专用监控屏幕。

/etc/gettydefs 中所需的确切设置取决于您的终端的规格。对于 DRS-10,我们对 Red Hat 使用了以下条目

# 9600 baud Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP \
CLOCAL #@S login: #DT9600

现在我们需要编辑 /etc/inittab 文件以在终端上显示登录屏幕。在操作此文件时要小心:可能会导致您的 Linux 系统无法启动。添加条目

S1:3456:respawn:/sbin/getty ttyS0 DT9600 vt220
用于连接到第一个串行端口 (ttyS0) 的终端。

最后,通过键入以下命令强制 init 重新检查其配置文件

/sbin/telinit q

如果一切顺利,您的终端应显示登录提示符。从那里,您可以像往常一样启动 netconsole。

文本终端 HOWTO (www.linuxhq.com/HOWTO/Text-Terminal-HOWTO.html) 中更详细地描述了如何设置此类串行终端。

获取更高级的功能

NOCOL 具有一个 Web 界面,包含在存档中,有关设置它的说明可以在 INSTALL 文件中找到。本质上,这是一个 Web 版本的 netconsole,可以自定义以使其看起来更炫酷一些(参见图 1)。

Network Monitoring with Linux

图 1. Web 版本的 Netconsole

NOCOL 的 hostmon 部分也非常强大。它允许您在网络上的机器上安装基于 Perl 的客户端,以便监控可用磁盘空间、邮件队列等方面。可以扩展脚本以监控您可能正在运行的任何自定义软件。(我们添加了一个扩展来监控我们的 X.400/SMTP 邮件网关软件上的队列。)

系统提供了一个 API,允许您在 Perl 中编写自己的监视器。因此,NOCOL 具有监控任何事物的能力。

作为 NOCOL 灵活性的一个例子,我编写了 notifier 工具的扩展,该工具利用了我们的内部 SMS 消息系统。这允许将描述 CRITICAL 问题的文本消息发送到我的手机。这是通过为 SMS 网关编写电子邮件前端来完成的,因此 notifer 所要做的就是以正确的格式发送电子邮件。

总结

本质上,NOCOL 已被证明是一个非常有用的工具。它在我们网络问题发生后立即向我们发出警报,并且它是免费软件(它是在“不太像 GPL”协议下发布的)只是 Linux 下提供的出色免费软件的另一个例子。

资源

Network Monitoring with Linux
Tristan Greaves (tristan.greaves@icl.com) 常驻英国,在 ICL(IT 系统和服务公司)的信息交换部门担任系统集成商。当不编写 Linux 代码时,可以在朴茨茅斯地区听到他和他的乐队 “Stash” 演奏优美的音乐。
加载 Disqus 评论