
Ich schreibe ein neues Programm, das eine Verbindung zu einem Cluster von Maschinen in einem VM-Park herstellt und hoffentlich deren Auslastung überprüft. Die VM-Clients sind eine Kombination aus RHEL und CentOS und laufen auf mehreren KVM-Hosts.
Ich hoffe, dass ich die nicht mehr benötigten VMs finden kann, indem ich überprüfe, wofür sie derzeit verwendet werden.
Was wären gute Indikatoren für die Systemnutzung und welche Befehle könnten mir dabei helfen, das System entsprechend zu bewerten?
Ich denke, wenn ich Befehle wie „uptime“, „chkconfig --list“, „last“ und „ps“ kombiniere, kann ich die Nutzungsrate ermitteln, allerdings auf einem sehr ungenauen Niveau.
Bei der Systemnutzung denke ich daran, ob die Maschine im Einsatz ist oder ob sie heruntergefahren werden könnte, ohne dass Anwendungen oder Benutzer Schaden nehmen.
Anhand der Beispiele kann ich feststellen, ob es Server gibt, die sich stark vom Rest unterscheiden, ich könnte jedoch keine Aussage darüber treffen, ob sie verwendet werden oder nicht.
Antwort1
Überwachung
Dies ist eine ziemlich offene Frage. Es gibt unzählige Anwendungen, mit denen Sie die CPU-Auslastung eines Servers, den Netzwerkverkehr, den Datei-E/A usw. überwachen können.
Auf der grundlegendsten Ebene würde ich damit beginnen, die CPU-Auslastung der VMs zu überwachen. Sie können dies auf zwei Arten überwachen, entweder innerhalb der VMs selbst oder extern auf den VM-Hosts.
Überwachung über den KVM-Host
Da eine VM auf der grundlegendsten Ebene nur eine Anwendung ist, können Sie jede VM auf einem KVM-Server einfach überwachen, indem Sie den entsprechenden QEMU-Prozess beobachten.
$ 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
So etwas wie das Obige würde beispielsweise den Namen des KVM (6. Spalte) mit dem verwendeten CPU-Prozentsatz (4. Spalte) anzeigen, zusammen mit der tatsächlichen CPU-Zeit, die bisher verwendet wurde (2. Spalte) und der verstrichenen Laufzeit (3. Spalte). Die 5. Spalte zeigt die dem KVM zugewiesene RAM-Menge.
Überwachung durch die KVM-Gäste
Wenn Sie eine detailliertere Ansicht wünschen, müssen Sie tatsächlich in jede VM hineinschnüffeln und die darin enthaltenen Daten lokal sammeln. Eine Möglichkeit, ziemlich gute Daten zu erhalten, ist das Tool sar
. Die meisten RHEL-, CentOS- und Fedora-Betriebssysteme haben dieses Paket standardmäßig installiert.
NOTIZ: sar
ist Teil des Sysstat-Pakets!
Ohne Argumente sar
gibt der Basisbefehl die CPU-Auslastung für den aktuellen Tag von 0:00 Uhr bis zur aktuellen Uhrzeit zurück.
Zum Beispiel:
$ 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
In der letzten Zeile werden die Gesamtdurchschnitte für jede entsprechende Maßnahme angezeigt. Beachten Sie auch, dass die Daten alle 10 Minuten abgetastet werden. Dies ist natürlich konfigurierbar.
Das sar
Tool kann viel mehr als nur die CPU-Auslastung. Es ist ein Komplettpaket und ermöglicht Ihnen die Überwachung von Datei-E/A, Netzwerkbetrieb, Speicherauslagerung usw.
Darüber hinaus kann es die Daten unter anderem in die Formate CSV oder XML konvertieren und auch Berichte erstellen!
Paketinstallationen
So wie Sie es verwenden, chkconfig --list
würde ich anfangen zu ermitteln, welche Dienste auf einer bestimmten Box konfiguriert sind. Je nachdem, wie die Box eingerichtet ist (unsere sind normalerweise auf Runlevel 3 eingestellt), würde ich diesen Befehl verwenden:
$ 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
Benutzeranmeldung
Mit dem Tool können Sie ac
feststellen, ob und wie lange sich Personen in ein System einloggen.
Zum Beispiel:
$ 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
Zeigt eine tägliche Aufschlüsselung der Stunden, die ein bestimmter Benutzer bei einem System angemeldet war.
Prozessabrechnung
Wenn Sie wirklich ernsthaft verfolgen möchten, was auf einer Linux-Box passiert, können Sie das Prozesskonto aktivieren. Dies ist der Dienst /etc/init.d/psacct
. Dadurch erhalten Sie alle Einzelheiten darüber, wann ein Dienst zuletzt ausgeführt wurde, welche Befehle ein bestimmter Benutzer zuletzt ausgeführt hat usw. Das ist so ziemlich das volle Programm.
Beispiele
Zuletzt vom Benutzer Vivek ausgeführte Befehle
$ 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
das letzte Mal, als rm ausgeführt wurde
$ 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
Mit dieser letzten Technik ließe sich beispielsweise ermitteln, wann Apache das letzte Mal ausgeführt wurde (httpd).
Das psacct
Paket enthält noch viele weitere Tools. Dies soll Ihnen nur ein paar Ideen geben und Ihnen den Einstieg erleichtern.
Verweise
Antwort2
Du kannst rennen
ps -C qemu-kvm -o pid,time,etime,args
auf dem Host regelmäßig und überprüfen Sie die Veränderung der CPU-Zeit (das time
Feld). Das ermöglicht Ihnen eine Auswertung über einen größeren Zeitraum. Sie können die Ergebnisse von Zeit zu Zeit speichern, um sie nicht zu verlieren, wenn eine VM abstürzt oder heruntergefahren wird.