Befehle zum Bestimmen des Auslastungsgrades des Servers

Befehle zum Bestimmen des Auslastungsgrades des Servers

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: sarist Teil des Sysstat-Pakets!

Ohne Argumente sargibt 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 sarTool 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 --listwü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 acfeststellen, 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 psacctPaket 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 timeFeld). 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.

verwandte Informationen