Linux 系统监控工具链

摘要

        对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作。在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易。基于此原因,我们已编写了最常使用的18个命令行工具列表,这些工具将有助于每个Linux/Unix 系统管理员的工作。这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因。这个命令行工具列表提供了足够的工具,您可以挑选适用于您的监控场景的工具。

1. top

        Linux下的top命令是一个性能监控程序,许多系统管理员常常用它来监控Linux性能,在许多Linux或者类Unix操作系统里都有这个命令。top命令用于按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果。这条命令显示了CPU的使用率、内存使用率、交换内存使用大小、高速缓存使用大小、缓冲区使用大小,进程PID、所使用命令以及其他。它还可以显示正在运行进程的内存和CPU占用多的情况。对系统管理员来说,top命令式是一个非常有用的,它可用于监控系统并在需要的时候采取正确的处理动作。让我们看看实际中的top命令运行结果:
     
     
     
     
  1. [root@BendSha_RHEL5_5_x64 ~]# top
  2. top - 20:02:50 up 1:56, 1 user, load average: 0.00, 0.00, 0.00
  3. Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie
  4. Cpu(s): 0.4%us, 0.0%sy, 0.0%ni, 99.1%id, 0.0%wa, 0.0%hi, 0.5%si, 0.0%st
  5. Mem: 1926288k total, 811812k used, 1114476k free, 140948k buffers
  6. Swap: 2064344k total, 0k used, 2064344k free, 457388k cached
  7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  8. 3199 root 15 0 130m 4212 3360 S 0.3 0.2 0:02.81 vmtoolsd
  9. 1 root 15 0 10296 680 564 S 0.0 0.0 0:00.95 init
  10. 2 root RT -5 0 0 0 S 0.0 0.0 0:00.01 migration/0
  11. 3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
  12. 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/1
  13. 5 root 34 19 0 0 0 S 0.0 0.0 0:00.94 ksoftirqd/1
  14. 6 root 10 -5 0 0 0 S 0.0 0.0 0:03.27 events/0
  15. 7 root 10 -5 0 0 0 S 0.0 0.0 0:00.04 events/1
  16. 8 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper
  17. 25 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
  18. 30 root 10 -5 0 0 0 S 0.0 0.0 0:00.06 kblockd/0
  19. 31 root 10 -5 0 0 0 S 0.0 0.0 0:00.31 kblockd/1
  20. 32 root 14 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid

2. vmstat

        Linux 的 vmstat命令用于显示虚拟内存、内核线程、磁盘、系统进程、Block I/O、中断、CPU 活动 等的统计信息。缺省情况下, vmstat命令在 Linux 系统下不可用,你需要安装一个包含了 vmstat 程序的 sysstat 软件包。 vmstat支持四种模式,默认是VM MODE, 让我们看看实际中各种模式的执行 结果:
         VM MODE:
     
     
     
     
  1. [root@BendSha_RHEL5_5_x64 ~]# vmstat
  2. procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
  3. r b swpd free buff cache si so bi bo in cs us sy id wa st
  4. 1 0 0 1112220 141508 458428 0 0 41 31 527 76 0 1 97 1 0
      每一列的说明:
        Procs
       r: The number of processes waiting for run time.
       b: The number of processes in uninterruptible sleep.
        Memory
       swpd: the amount of virtual memory used.
       free: the amount of idle memory.
       buff: the amount of memory used as buffers.
       cache: the amount of memory used as cache.
       inact: the amount of inactive memory. (-a option)
       active: the amount of active memory. (-a option)
        Swap
       si: Amount of memory swapped in from disk (/s).
       so: Amount of memory swapped to disk (/s).
        IO
       bi: Blocks received from a block device (blocks/s).
       bo: Blocks sent to a block device (blocks/s).
        System
       in: The number of interrupts per second, including the clock.
       cs: The number of context switches per second.
       CPU
       These are percentages of total CPU time.
       us: Time spent running non-kernel code. (user time, including nice time)
       sy: Time spent running kernel code. (system time)
       id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
       wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
       st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
        
         DISK MODE
     
     
     
     
  1. [root@BendSha_RHEL5_5_x64 ~]# vmstat -d
  2. disk- ------------reads------------ ------------writes----------- -----IO------
  3. total merged sectors ms total merged sectors ms cur sec
  4. ram0 0 0 0 0 0 0 0 0 0 0
  5. ram1 0 0 0 0 0 0 0 0 0 0
  6. ram2 0 0 0 0 0 0 0 0 0 0
  7. ram3 0 0 0 0 0 0 0 0 0 0
  8. ram4 0 0 0 0 0 0 0 0 0 0
  9. ram5 0 0 0 0 0 0 0 0 0 0
  10. ram6 0 0 0 0 0 0 0 0 0 0
  11. ram7 0 0 0 0 0 0 0 0 0 0
  12. ram8 0 0 0 0 0 0 0 0 0 0
  13. ram9 0 0 0 0 0 0 0 0 0 0
  14. ram10 0 0 0 0 0 0 0 0 0 0
  15. ram11 0 0 0 0 0 0 0 0 0 0
  16. ram12 0 0 0 0 0 0 0 0 0 0
  17. ram13 0 0 0 0 0 0 0 0 0 0
  18. ram14 0 0 0 0 0 0 0 0 0 0
  19. ram15 0 0 0 0 0 0 0 0 0 0
  20. sda 45992 15956 1155388 343690 11881 24403 290114 379451 0 193
  21. sdb 93 662 2544 195 2662 295042 595468 992799 0 10
  22. fd0 0 0 0 0 0 0 0 0 0 0
  23. sr0 7 10 136 32 0 0 0 0 0 0
  24. md0 0 0 0 0 0 0 0 0 0 0
      每一列的说明:
       Reads
       total: Total reads completed successfully
       merged: grouped reads (resulting in one I/O)
       sectors: Sectors read successfully
       ms: milliseconds spent reading
        Writes
       total: Total writes completed successfully
       merged: grouped writes (resulting in one I/O)
       sectors: Sectors written successfully
       ms: milliseconds spent writing
       IO
       cur: I/O in progress
       s: seconds spent for I/O
       
        DISK PARTITION MODE
    
    
    
    
  1. [root@BendSha_RHEL5_5_x64 ~]# vmstat -p /dev/sda1
  2. sda1 reads read sectors writes requested writes
  3. 226 17829 22 50
       reads: Total number of reads issued to this partition
       read sectors: Total read sectors for partition
       writes : Total number of writes issued to this partition
       requested writes: Total number of write requests made for partition

         SLAB MODE
     
     
     
     
  1. [root@BendSha_RHEL5_5_x64 ~]# vmstat -m
  2. Cache Num Total Size Pages
  3. ext4_inode_cache 4 4 896 4
  4. ext4_xattr 0 0 88 44
  5. ext4_free_block_extents 0 0 56 67
  6. ext4_alloc_context 0 0 144 27
  7. ext4_prealloc_space 0 0 104 37
  8. ext4_system_zone 0 0 40 92
  9. jbd2_journal_handle 0 0 24 144
  10. jbd2_journal_head 1 40 96 40
  11. jbd2_revoke_table 2 202 16 202
  12. jbd2_revoke_record 0 0 32 112
  13. rpc_buffers 8 8 2048 2
  14. rpc_tasks 8 10 384 10
  15. rpc_inode_cache 6 10 768 5
  16. ip_fib_alias 10 59 64 59
  17. ip_fib_hash 10 59 64 59
  18. ip_conntrack_expect 0 0 136 28
  19. ip_conntrack 2 13 304 13
  20. iser_descriptors 0 0 320 12
  21. ib_mad 0 0 448 8
        每一列的说明:
       cache: Cache name
       num: Number of currently active objects
       total: Total number of available objects
       size: Size of each object
       pages: Number of pages with at least one active object
       totpages: Total number of allocated pages
       pslab: Number of pages per slab

3. lsof

       在许多Linux或者类Unix系统里都有lsof命令,它常用于以列表的形式显示所有打开的文件和进程。打开的文件包括磁盘文件、网络套接字、管道、设备和进程。使用这条命令的主要情形之一就是在无法挂载磁盘和显示正在使用或者打开某个文件的错误信息的时候。使用这条命令,你可以很容易地看到正在使用哪个文件。这条命令最常用的格式如下:
    
    
    
    
  1. [root@BendSha_RHEL5_5_x64 ~]# lsof
  2. bash 4856 root 0u CHR 136,0 2 /dev/pts/0
  3. bash 4856 root 1u CHR 136,0 2 /dev/pts/0
  4. bash 4856 root 2u CHR 136,0 2 /dev/pts/0
  5. bash 4856 root 255u CHR 136,0 2 /dev/pts/0
  6. pdflush 5029 root cwd DIR 8,2 4096 2 /
  7. pdflush 5029 root rtd DIR 8,2 4096 2 /
  8. pdflush 5029 root txt unknown /proc/5029/exe
  9. jbd2/sdb1 5092 root cwd DIR 8,2 4096 2 /
  10. jbd2/sdb1 5092 root rtd DIR 8,2 4096 2 /
  11. jbd2/sdb1 5092 root txt unknown /proc/5092/exe
  12. ext4-dio- 5093 root cwd DIR 8,2 4096 2 /
  13. ext4-dio- 5093 root rtd DIR 8,2 4096 2 /
  14. ext4-dio- 5093 root txt unknown /proc/5093/exe
  15. ext4-dio- 5094 root cwd DIR 8,2 4096 2 /
  16. ext4-dio- 5094 root rtd DIR 8,2 4096 2 /
  17. ext4-dio- 5094 root txt unknown /proc/5094/exe
  18. man 9278 root cwd DIR 8,2 4096 1736705 /root
  19. man 9278 root rtd DIR 8,2 4096 2 /

4. tcpdump

       tcpdump是最广泛使用的网络包分析器或者包监控程序之一,它用于捕捉或者过滤网络上指定接口上接收或者传输的TCP/IP包。它还有一个选项用于把捕捉到的包保存到文件里,以便以后进行分析。在几乎所有主要的Linux发布里,tcpdump都可以使用。
    
    
    
    
  1. [root@BendSha_RHEL5_5_x64 ~]# tcpdump -i eth0
  2. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  3. listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
  4. 20:40:52.811086 IP 192.168.117.129.ssh > 192.168.117.1.29750: P 499354857:499355053(196) ack 1824130863 win 89
  5. 20:40:52.811381 IP 192.168.117.1.29750 > 192.168.117.129.ssh: . ack 196 win 2051
  6. 20:40:52.811556 IP 192.168.117.129.46557 > 192.168.117.2.domain: 1078+ PTR? 1.117.168.192.in-addr.arpa. (44)
  7. 20:40:54.619500 arp who-has 192.168.117.129 (00:0c:29:ae:13:27 (oui Unknown)) tell 192.168.117.1
  8. 20:40:54.619511 arp reply 192.168.117.129 is-at 00:0c:29:ae:13:27 (oui Unknown)
  9. 20:40:54.814372 IP 192.168.117.2.domain > 192.168.117.129.46557: 1078 NXDomain 0/1/0 (99)
  10. 20:40:54.814626 IP 192.168.117.129.55859 > 192.168.117.2.domain: 53381+ PTR? 129.117.168.192.in-addr.arpa. (46)

5. netstat

       netstat是一个用于监控进出网络的包和网络接口统计的命令行工具。它是一个非常有用的工具,系统管理员可以用来监控网络性能,定位并解决网络相关问题,netstat命令非常的强大,这里只展示了默认的用法,后期应用过程中可以查看帮助文档深入挖掘。
     
     
     
     
  1. [root@BendSha_RHEL5_5_x64 ~]# netstat
  2. Active Internet connections (w/o servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State
  4. tcp 0 0 192.168.117.129:ssh 192.168.117.1:29750 ESTABLISHED
  5. tcp 0 1 192.168.117.129:53573 192.168.242.198:apc-9952 SYN_SENT
  6. Active UNIX domain sockets (w/o servers)
  7. Proto RefCnt Flags Type State I-Node Path
  8. unix 2 [ ] DGRAM 2240 @/org/kernel/udev/udevd
  9. unix 2 [ ] DGRAM 13146 @/org/freedesktop/hal/udev_event
  10. unix 16 [ ] DGRAM 12186 /dev/log
  11. unix 2 [ ] DGRAM 18551
  12. unix 2 [ ] DGRAM 17778
  13. unix 3 [ ] STREAM CONNECTED 17402 @/tmp/fam-root-
  14. unix 3 [ ] STREAM CONNECTED 17401
  15. unix 3 [ ] STREAM CONNECTED 17388 /var/run/dbus/system_bus_socket
  16. unix 3 [ ] STREAM CONNECTED 17387
  17. unix 3 [ ] STREAM CONNECTED 17385 /tmp/.X11-unix/X0
  18. unix 3 [ ] STREAM CONNECTED 17384
  19. unix 3 [ ] STREAM CONNECTED 17381 /tmp/.X11-unix/X0

6. htop

       htop 是一个非常高级的交互式的实时linux进程监控工具。 它和top命令十分相似,但是它具有更丰富的特性,例如用户可以友好地管理进程,快捷键,垂直和水平方式显示进程等等。 htop是一个第三方工具,它不包含在linux系统中,你需要使用YUM包管理工具去安装它。

7. iotop

       iotop命令同样也非常类似于top命令和htop程序,不过它具有监控并显示实时磁盘I/O和进程的统计功能。在查找具体进程和大量使用磁盘读写进程的时候,这个工具就非常有用。
        备注:iotop 对内核版本的要求是 kernel 2.6.18-238 及以上,对应操作系统 CentOS 5.6 和 Red Hat Linux 5.6 及以上版本。

8. iostat

       iostat是一个用于收集显示系统存储设备输入和输出状态统计的简单工具。这个工具常常用来追踪存储设备的性能问题,其中存储设备包括设备、本地磁盘,以及诸如使用NFS等的远端磁盘。
 iostat是一个用于收集显示系统存储设备输入和输出状态统计的简单工具。这个工具常常用来追踪存储设备的性能问题,其中存储设备包括设备、本地磁盘,以及诸如使用NFS等的远端磁盘。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
     
     
     
     
  1. [root@BendSha_RHEL5_5_x64 ~]# wget http://linuxinsight.com/files/iostat-2.2.tar.gz
  2. [root@BendSha_RHEL5_5_x64 ~]# tar xvf iostat-2.2.tar.gz
  3. [root@BendSha_RHEL5_5_x64 ~]# cd iostat-2.2
  4. [root@BendSha_RHEL5_5_x64 iostat-2.2]# ls
  5. INSTALL iostat iostat.8 iostat.c LICENSE Makefile README
  6. [root@BendSha_RHEL5_5_x64 iostat-2.2]# make & make install
  7. [root@BendSha_RHEL5_5_x64 iostat-2.2]# which iostat
  8. /usr/local/bin/iostat
  9. [root@BendSha_RHEL5_5_x64 iostat-2.2]# iostat 5 5
  10. sda sdb sr0 cpu
  11. kps tps svc_t kps tps svc_t kps tps svc_t us sy wt id
  12. 43 3 3.3 15 0 3.7 0 0 4.0 0 1 0 99
  13. 14 0 3.0 0 0 0.0 0 0 0.0 0 1 0 99
  14. 1 0 18.0 0 0 0.0 0 0 0.0 0 1 0 99
  15. 0 0 0.0 0 0 0.0 0 0 0.0 0 1 0 99
  16. 0 0 0.0 0 0 0.0 0 0 0.0 0 1 0 99

9. iptraf

       iptraf是一个在Linux控制台运行的、开放源代码的实时网络(局域网)监控应用。它采集了大量信息,比如通过网络的IP流量监控,包括TCP标记、ICMP详细信息、TCP/UDP流量分离、TCP连接包和字节数。同时还采集有关接口状态的常见信息和详细信息:TCP、UDP、IP、ICMP、非IP,IP校验和错误,接口活动等。
    
    
    
    
  1. [root@BendSha_RHEL5_5_x64 ~]# iptraf

 10. psacct 

       psacct或者acct工具用于监视系统里每个用户的活动状况。这两个服务进程运行在后台,它们对系统上运行的每个用户的所有活动进行近距离监视,同时还监视这些活动所使用的资源情况。
       系统管理员可以使用这两个工具跟踪每个用户的活动,比如用户正在做什么,他们提交了那些命令,他们使用了多少资源,他们在系统上持续了多长时间等等。

11. monit        

       monit是一个免费的开源软件,也是一个基于网络的进程监控工具。它能自动监控和管理系统进程,程序,文件,文件夹,权限,总和验证码和文件系统。 这个软件能监控像Apache, MySQL, Mail, FTP, ProFTP, Nginx, SSH这样的服务。你可以通过命令行或者这个软件提供的网络借口来查看系统状态。

12. nethogs

       nethogs是一个开放源源代码的很小程序(与Linux下的top命令很相似),它密切监视着系统上每个进程的网络活动。同时还追踪着每个程序或者应用所使用的实时网络带宽。

13. ifstat

        ifstat是一个统计网络接口活动状态的工具。ifstat工具系统中并不默认安装,需要自己下载源码包,重新编译安装,使用过程相对比较简单。
      
      
      
      
  1. [root@BendSha_RHEL5_5_x64 opt]# wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
  2. [root@BendSha_RHEL5_5_x64 opt]# tar xvf ifstat-1.1.tar.gz
  3. [root@BendSha_RHEL5_5_x64 opt]# cd ifstat-1.1
  4. [root@BendSha_RHEL5_5_x64 ifstat-1.1]# ./configure
  5. [root@BendSha_RHEL5_5_x64 ifstat-1.1]# make & make install
  6. [root@BendSha_RHEL5_5_x64 ifstat-1.1]# which ifstat
  7. /usr/local/bin/ifstat
  8. [root@BendSha_RHEL5_5_x64 ifstat-1.1]# ifstat -tT
  9. Time eth0 Total
  10. HH:MM:SS KB/s in KB/s out KB/s in KB/s out
  11. 00:46:42 0.06 0.20 0.06 0.20
  12. 00:46:43 0.06 0.15 0.06 0.15
  13. 00:46:44 0.06 0.15 0.06 0.15
  14. 00:46:45 0.12 0.15 0.12 0.15
  15. 00:46:46 0.06 0.15 0.06 0.15
  16. 00:46:47 0.12 0.22 0.12 0.22

14. iftop

       iftop是另一个在控制台运行的开放源代码系统监控应用,它显示了系统上通过网络接口的应用网络带宽使用(源主机或者目的主机)的列表,这个列表定期更新。iftop用于监视网络的使用情况,而'top'用于监视CPU的使用情况。iftop是'top'工具系列中的一员,它用于监视所选接口,并显示两个主机间当前网络带宽的使用情况。

15. monitorix

       monitorix 是一个免费的轻量级应用工具,它的设计初衷是运行和监控Linux/Unix服务器系统和资源等。它有一个HTTP 网络服务器,这个服务器有规律的收集系统和网络的信息并以图形化的形式展示出来。它监控系统的平均负载和使用,内存分配、磁盘健康状况、系统服务、网络端口、邮件统计(Sendmail,Postfix,Dovecot等),MySQL统计,等等。它就是用来监控系统的总体性能,帮助发现失误、瓶颈和异常活动的。

16. arpwitch

       arpwatch被设计用来监控Linux上的以太网地址解析 (MAC和IP地址的变化)。他在一段时间内持续监控以太网活动并输出IP和MAC地址配对变动的日志。它还可以向管理员发送邮件通知,对地址配对的增改发出警告。这对于检测网络上的ARP攻击很有用。

17. suricate

       suricata 是一个开源的高性能网络安全、入侵检测和反监测工具,可以运行Linux、FreeBSD和Windows上。非营利组织OISF (Open Information Security Foundation)开发并拥有其版权。

18. vnstat php

       vnstat php 是流行网络工具"vnstat"的基于web的前端呈现。vnstat php 将网络使用情况呈现在漂亮的图形界面中。他可以显示以小时、日、月计的上传和下载流量并输出总结报告。

19. nagios

       nagios是领先而强大的开源监控系统,他可以让网络/系统管理员在问题影响到正常的业务之前发现并解决它们。有了nagios系统,管理员可以在单个窗口内远程检测Linux、Windows、开关、路由器和打印机。它可以危险警告并指出系统/服务器是否有异常,这可以间接帮助你在问题发生之前采取抢救措施。


你可能感兴趣的:(Linux,Base)