一、模块简介
class=content>对于正式提供Web服务的系统来说,监视它的运行情况是非常重要的,比如我们必须监视内存和文件系统使用情况、系统负载、处理器利用率、交换分区空间是否足够,等等。只要能够对Web服务器运行的系统进行交互式访问(比如telnet、ssh或其他),所有这些任务都可以完成。但要完成这些任务并不轻松,因为一般的Unix工具都只能报告部分服务器信息。也就是说,我们不能同时查看整个系统的运行情况,除非同时打开了许多连接并让每个终端专门监视部分系统信息,否则我们就得在各个监视工具之间来回切换,需要进行繁琐的操作。
class=content>如果Apache服务器启用了mod_perl,我们可以利用一个专用的Apache::VMonitor模块同时监视大多数自己需要的系统信息。
class=content>Apache::VMonitor模块提供了比top(1)更优秀的监视功能。它不仅提供所有top(1)能够提供的信息,而且还包括所有Apache的mod_status模块提供的、专门有关Apache的信息,比如请求处理时间、最后请求的URI、每个子进程响应的请求数量,等等。此外,Apache::VMonitor模块模拟了top(1)、mount(1)、df(1)工具的报表功能;它具有视觉报警能力,并支持可配置的“自动刷新”模式;它供了一个Web界面,支持动态地显示或者隐藏各部分信息。
Apache::VMonitor模块支持的监视模式主要有以下两种:
* 多进程系统整体状态报告模式
* 单进程详细报告模式
二、需求与设置
class=content>要使用Apache::VMonitor,系统必须安装Apache::Scoreboard并已经在 httpd.conf中正确配置,而Apache::Scoreboard又要求安装mod_status。要让Apache::VMonitor能够正常运行,mod_status必须启用扩展模式。为此,在httpd.conf文件中,必须加入:
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-LEFT-COLOR: #000000; BORDER-RIGHT-COLOR: #000000; BORDER-TOP-COLOR: #000000"
width="80%">
ExtendedStatus On
class=content>
此外,系统中还必须安装有Time::HiRes和GTop。GTop又依赖于libgtop库,而后者在有些平台上不可用。请参见
href="http://home-of-linux.org/gnome/libgtop/"
target=_blank>http://home-of-linux.org/gnome/libgtop/了解更多信息。当然,Apache服务器上的mod_perl模块也是必不可少的。
class=content>
要启用Apache::VMonitor模块,我们应该修改httpd.conf文件中的一个配置。如果我们在httpd.conf文件中加入下面的配置指令:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
<Location /system/vmonitor> SetHandler
perl-script PerlHandler Apache::VMonitor
</Location>
class=content>此时,访问http://localhost/system/vmonitor即可打开VMonitor监视器。通常,我们必须保护http://localhost/system/vmonitor这个位置,禁止其他用户访问。如果我们总是从同一个IP地址访问这个URL,则只需根据主机进行验证:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
<Location /system/vmonitor> SetHandler
perl-script PerlHandler Apache::VMonitor order deny, allow
deny from all allow from 132.123.123.3
</Location>
另外,我们还可以使用Apache提供的基本验证模式或其他验证模式,或者使用其他各种扩展模块。
class=content>在启动文件或者在<Perl>区内配置下面介绍的这些变量,我们可以控制Apache::VMonitor模块的行为。
从httpd.conf文件装载Apache::VMonitor模块:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
PerlModule Apache::VMonitor
或者从启动文件装载Apache::VMonitor模块:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
use Apache::VMonitor();
在启动文件中调整下列配置参数,我们可以改变Apache::VMonitor的报告选项:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{BLINKING} = 1;
$Apache::VMonitor::Config{REFRESH} = 0;
$Apache::VMonitor::Config{VERBOSE} = 0;
通过下列配置参数,我们能够控制该工具第一次打开时显示哪些部分的信息:
borderColorDark=#ffffff cellPadding=5 cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{SYSTEM} = 1;
$Apache::VMonitor::Config{APACHE} = 1;
$Apache::VMonitor::Config{PROCS} = 1;
$Apache::VMonitor::Config{MOUNT} = 1;
$Apache::VMonitor::Config{FS_USAGE} = 1;
class=content>我们能够控制mod_perl进程报表的排序方式。mod_perl报表可以按照以下各列进行排序:“pid", "mode","elapsed","lastreq","served","size","share","vsize","rss", "client","request"。例如,如果要按照进程大小排序,则我们使用下列配置指令:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{SORT_BY} =
"size";
class=content>鉴于VMonitor提供监视非mod_perl进程的能力,我们可以设置正则表达式去匹配需要监视的进程。例如,如果要匹配带有httpd_docs、mysql以及squid字符串的进程名字,我们使用如下正则表达式:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::PROC_REGEX = join "\|",
qw(httpd_docs mysql squid);
稍后我们将详细讨论所有这些配置选项以及它们对VMonitor行为的影响。
三、多进程系统整体状态报告模式
class=content>这种模式是我们主要使用的监视模式。在这种模式下,我们能够从同一个位置监视几乎所有重要的系统资源。为了方便起见,它允许我们关闭或者开启报表的各个部分,使得报表刚好能够显示在一个屏幕上。
多进程系统整体状态报告模式具有以下功能和特点:
▲ 自动刷新
class=content>我们可以让报表每隔数秒钟自动刷新。这个数值可以在服务器启动时预先设置。例如,如果要把刷新时间设置为60秒,则我们加入如下配置选项:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{REFRESH} =
60;
0(零)值表示关闭自动刷新。
服务器启动后,刷新速度可以通过VMonitor应用的用户界面调整。
▲ top(1)模拟:系统状况报告
class=content>正如top(1),VMonitor显示当前的日期/时间、机器启动时间、平均负载以及所有系统CPU和内存的使用情况:CPU负载,实际内存、交换分区使用情况等。
class=content>系统信息区具有交换空间使用情况的视觉警报能力。我们知道,当系统用完了所有的RAM,它就开始把暂时不用的内存页转入速度较慢的交换分区,这种操作就称为交换操作。交换操作降低了整个系统的性能,最终有可能引起系统崩溃,在正式运行的系统上,我们应该尽可能地减少交换操作。VMonitor通过改变交换区信息行的颜色帮助我们监测异常情形。颜色按照如下规则改变:
cellPadding=5 cellSpacing=0 cols=2 width="80%" rows="4">
交换区使用 报告颜色
5Mb < swap < 10 MB 淡红色
20% < swap (交换不是什么好事!) 红色
70% < swap (几乎全部用光!) 红色 + 闪烁(如果启用闪烁的话)
闪烁模式可以用如下指令打开:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{BLINKING} =
1;
class=content>如果系统只使用了少量的交换区,VMonitor模块不会警报。这是因为在大多数Unix系统上,即使系统还有相当数量的空闲内存,也总是存在少量使用交换区的情况。
系统信息区默认显示。如果不想让系统信息区显示,则我们设置:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{SYSTEM} =
0;
▲ top(1)模拟:Apache/mod_perl进程状态
class=content>就象真正的top(1)一样,接下来的就是一个有关进程的报表,但它只显示有关mod_perl进程的信息。
class=content>报表中包含了:进程的状态(如Starting,Reading,Sending,Waiting,等等),进程的 ID,自从当前请求开始以来的时间,最后一个请求的处理时间,进程大小,共享、虚拟和驻留内存的大小。同时,它还显示了最后一个客户的IP地址以及它所请求的URI(只有64个字符,因为这是底层Apache核心库所保留的最大长度)。
class=content>在VMonitor运行期间,点击该报表的任意一个列就可以将报表按照该列排序。或者,报表的排序列也可以用如下配制指令预先设置:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{SORT_BY} =
"size";
class=content>排序列的合法选择包括:"pid","mode","elapsed","lastreq","served", "size","share","vsize","rss","client","request"。
class=content>报表的合计部分报告了所有mod_perl进程合计使用的内存,其中包括内核报告的数字、额外数字。额外数字根据启用内存共享时对实际使用内存的估算得到。
class=content>注意,对于有些系统来说,这个合计数字可能不正确,所以使用这个数字的风险你得自负。我们已经在Linux操作系统上验证过这个数字,具体方法是先获得Apache::VMonitor报告的数字,然后关闭mod_perl并检查系统内存使用情况。结果显示出,系统内存占用的减少量大约相当于Apache::VMonitor报告的数字。
这些有关mod_perl进程的信息默认显示。如果你不想显示这部分信息,请设置:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{APACHE} =
0;
▲ top(1)模拟:任意进程
class=content>正如mod_perl进程信息区,“任意进程”信息也按照top(1)风格显示。这部分信息默认不显示。要显示这部分信息,我们必须先设置:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{PROCS} =
1;
class=content>
另外还要指定需要监视哪些进程,这里要用到一个匹配待监视进程名字的正则表达式。例如,如果要监视所有名字中带有http、mysql、squid字符串的进程,则我们使用如下正则表达式:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::PROC_REGEX = join "\|",
qw(httpd mysql squid);
▲ mount(1)模拟
class=content>这部分报表数据显示已装载文件系统的信息,就如不带参数执行mount(1)一样。这部分信息默认不显示。要显示这些信息,我们必须设置:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{MOUNT} =
1;
▲ df(1)模拟
class=content>这部分内容完整地模拟了df(1)的功能。对于每一个已经装载的文件系统,它将报告合计、可用磁盘块数量以及使用百分比。
此外,它还能够报告可用的、已经使用的文件inode(索引节)数量,包括其绝对数值和百分比。
class=content>这部分信息具有视觉警报的功能。警报在以下两种情况下触发:当某个文件系统空间利用率超过90%,或者可用的文件 inode少于10%时。一旦这些事件发生,与该文件系统有关的数据行将以粗体、红色方式显示。如果开启了闪烁功能的话,装载点(Mount
Point)目录将闪烁。闪烁选项可以按如下方式开启:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{BLINKING} =
1;
df(1)信息默认显示。如果不想让df(1)的信息显示,则设置如下选项:
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{FS_USAGE} =
0;
▲ 缩写词提示
class=content>Apache::VMonitor的报表中有许多缩写词。如果我们按照如下设置启用VERBOSE模式,则“缩写词提示”的后面将列出所有缩写词的全称。
cellSpacing=0
style="BORDER-BOTTOM-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000"
width="80%">
$Apache::VMonitor::Config{VERBOSE} =
1;
默认情况下,缩写词提示不显示。
四、单进程详细报告模式
点击进程的PID即可查看有关该进程的详细信息。
如果该进程是一个mod_perl进程,则VMonitor显示如下信息:
* 进程类型(子进程或父进程);进程状态(Starting,Reading,Sending,Waiting,等等);当前请求的处理时间,或者如果生成报告时进程不活动,则是最后一个请求的处理时间。
* 到目前为止已传输的字节数。每个子进程所处理的请求数量。
* 进程所占用的CPU时间:total,utime,stime,cutime,cstime。
以下信息对于所有的进程(mod_perl进程和非mod_perl进程)都提供:
* 进程的一般信息:UID,GID,状态,TTY,命令行参数。
* 内存使用情况:Size,Share,VSize,RSS。
* 内存段使用情况:文本,共享库,数据和堆栈。
* 内存映像:start-end,offset,device_major:device_minor,inode,perm,库路径。
* 已装载的库的大小。
正如多进程模式,单进程详细报告模式也支持按指定的间隔自动刷新页面。
id=AutoNumber1 style="BORDER-COLLAPSE: collapse">
href="Apache服务器的全面监测.files/ApacheServerMonitor_1.gif"
target=_blank>
src="Apache服务器的全面监测.files/ApacheServerMonitor_1.gif"
width=334>
参考:
* mod_perl网站的URL:
target=_blank>http://perl.apache.org/。
* Time::HiRes:
href="http://search.cpan.org/search?dist=Time-HiRes"
target=_blank>http://search.cpan.org/search?dist=Time-HiRes。
* Apache::Scoreboard:
href="http://search.cpan.org/search?dist=Apache-Scoreboard"
target=_blank>http://search.cpan.org/search?dist=Apache-Scoreboard。
* GTop:
target=_blank>http://search.cpan.org/search?dist=GTop。GTop又依赖于libgtop库,有些平台上libgtop库不可用,请参见
href="http://home-of-linux.org/gnome/libgtop/"
target=_blank>http://home-of-linux.org/gnome/libgtop/了解更多信息。