Linux服务器运行状况全面监测

随着Linux应用的日益广泛,有大量的网络服务器使用Linux操作系统。为了全面衡量网络运行状况,就需要对网络状态做更细致、更精确的测量。SNMP协议的制订为互联网测量提供了有力支持。计算机系统是

由软件系统硬件系统组成的,检测硬件状态对于保障整个系统的稳定是非常重要的。不论操作系统是使用Linux、还是Windows,一旦硬件出现故 障,那么整个系统的安全就严重了。这里我们主要监测Linux服务器的CPU、硬盘、内存、网络接口、主板等硬件的工作状态。

[b]一、/proc文件系统特点[/b]

Linux 系统向管理员提供了非常好的方法,使他们可以在系统运行时更改内核,而不需要重新引导内核系统。这是通过 /proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。不用重新启动而去看 CMOS ,就可以知道系统信息。这就是 /proc 的妙处之一。/proc 目录里主要文件内容,见[color=Blue][b]表-1[/b][/color]:
   
每个Linux系统根据软硬件不同/proc 虚拟文件系统的内容也有些差异。/proc 虚拟文件系统有三个很重要的目录:net,scsi和sys。Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配 置。例如,如果系统不支持scsi,则scsi目录不存在。除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。net目录包括多个 ASCII 格式的网络伪文件, 描述了网络层的部分情况,可以用arp 、netstat、route等命令来查询这些文件。除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都 有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。Proc文件系统的名字就是由之而起。

[b]二、proc文件系统主要实现的五大功能:[/b]

1. 进程信息:对于系统中的任何一个进程来说,在proc的子目录里都有一个同名的进程ID。你将可以找到以下的信息:cmdline, mem, root, stat, statm, 以及status。某些信息只有超级用户可见,例如进程根目录。到每一个单独的含有现有进程信息的进程有一些可用的专门链接。对于系统里的任何一个进程来 说,都有一个单独的自链接指向进程信息。它的用处就是从进程中获取命令行信息。

2. 系统信息:如果你需要了解整个系统信息,你也可以从/proc/stat中获得。它包括:包括CPU占用、磁盘空间、内存页、内存对换、全部中断、接触开关以及上次系统自举时间。

3. CPU信息:利用/proc/cpuinfo文件,你可以获得中央处理器当前的准确信息。

4. 负载信息: /proc/loadavg文件包含了系统负载信息。

5. 系统内存信息:meminfo文件包含了系统内存的详细信息。它显示了物理内存的数量,可用交换空间的数量,空闲内存的数量等等。

[b]1.  监测服务器全面统计状态[/b]

要监测全面统计状态,使用命令,结果见图1:

#cat/proc/stat

[align=center][img]http://imgs.ccw.com.cn/resources/2005_11/2005_11_05/200511052101133751265275.jpg[/img]

图1 系统全面统计状态[/align]

以上数字依次代表:

上下文切换数量;中断总量;进页面总数;出页面总数;进程总数;

换入总数;换出总数;合计CPU空闲时间;合计CPU nice时间;合计CPU系统时间;

合计CPU用户时间。

同时提供对每个CPU的:单个CPU空闲时间;单个CPU nice时间;单个CPU系统时间;单个CPU用户时间。

以及对每个磁盘驱动器的如下数据:

单个磁盘块读;单个磁盘块写;单个磁盘I/O总数;单个磁盘I/O读;单个磁盘I/O写。

[b]2.监测网络流量[/b]

如果要了解网络流量,可以使用命令:结果见图1。

#cat /proc/net/dev

[align=center][img]http://imgs.ccw.com.cn/resources/2005_11/2005_11_05/200511053671133751304774.jpg[/img]
        
图2网络接口数据包流量[/align]

以上数字依次代表:接收到的字节;接收到的压缩字节;收到的误码数;收到的漏失误码;收到的FIFO误码;收到的帧误码;收到的多播误码;收到的总包 数;已传输的字节;已传输的压缩字节;传输误码总数;传输载波误码;传输冲突误码;传输漏失误码;传输FIFO误码;传输的总包数。

[b]3.使用uptime命令[/b]

使用uptime命令可以查看系统负载,系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:没有在等待I/O操作的结果、它没有主动进入等待状态(也就是没有被调用、没有被停止。

# uptime

9:51pm up 3 days, 4:43, 4 users, load average:6.02, 5.90, 3.94

上面命令显示示最近1 分钟内系统的平均负载是6.02,在最近5分钟内系统的平均负载是5.90,在最近的15 分钟内系统的平均负载是3.94。一共四个用户。通常来说只要每个CPU的当前活动进程数不大于3那幺系统的性能就是良好的,如果每个CPU的任务数大于 5,那幺就表示这台机器的性能有严重问题。对于上面的例子来说,由于笔者系统使用是双CPU,那幺其每个CPU的当前任务数为:6.02/2=3.01。 这表示该服务器的性能是可以接受的。



[[i] 本帖最后由 孤云野鹤 于 2005-12-28 16:02 编辑 [/i]]

孤云野鹤 发表于 2005-12-28 14:29

接楼上文章:


  


  [b]4.使用xload图形显示系统负载[/b]



  如果安装了KDE环境,可以使用xload 显示系统平均负载的柱状图 ,它会定期地更新。xload是Linux一个系统命令,使用方法:



  # xload [-options ...]



  xload 主要选项和说明:参见[color=Blue][b]表-2[/b][/color]



  #xload –scale 1 –update 1 –fg blue –h300 tan



  上面命令表示使用xload查看系统的负载。每秒更新一次,其尺寸大小为300,前景颜色为白色,背景颜色为蓝。见图-3。



[align=center][img]http://imgs.ccw.com.cn/resources/2005_11/2005_11_05/200511052341133751371585.jpg[/img]


图-3[/align]



[b]三、使用phpsysinfo[/b]



  由于/proc文件系统非常大,而且系统是动态变化的,所以使用Linux命令比较麻烦,这里我们使用一个工具:phpsysinfo,它是一个支持 PHP网页服务器用于侦测主机一些资料的PHP 脚本工具软件,可以提取/proc文件系统中的信息,以图形方式显示出来。另外phpsysinfo支持包括中文在内的20多种语言和许多风格的模板。



  [b]1.系统要求:[/b]



  除了要搭建一个基于LAMP(Linux+PHP+APACHE+MYSQL)的网络构架,其它系统要求:软件:它要求内核(Kenerl)至少在 2.2以上。KDE 2.0,桌面颜色至少16位增强色。硬件:中央处理器:奔腾II 450 以上 ,内存 64 兆 ,硬盘空间 60兆。安装前的准备工作: phpsysinfo 是用PHP语言写成的,并且使用到gdk、gtk及glib。



  [b]2.软件下载:[/b]



  #wget [url]http://jaist.dl.sourceforge.net/sourceforge/phpsysinfo/phpsysinfo-2.3.tar.gz[/url]



  #wget [url]http://secure.netroedge.com/~lm78/archive/i2c-2.8.8.tar.gz[/url]  



  #wget [url]http://secure.netroedge.com/~lm78/archive/lm_sensors-2.8.8.tar.gz[/url]  



  [b] 3. 软件安装:[/b]



  将下载的软件拷贝到/var/www/html/目录下,执行:



  #mv phpsysinfo-2.3.tar.gz /var/www/html/sysinfo



  #tar -zxvf phpsysinfo-2.3.tar.gz



  #cd sysinfo



  #cp config.php.new config.php



  [b]4.运行软件:[/b]



  启动apache服务



  #/usr/local/apache2/bin/apachectl start



  测试[url]http://localhost/sysinfo[/url] (见图4)



[align=center][img]http://imgs.ccw.com.cn/resources/2005_11/2005_11_05/200511055781133751407318.jpg[/img]              


图4 phpsysinfo工作界面[/align]



  phpsysinfo检测分成五个部分:



  (1)主机系统资源:主机名称、IP地址、内核版本、已开机时间、登入人数、系统负载。



  (2)硬件信息:CPU型号、工作频率、快取大小、逻辑操作数、PCI接口、IDE接口、SCSI接口。



  (3)网络负载:网络数据包接收、传送、错误/遗失。



  (4)内存资源情况,包括物理内存、虚拟内存等。



  (5)已挂载分区:硬盘分区名称,使用比例。


        


  你也可以用它来测试你所租用的虚拟主机的设备及网络状况的品质。另外phpsysinfo还可以在FreeBSD 、OpenBSD、NetBSD 、Darwin/OSX 、Unix等系统下工作。



[[i] 本帖最后由 孤云野鹤 于 2005-12-28 16:02 编辑 [/i]]

孤云野鹤 发表于 2005-12-28 14:36

接楼上文章:

[b]四、服务器硬盘监测[/b]

服务器硬盘监测主要包括:硬盘磁道监测、磁盘空间监测。

[b]1.硬盘磁道检测[/b]

硬盘物理坏道是硬盘的所有Linux硬件故障中最让人头痛的。它轻则使你的Linux计算机频频死机,重则让你的所有数据化为乌有。现在出厂的硬盘 (1993年)基本上都支持SMART(Self Monitoring Analysis and Reporting Technology)自动检测分析及报告技术。SMART技术可以对硬盘的磁头单元、盘片电机驱动系统、硬盘内部电路以及盘片表面介质材料等进行监测, 当SMART监测并分析出硬盘可能出现问题时会及时向用户报警以避免计算机数据受损失。SMART技术必须在主板支持的前提下才能发生作用,而且 SMART技术也不能保证能预报所有可能发生的硬盘故障。SMART(SFF-8035i) 是硬盘生产商们建立的一个工业标准,这个标准就是在硬盘上保存一个跟执行情况,可靠程度,读找错误率等属性的表格。所有属性都有一个1byte(大小范围 1-253)的标准化值,还包含另一个1byte的关键阶段值,如果属性表格内某个数据接近小于或达到关键阶段值,表明硬盘工作不正常了。

Smartmontools是一个Linux下硬盘检测工具,主页:[url]http://smartmontools.sourceforge.net[/url] ,最新版本:5.33-1。

软件下载安装:

#wget [url]http://jaist.dl.sourceforge.net/sourceforge/smartmontools/smartmontools-5.33-1.i386.rpm[/url]

#rpm –ivh /smartmontools-5.33-1.i386.rpm

软件安装后会在/usr/local/ 目录下产生程序:smartctl,先检测硬盘和主板是否支持SMART技术(见图-5):

smartctl -i /dev/hda7

[align=center][img]http://imgs.ccw.com.cn/resources/2005_11/2005_11_05/200511053591133751440223.jpg[/img]
图-5 检测硬盘是否支持SMART[/align]

图-5显示笔者的硬盘支持SMART,型号是:ST320414A(希捷的酷鱼III,72000RPM,2兆缓存)

全面体检硬盘

smartctl -A /dev/hda7

[align=center][img]http://imgs.ccw.com.cn/resources/2005_11/2005_11_05/200511056251133751468222.jpg[/img]
图-6 硬盘物理逻辑状态[/align]

图-6显示的信息根据你的硬盘厂商不同而不同,其中1-202行代表硬盘的不同物理性能。纵列代表硬盘的逻辑状态。

FLAG是标记,标准数值(VALUE)应当小于或等於关键值(THRESH)。WHEN_FAILED 代表错误信息,图-6中的WHEN_FAILED纵行是空行,说明硬盘没有故障。如果WHEN_FAILED显示数字,表明硬盘磁道可能有比较大的坏道。 Smartctl有十几个参数,详细情况可以查看:

smartctl --help

[b]2. 磁盘空间监测[/b]

Linux系统管理员经常使用的磁盘管理命令:df(disk filesystem)。通过这个命令可以获得文件系统的统计数据:包括可用空间和已经使用的空间。Df命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

格式:df [选项]... [FILE]...

df命令的主要选项见[color=Blue][b]表-3[/b][/color]:

表-3 df命令的主要选项

df命令还可显示所有文件系统对I-node节点和磁盘块的使用情况,这时需要一个参数:-I,见图-7。

[align=center][img]http://imgs.ccw.com.cn/resources/2005_11/2005_11_05/200511050791133751531111.jpg[/img]
图-7 用df命令显示所有文件系统对I-node节点的使用情况[/align]

从图-7这些信息可以看出:每一个文件系统中有多少可用的I—node,其中有多少己被使用,还剩余多少,以及它们所占的比例等整个硬盘的使用情况。 因此,系统管理员需要了解这些情况。有时会发现这样的情况:某些硬盘的容量超过了100%。这是因为Linux系统为超级用户保留了10%的空间由他单独 支配。也就是说,对于超级用户而言,他所见到的硬盘容量将是110%。这样的安排对于系统管理而言是有好处的,当硬盘被使用的容量接近100%系统管理员 还可以正常工作。df工具程序被广泛地用来生成文件系统的使用统计数据。它能显示系统中所有的文件系统的信息,包括它们的总容量、可用的空闲空间、目前的 安装点等。

 

四、服务器主板工作状况监测:

服务器主板以及CPU工作温度是否正常是服务器稳定的核心。迄今为止还没有一种CPU散热系统能保证永不失效。失去了散热系统保护伞的“芯”,往往会 在几秒钟内永远停止“跳动”。值得庆幸的是,聪明的工程师们早已开发出有效的处理器温度监控、保护技术。以特殊而敏锐的“嗅觉”随时监测CPU的温度变 化,并提供必要的保护措施,使CPU免受高温下的灭顶之灾。lm_sensors可以有效监控主板和CPU的工作电压、风扇转速、温度等核心数据。软件安 装:

#mv lm_sensors-2.8.8.tar.gz /usr/local/src/

#cd /usr/local/src/

#tar zxvf lm_sensors-2.8.8.tar.gz

#cd /usr/local/src/lm_sensors-2.8.8

#tar xzf i2c-2.8.8.tar.gz

#make clean ;make dep ;make all ;make install

#/sbin/depmod -a

修改配置文件:“/etc/ld.so.conf”加入一行:/usr/local/lib 

#ldconfig

#sensors-detect  #扫描主板所有芯片,选择缺省选项即可(按会车)#

加载模块,注意主板不一定相同。

#modprobe i2c-isa

#modprobe lm78

#modprobe sis5595

开始检测,见图-8:

#sensors


图 8 lm_sensors工作界面



  可以看到主板温度、CPU温度电压以及风扇转速等信息非常清晰。



  高级应用:定时检测主板运行情况:



  这里可以使用Linux组合命令:



  #watch --interval=450 “sensors ”



  这样每隔450秒运行因此sensors 令,就可以得知主板运行情况。



五、P2P通信监测

  P2P(Peer-to-Peer)是一种用于文件交换的新技术,通过Internet允许建立分散的、动态的、匿名的逻辑网络。P2P为对等连接或 对等网络,点对点网络技术, 可应用于文件共享交换,深度搜索、分布计算等领域。它允许个体的PC通过Internet共享文件。随着P2P文件交换应用的普及,ISP在维持和增加宽 带网的收益上也面临着新的挑战和机遇。据有关资料统计,现有的网络中有超过70%的带宽被P2P通信占据着。P2P通信会导致异常的流量峰值,对网络资源 造成意外的变形;所带来的网络拥塞、性能下降等问题,已影响到正常的网络应用,如WWW、Email等,缓慢的网页浏览和收发邮件速度更引起普通用户的不 满。



  识别P2P通信



  若想控制P2P通信,就必须对P2P通信进行有效地识别,然而,许多P2P通信使用了不同的通信技术和协议,使用传统的技术来识别它们非常困难。 比如,许多P2P协议不使用固定的端口,而是动态地使用端口,包括使用一些知名服务的端口。KaZaA就是可以使用端口80(通常是http/web来使 用)来通信的,从而穿透传统的基于IP和端口的防火墙和包过滤器。所以,通过简单的基于IP和端口的分类技术(分析IP包头、IP地址、端口号等)很难识 别、跟踪或控制这类通信。过去有一段时间,有人使用监测6881~6889端口来识别BT(BitTorrent),但这种做法现在早已失效——BT已不 再使用固定的6881~6889端口来通信,而是动态地使用端口。随着P2P应用的不断增长,更多的通信协议被使用;识别和分类P2P的技术必须快速、简 单,以适应这种技术的变化。现在,识别P2P通信的方法是在应用层分析数据包,看是否有某个应用协议的特征码,然后确定通信的种类。应用层分析数据包的基 本方法是,如果应用层数据包的头部有“220 ftp server ready”的特征串,可以确定是在使用ftp程序;如果有“HTTP/1.1 200 ok”的特征串,可以确定是在使用http传送数据。谈到网络流量监控,相信大家都熟悉MRTG这个工具。但是MRTG存在许多缺点:



  1.     使用文本式的数据库,数据不能重复使用; 。



  2.      只能按日、周、月、年来查看数据;



  3.      只能画两个DS(一条线、一个块);



  4.     无管理功能;



  5.     没有日志系统;



  6.     无法详细了解一一流量具体构成;



  这里介绍一个工具:ntop能够更加直观的将网络使用量的情况和每个节点计算机的网络带宽使用详细情况显示出来。ntop是一种网络嗅探器,嗅探器在 协助监测网络数据传输、排除网络故障等方面有着不可替代的作用。可以通过分析网络流量来确定网络上存在的各种问题,如瓶颈效应或性能下降;也可以用来判断 是否有***正在***网络系统。如果怀疑网络正在遭受***,通过嗅探器截获的数据包可以确定正在***系统的是什么类型的数据包,以及它们的源头,从而可以及 时地做出响应,或者对网络进行相应的调整,以保证网络运行的效率和安全。通过ntop网管员还可以很方便地确定出哪些通信量属于某个特定的网络协议、占主 要通信量的是那个主机、各次通讯的目标是哪个主机、数据包发送时间、各主机间数据包传递的间隔时间等。这些信息为网管员判断网络问题及优化网络性能,提供 了十分宝贵的信息。


   


  ntop提供以下一些功能:



  1. 自动从网络中识别有用的信息;



  2. 将截获的数据包转换成易于识别的格式;



  3. 对网络环境中的通讯失败进行分析;



  4. 探测网络环境下的通讯瓶颈;



  5. 记录网络通信时间和过程。



  ntop和MRTG相比相比它的安装配置比较简单,可以不使用Apache服务器。同时也可以和MRTG配合使用。目前市场上可网管型的交换机、路由 器都支持SNMP协议,Ntop支持简单网络管理协议所以可以进行网络流量监控。ntop几乎可以监测网络上的所有协议: TCP/UDP/ICMP、(R)ARP、IPX、Telnet、DLC、Decnet、DHCP-BOOTP、AppleTalk、Netbios、 TCP/UDP、FTP、HTTP、DNS、Telnet、SMTP/POP/IMAP、SNMP、NNTP、NFS、X11、SSH和基于P2P技术的 协议eDonkey, Overnet, Bittorrent, Gnutella (Bearshare, Limewire,etc), (Kazaa, Imesh, Grobster)。在

http://www.ntop.org

可以下载最新的源代码安装使用。



  软件下载:



  官方网站:

http://www.ntop.org/ntop.html

, 最新的版本源代码(2005nian八月)和相关函数库:



  wget

http://www.mirrors.wiretapped.ne ... g/ntop/ntop-3.2.tgz

  wgrt

ftp://ftp.rediris.es/sites/ftp.r ... p-0.6.2-12.i386.rpm

   


  软件安装:(注意安装顺序)



  #rpm –ivh libpcap-0.6.2-12 RPM for i386



  #tar zxvf ntop-3.2.tgz



  #cd ntop/gdchart0.94c



  #./configure



  ……



  do not forget to build:    #系统提示你先编译gd、zlib模块 #



  1. gd-1.8.3/libpng-1.2.1



  2. zlib-1.1.4/



  #cd gd-1.8.3/libpng-1.2.1/



  #cp scripts/makefile.linux Makefile



  #make



  #cd ../../zlib-1.1.4



  # ./configure



  # make



  cd ..



  # make



  下面回到Ntop目录下编译:



  #tar zxvf ntop-2.2.tgz



  #cd ../ntop/



  # ./configure



  #make;make install



  然后建立log目录



  #mkdir /var/log/ntop/



  启动ntop



  #ntop -P /var/log/ntop/ -u nobody &



  第一次运行系统它会要你输入管理员的密码,预设密码是:admin,第二次执行就不用再输入.这时你可以打开浏览器输入:

http://IP:3000

即 可打开管理界面。查看网络整体流量用鼠标点击“Stats”按钮后下载“Triffic”选项。网络流量会以柱面图和明细表格的形式显示出,如果你想查看 某个用户的计算机流量,用鼠标点击“IP Traffic”-“Host”按钮即可。如果想了解该计算机传输了那些数据,可以双击“CAO”即可分析出用户各种网络传输的协议类型和占用带宽的比 例。见图-9。端口使用情况见图-10。  




图-9 查看网络协议类型和占用带宽




图-10 端口使用情况列表



  Ntop可以监测的数据包括:网络流量、使用协议、系统负载、端口情况、数据包发送时间、数据生存时间TTL等。透过它﹐基本上所有进出数据都无所遁 形,不管拿来做例行的网络监测工作﹐还是拿来做报告﹐都是非常优秀的工具,让您的网络流量透明化。它工作的时候就像一部被动声纳,默默的接收看来自网络的 各种信息,通过对这些数据的分析,网络管理员可以深入了解网络当前的运行状况。不过﹐由于ntop本质上是嗅探器,它是一把双刃剑﹐如何保护这些信息只能 给授权的人士获得﹐将变得额外重要。



总结:

   


  Linux服务器监测是很重要的工作,服务器运行应该提供最有效的系统性能。网络服务器的资料总流量(网卡的资料传送总数),以及CPU使用率和特殊 服务等的封包传送率(或者说是流量),都是网络管理人员所必须要注意的事项,因为当主机的CPU使用率过高的时候,系统可能呈现不稳定的状态,而当流量发 生异常变化的时候,就需要注意可能有***在尝试窃取我们的信息。另外在网络管理方面,有必要了解我们Linux服务器的网络流量状态,并视流量来加以限制 或者是加大带宽。 本文介绍从Linux命令到一些简单的但是有用的工具来监测系统性能。依靠这些工具得到的数据,可以建立对系统性能的切身感受。当建立一个系统性能的可靠 底线后,可以利用Linux操作系统的灵活性对其进行设置。使其更加高效。本文介绍的NTOP、phpsysinfo都是开源软件,但我觉得它比起其它的 商业管理软件来说真的是毫不逊色。