我正在编写一个新程序,该程序将连接到虚拟机园区中的一组机器,并希望检查它们的使用级别。 VM客户端是RHEL和CentOS的组合,并在多个KVM主机上运行。
我希望能够通过检查它们现在的用途来找到不再需要的虚拟机。
什么是系统使用情况的良好指标,哪些命令可以帮助我对系统进行相应的评级?
我想,如果我结合 uptime、“chkconfig --list”、last 和 ps 等命令,我可以确定使用率,但处于非常不准确的水平。
对于系统使用,我会考虑机器是否正在使用,或者是否可以关闭,而不会损害任何应用程序或用户。
通过这些示例,我可以确定是否存在与其他服务器有很大不同的服务器,但我无法说明它是否正在使用。
答案1
监控
这是一个相当广泛的开放性问题。您可以使用大量应用程序来监控服务器 CPU 的负载、网络流量、文件 I/O 等。
在最基本的层面上,我会从监控虚拟机的 CPU 负载开始。您可以通过两种方式对此进行监控:在虚拟机本身内或在虚拟机主机外部。
通过KVM主机监控
由于最基本级别的虚拟机只是一个应用程序,因此您可以通过观察相应的 qemu 进程来简单地监控 KVM 服务器上的每个虚拟机。
$ ps -C qemu-kvm -o pid,time,etime,pcpu,args|perl -lane 'printf "%-7s %-12s %-12s %-5s %-5s %-s\n", @F[0..3,9,13]'
PID TIME ELAPSED %CPU
3860 11:37:32 85-10:32:43 0.5 512 mungr
4005 3-22:34:33 85-10:32:25 4.6 512 cobbler
4447 4-20:11:27 85-10:31:14 5.6 2048 mercury
6788 02:28:58 54-08:59:04 0.1 1024 xwiki
23916 1-03:46:02 80-09:51:47 1.4 512 fan
32539 02:17:48 1-08:50:54 6.9 1024 visualstudio
例如,类似于上面的内容,将显示 KVM 的名称(第 6 列)以及正在使用的 %CPU(第 4 列),以及它们迄今为止使用的实际 CPU 时间(第 2 列)以及它们已用的时间。正在运行(第三列)。第 5 列显示分配给 KVM 的 RAM 量。
通过KVM来宾监控
如果您想要更详细的视图,那么您需要实际深入每个虚拟机并在本地收集其中的数据。获得良好数据的一种方法是通过该工具sar
。大多数 RHEL、CentOS 和 Fedora 操作系统默认安装此软件包。
笔记: sar
是 sysstat 包的一部分!
如果没有任何参数,基本sar
命令将返回当天的 CPU 利用率,从上午 12 点到当前时间。
例如:
$ date
Tue May 7 21:31:54 EDT 2013
$ sar
Linux 2.6.35.14-106.fc14.x86_64 (grinchy) 05/07/2013 _x86_64_ (4 CPU)
12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 24.86 0.00 3.98 6.01 0.00 65.16
12:20:01 AM all 25.12 0.00 3.98 5.98 0.00 64.93
...
...
09:20:01 PM all 36.06 0.00 5.00 4.95 0.00 54.00
09:30:01 PM all 35.40 0.00 4.97 4.66 0.00 54.97
Average: all 22.29 0.08 4.37 4.80 0.00 68.46
最后一行显示每个相应度量的总体平均值。另请注意,数据每 10 分钟采样一次。这当然是可配置的。
该sar
工具可以做的不仅仅是 CPU 利用率。它是一个完整的软件包,允许您监视文件 I/O、网络、内存分页等。
此外,它还可以将数据生成为 CSV 或 XML 格式(等等),并且还可以生成报告!
软件包安装
您使用的想法chkconfig --list
是我将如何开始确定给定盒子上配置的服务。根据盒子的设置方式,我们的盒子通常设置为在运行级别 3 下运行,我将使用以下命令:
$ chkconfig --list |grep 3:on
abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
avahi-daemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off
...
...
vboxdrv 0:off 1:off 2:on 3:on 4:on 5:on 6:off
vboxweb-service 0:off 1:off 2:on 3:on 4:on 5:on 6:off
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
用户正在登录
您可以使用该工具ac
来确定人们是否登录系统以及登录时间。
例如:
$ ac -pd
sam 0.15
Apr 28 total 0.15
sam 0.32
Apr 29 total 0.32
sam 0.00
Apr 30 total 0.00
sam 0.01
joeuser 0.00
May 3 total 0.01
sam 1.54
May 5 total 1.54
sam 0.01
Today total 0.01
显示给定用户登录系统的每日详细信息。
流程核算
如果您真的想跟踪 Linux 机器上发生的情况,您可以启用进程帐户。这就是服务/etc/init.d/psacct
。这将为您提供有关服务上次运行时间、给定用户上次运行哪些命令等的完整详细信息。这几乎是完整的九码。
例子
用户 vivek 最后运行的命令
$ lastcomm vivek
userhelper S X vivek pts/0 0.00 secs Mon Nov 13 23:58
userhelper S vivek pts/0 0.00 secs Mon Nov 13 23:45
rpmq vivek pts/0 0.01 secs Mon Nov 13 23:45
rpmq vivek pts/0 0.00 secs Mon Nov 13 23:45
rpmq vivek pts/0 0.01 secs Mon Nov 13 23:45
gcc vivek pts/0 0.00 secs Mon Nov 13 23:45
上次运行 rm 的时间
$ lastcomm rm
rm S root pts/0 0.00 secs Tue Nov 14 00:39
rm S root pts/0 0.00 secs Tue Nov 14 00:39
rm S root pts/0 0.00 secs Tue Nov 14 00:38
例如,最后一项技术可用于查看 Apache 上次运行的时间 (httpd)。
该psacct
软件包还有许多其他工具。这只是为了给您一些想法并帮助您入门。
参考
答案2
你可以运行
ps -C qemu-kvm -o pid,time,etime,args
定期在主机上检查CPU时间(字段time
)的变化。这使您可以在更长的时间内进行评估。您可以不时保存结果,以免在虚拟机崩溃或关闭时丢失它们。