有哪些系统监控工具可用?

我正在寻找一款系统监控工具,它既可以是图形用户界面(GUI)和命令行界面(CLI),也可以是基于Web的,并且包括以下基本功能:
- CPU使用率 - 内存使用率 - 交换空间使用率 - 磁盘使用率(空间/输入输出) - 温度监控
我知道有很多工具可以使用,但我正在寻找一款具备这些基本功能的单一工具。
18个回答

Glances - 系统监控一目了然

Glances 是一款免费软件(根据LGPL许可证),用于通过文本界面监控您的GNU/Linux或BSD操作系统。Glances使用libstatgrab库从系统中获取信息,并使用Python开发。

安装

打开终端(Ctrl+Alt+T)并运行以下命令:

从Ubuntu 16.04及以上版本,您只需输入sudo apt install glances,但版本2.3 存在此bug。否则:

简易脚本安装 Glances

curl -L https://raw.githubusercontent.com/nicolargo/glancesautoinstall/master/install.sh | sudo /bin/bash

或者

wget -O- https://raw.githubusercontent.com/nicolargo/glancesautoinstall/master/install.sh | sudo /bin/bash

手动安装

sudo apt-get install python-pip build-essential python-dev lm-sensors
sudo pip install psutil logutils bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz zeroconf netifaces pymdstat influxdb elasticsearch potsdb statsd pystache docker-py pysnmp pika py-cpuinfo bernhard
sudo pip install glances

基本使用方法

要开始使用glances,只需在终端中输入glances

screenshot

在一瞥之间,您可以看到关于系统资源的大量信息:CPU、负载、内存、交换网络、磁盘I/O和进程,所有这些都显示在一个页面上。默认情况下,颜色代码的含义如下:
GREEN : the statistic is “OK”
BLUE : the statistic is “CAREFUL” (to watch)
VIOLET : the statistic is “WARNING” (alert)
RED : the statistic is “CRITICAL” (critical)

当Glances正在运行时,您可以按下一些特殊键来给它发送命令:
c: Sort processes by CPU%  
m: Sort processes by MEM%  
p: Sort processes by name  
i: Sort processes by IO Rate  
d: Show/hide disk I/O stats  
f: Show/hide file system stats  
n: Show/hide network stats  
s: Show/hide sensors stats  
b: Bit/s or Byte/s for network IO  
w: Delete warning logs  
x: Delete warning and critical logs  
1: Global CPU or Per Core stats  
h: Show/hide this help message  
q: Quit (Esc and Ctrl-C also work)  
l: Show/hide log messages

CPU,RAM,Swap 监控

screenshot

磁盘监控

screenshot

系统热量监控

如果你输入 glances --help,你会发现(-e 启用传感器模块(仅适用于Linux))

glances -e

screenshot

screenshot

配置文件

您可以在Glances的配置文件中设置阈值,在GNU/Linux上,默认的配置文件位于/etc/glances/glances.conf

客户端/服务器模式

这个监控工具的另一个有趣功能是,您可以通过输入glances -s来启动它的服务器模式,这将输出类似于“Glances服务器正在0.0.0.0:61209上运行”,现在您可以使用glances -c @server从另一台计算机连接到它,其中@server是服务器的IP地址或主机名。

Glances使用XML/RPC服务器,并可由其他客户端软件使用。 在服务器模式下,您可以设置绑定地址(-B ADDRESS)和监听TCP端口(-p PORT),默认绑定地址为0.0.0.0(Glances将监听所有网络接口),TCP端口为61209。 在客户端模式下,您可以设置服务器的TCP端口(-p port)。 在客户端/服务器模式下,限制由服务器端设置。 版本1.6引入了一个可选密码以访问服务器(-P password),如果在服务器上设置了密码,则客户端也必须使用该密码。

其他来源: PyPI, Github, Linuxaria

更新

仅仅为了举例,监控juju容器看看情况如何大图像

在终端1中,Glances以服务器模式运行,在终端2中,juju容器正在运行apt-get update,在终端3中,glances -c 192.168.1.103 Glances已连接到容器IP

screenshot

Glances CPU使用率

根据内置的系统监视器使用图表显示,Glances本身在活动状态下似乎需要定期的CPU使用率峰值。如果图表准确无误,那么使用Glances会在系统上占用大约1/4个CPU。这对于那些监控服务器CPU负载的人来说可能会产生影响。

glances cpu usage


是的,它是 @B4NZ41 - Qasim
值得安装Python只是为了获得更好的统计数据,尤其是在小型服务器上吗?比如亚马逊微型实例,内存小于750MB。 - Razor
@Razor 嗯,我不这么认为,它只是用于桌面电脑(监控一台电脑)。 - Qasim
太棒了!在Debian 8.0 Jessie(可能在Ubuntu中也有)中有一个软件包。 - user92125
4我见过的最好的工具... - Dinesh
2我强烈不推荐在这里建议的“简易”安装方法!从互联网传输数据到特权BASH解释器是非常不安全的。如果有人配置错误的DNS,或者黑客攻击了bit.ly,你可能会在系统上安装任何东西,而且你可能永远都不会知道。 - Luke Stanley
2我不推荐使用“Easy Script Installation”,建议只使用软件包进行安装。 - Pablo Bianchi
3要卸载,请使用以下命令:sudo pip uninstall glances - Pablo Bianchi

指示器-SysMonitor

指示器-SysMonitor功能简单,但表现出色。安装并运行后,它会在您的顶部面板上显示CPU和RAM的使用情况。简单明了。

enter image description here

这里下载

Conky

我个人最喜欢的之一

enter image description here

屏幕小部件 在Ubuntu软件中心提供的screenlets-all包中,您会找到一系列不同风格的CPU和RAM监视器。

enter image description here

一目了然

安装方法:

sudo apt-get install python-pip build-essential python-dev
sudo pip install Glances
sudo pip install PySensors

enter image description here

VMSTAT

显示有关CPU、内存、进程等的信息。

IOSTAT

此命令行工具将显示有关CPU、硬盘分区的I/O信息,网络文件系统(NFS)等的统计数据。要安装iostat,请运行以下命令:

sudo apt-get install sysstat

开始报告,请运行以下命令:
iostat

要仅检查CPU统计信息,请使用以下命令:
iostat -c

使用以下命令获取更多参数信息:
iostat --help

MPSTAT

mpstat命令行实用程序将显示每个处理器的平均CPU使用率。要运行它,只需使用以下命令:

mpstat

要查看每个处理器的CPU使用情况,请使用以下命令:
mpstat -P ALL

Saidar Saidar还可以通过命令行监控系统设备的活动。

enter image description here

你可以使用以下命令来安装它:
sudo apt-get install saidar

要开始监控,请运行以下命令:
saidar -c -d 1

统计数据将每秒刷新一次。

GKrellM

GKrellM是一个可自定义的小部件,具有各种主题,显示在您的桌面系统设备上的信息(CPU、温度、内存、网络等)。

enter image description here

安装GKrellM,请运行以下命令:
sudo apt-get install gkrellm

Monitorix是另一个具有基于网页的用户界面的应用程序,用于监控系统设备。

enter image description here

使用以下命令进行安装:
sudo add-apt-repository ppa:upubuntu-com/ppa
sudo apt-get update
sudo apt-get install monitorix

通过此URL启动Monitorix:

http://localhost/monitorix/

 


一瞥是好的。它向我展示了有时候一些关键的日志。问题在哪里找?那些日志在哪里?警告|关键日志(最近9个条目) 2016-03-23 19:09:48 > 2016-03-23 19:09:54 CPU用户(72.7/76.6/80.6) 2016-03-23 19:09:28 > 2016-03-23 19:09:32 CPU等待IO(62.5/62.5/62.5) 2016-03-23 19:08:45 > 2016-03-23 19:08:48 CPU用户(86.3/86.3/86.3) ~ 2016-03-23 19:08:16 > ___________________ 负载5分钟(1.0/1.1/1.2)- 最高进程:php5-cgi 2016-03-23 19:08:09 > 2016-03-23 19:08:19 CPU等待IO(74.3/74.6/75.0) - Kangarooo
@Thuener 在你发表这种无稽之谈之前,最好先阅读和搜索一下。是的,它是ppa::upubuntu-com/ppa...请参考此链接https://launchpad.net/~upubuntu-com/+archive/ubuntu/ppa。我认为你最好取消你的负评 :) - Maythux
我一直在使用GKrellM,非常喜欢它,尤其是温度传感器的显示。不过我希望它们能够以图形方式呈现,因为这样可以让我知道我的笔记本电脑的运行情况,因为它有一个过热问题。 - Heather92065

以下是监控 Linux 系统的工具:

  1. 系统命令,如 topfree -mvmstatiostatiotopsarnetstat 等。在调试问题时,这些命令无与伦比,它们可以清楚地展示服务器的内部情况。
  2. SeaLion:代理执行了 #1 中提到的所有命令(还包括用户定义的命令),这些命令的输出可以通过漂亮的 Web 界面访问。当您需要调试数百台服务器时,这个工具非常方便,因为安装非常简单。而且它是免费的。
  3. Nagios:它是所有监控/警报工具中的鼻祖。它非常可定制,但对于初学者来说设置起来非常困难。有一组名为 Nagios 插件的工具,涵盖了几乎所有重要的 Linux 指标。
  4. Munin
  5. Server density:这是一个基于云的付费服务,收集重要的 Linux 指标,并使用户能够编写自己的插件。
  6. New Relic:另一个著名的托管监控服务。
  7. Zabbix


不错的一个:系统负载指示器 - Qasim

顶部

顶部是一款监控软件,列出所有进程的CPU/RAM使用情况,整体CPU/RAM使用情况等等。通常情况下,它是默认安装的。

htop

htop是top的扩展版本。它具有上述所有功能,但您可以查看子进程并自定义显示内容。它还支持彩色显示。

iotop

iotop专门用于监控硬盘I/O。它列出所有进程,并显示它们的读写硬盘使用情况。


热度监控在哪里?而且你的回答中已经包含了3个实用工具...请检查问题。我正在寻找一个具备基本功能的单一工具。 - Qasim
我只是为OP提供了三种不同的选项,但遗憾的是,这些选项都没有热量监测功能。 - BeryJu
至少你已经尝试回答了这个问题...谢谢 - Qasim
谷歌(Saidar ubuntu) - Qasim

你可能想尝试一下sysmon。虽然不像Glances那样花哨,但它非常直观和易于使用。
如果你想要深入了解并在Python中进行一些脚本编写,以下是一些使用Python进行系统监控的基础知识,帮助你入门。
大多数情况下,你需要一个名为psutil的外部模块来监控各种事物。最简单的方法是使用外部模块安装程序而不是从源代码构建。 注意:这些示例是用Python 2.7编写的
sudo apt-get install pip
sudo pip install psutil

现在我们已经安装了模块,可以开始编码了。
首先,创建一个名为usage.py的文件。
gedit ~/usage.py

开始导入psutil
import psutil

然后,创建一个函数来监视您的CPU核心运行的百分比。
def cpu_perc(): 

    cpu_perc = psutil.cpu_percent(interval=1, percpu=True) 
    for i in range(len(cpu_perc)):
        print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"

让我们稍微分解一下,好吗?
第一行代码cpu_num = psutil.cpu_percent(interval=1, percpu=True),找到CPU核心的运行百分比,并将其赋值给一个名为cpu_perc的列表。
这个循环在这里。
for i in range(len(cpu_num)):
    print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"

这是一个循环,打印出每个CPU核心的当前百分比。
我们来添加内存使用情况。
创建一个名为ram_perc的函数。
def ram_perc():
    mem = psutil.virtual_memory()
    mem_perc = mem.percent
    print "RAM: ", mem_perc, "%"

psutil.virtual_memory提供了一个包含关于计算机RAM的不同信息的数据集。

接下来,您可以添加一些关于您的网络的信息。

def net():
    net = psutil.net_io_counters()
    mbytes_sent = float(net.bytes_sent) / 1048576
    mbytes_recv = float(net.bytes_recv) / 1048576
    print "MB sent: ", mbytes_sent
    print "MB received: ", mbytes_recv

由于psutil.net_io_counters()只提供了有关以字节形式发送和接收的数据包的信息,因此需要进行一些转换。

要获取有关交换空间的一些信息,请添加此函数。

def swap_perc():
    swap = psutil.swap_memory()
    swap_perc = swap.percent

这个问题很直接。

温度比较难处理,所以你可能需要自己进行一些研究,找出适用于你的硬件的解决方法。你需要显示特定文件的内容。

磁盘使用情况比温度要简单得多。你只需要将你想要监控的磁盘(例如:/)通过某个函数传递即可。

def disks():
    if len(sys.argv) > 1:
        for disk in range(1, len(sys.argv)):
            tmp = psutil.disk_usage(sys.argv[disk])
            print sys.argv[disk], "\n"
            print "Megabytes total: ",
            print str(float(tmp.total) / 1048576)
            print "Megabytes used: ",
            print str(float(tmp.used) / 1048576)
            print "Megabytes free: ",
            print str(float(tmp.free) / 1048576)
            print "Percentage used: ",
            print tmp.percent, "\n"
psutil.disk_usage的原始输出如下:
>>>psutil.disk_usage('/')
sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)

但你也可以只接收总数已使用空闲百分比

完成的程序:(上述功能已合并)

import psutil, os, sys
mem_perc = 0 #init var
swap_perc = 0 #init var
mbytes_sent = 0 #init var
mbytes_recv = 0 #init var
cpu_perc = 0 #init var
swap = 0 #init var
mem = 0 #init var
net = 0 #init var



def disp(degree):
    global cpu_perc
    global swap
    global swap_perc
    global mem
    global mem_perc
    global net
    global mbytes_sent
    global mbytes_recv

    cpu_perc = psutil.cpu_percent(interval=1, percpu=True)
    swap = psutil.swap_memory()
    swap_perc = swap.percent
    mem = psutil.virtual_memory()
    mem_perc = mem.percent
    net = psutil.net_io_counters()
    mbytes_sent = float(net.bytes_sent) / 1048576
    mbytes_recv = float(net.bytes_recv) / 1048576

    os.system('clear') #clear the screen

    print "-"*30
    print "CPU"
    print "-"*30
    print "CPU Temperature: " , degree, "'C"
    for i in range(len(cpu_perc)):
        print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"

    print "-"*30
    print "MEMORY"
    print "-"*30
    print "RAM: ", mem_perc, "%"
    print "Swap: ", swap_perc, "%"
    print "-"*30
    print "NETWORK"
    print "-"*30
    print "MB sent: ", mbytes_sent
    print "MB received: ", mbytes_recv
    print "-"*30
    print "DISKS"
    print "-"*30

    if len(sys.argv) > 1:
        for disk in range(1, len(sys.argv)):
            tmp = psutil.disk_usage(sys.argv[disk])
            print sys.argv[disk], "\n"
            print "Megabytes total: ",
            print str(float(tmp.total) / 1048576)
            print "Megabytes used: ",
            print str(float(tmp.used) / 1048576)
            print "Megabytes free: ",
            print str(float(tmp.free) / 1048576)
            print "Percentage used: ",
            print tmp.percent, "\n"

def main():
    print("Press Ctrl+C to exit")
    while True:
        temp = open("/sys/class/thermal/thermal_zone0/temp").read().strip().lstrip('temperature :').rstrip(' C')
        temp = float(temp) / 1000
        disp(temp)

main()

这行代码 temp = open("/sys/class/thermal/thermal_zone0/temp").read().strip().lstrip('temperature :').rstrip(' C') 可能无法与您的硬件配置兼容。

请从命令行运行此程序。从命令行传递要监视的磁盘作为参数。

$ python usage.py /

Press Ctrl+C to exit

------------------------------
CPU
------------------------------
CPU Temperature:  39.0 'C
CPU Core 1 : 4.8 %
CPU Core 2 : 1.0 %
CPU Core 3 : 0.0 %
CPU Core 4 : 4.9 %
------------------------------
MEMORY
------------------------------
RAM:  33.6 %
Swap:  6.4 %
------------------------------
NETWORK
------------------------------
MB sent:  2.93382358551
MB received:  17.2131490707
------------------------------
DISKS
------------------------------
/ 

Megabytes total:  13952.484375
Megabytes used:  8542.6640625
Megabytes free:  4678.5703125
Percentage used:  61.2 

/media/calvin/Data 

Megabytes total:  326810.996094
Megabytes used:  57536.953125
Megabytes free:  269274.042969
Percentage used:  17.6 

希望这能帮到你!如果有任何问题,请留言评论。

https://github.com/calthecoder/sysmon-1.0.1


虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分,并提供链接作为参考。仅有链接的答案如果链接页面发生变化,就可能失效。 - Ron
@Ron - 好的,我会在几天内对我的帖子进行编辑,并展示sysmon的基本脚本部分。感谢你的建议! - Calvin K
请查看http://meta.askubuntu.com/questions/13900/how-do-i-format-some-code-specifically-for-the-language-used-or-how-do-i-preven。你具体尝试了什么? - muru
@muru - 没关系,现在它正常工作了。谢谢你提供的链接! - Calvin K
@muru - 但是,为了回答你的问题,我用三个反引号开始代码块,后面跟着我想要突出语法的语言,并以三个反引号结束。 - Calvin K
@calthecoder,SE的Markdown目前还不支持三个撇号的方法。 - muru
@muru - 好的。GitHub是唯一支持它的地方吗?它在他们的文档部分中。 - Calvin K
其他地方也有,但是SE不支持。请参考http://askubuntu.com/editing-help#code了解支持的内容。 - muru

systat软件包中有一个工具叫做sar,它可以满足你的所有需求。它还可以收集历史数据,让你可以查看一段时间前发生了什么。

1http://www.thegeekstuff.com/2011/03/sar-examples/ - Qasim

有一个内置工具叫做gnome-system-monitor。它可以完成你提到的所有功能,除了热量监控。

SeaLion可以是一个很方便的工具,因为它内置了监控服务器性能的命令,你还可以添加自定义命令、脚本和日志输出。 设置非常简单,可以轻松地找出特定时间发生了什么问题。

2


我喜欢使用可以按照你的喜好进行配置的conky

enter image description here

你可以谷歌conky,找到787,000个结果。适合每个人的东西。

在显示屏顶部请注意“锁定屏幕:4分钟 亮度:2074”。这些是由“指示器-sysmonitor”生成的,它允许您使用bash脚本在systray /应用程序指示器上显示。

有关设置“Indicator-Sysmonitor”的教程,请参见: BASH是否可以显示为系统托盘应用程序指示器?