Analysieren von Leistungskennzahlen mit dem Analyse-Toolkit Performance Co-Pilot
- WAS?
Für die Leistungsüberwachung bietet SUSE Linux Enterprise Micro ein Container-Image, mit dem Sie das Analyse-Toolkit Performance Co-Pilot (PCP) in einem Container ausführen können.
- WARUM?
Sie möchten die Leistung Ihres Systems überwachen. In diesem Artikel erfahren Sie, wie Sie das Toolkit konfigurieren und verwenden können.
- AUFWAND
Es dauert etwa 40 Minuten, den Artikel zu lesen.
- ZIEL
Sie können den PCP-Container mit einer Konfiguration starten, die Ihren Bedürfnissen entspricht.
- ANFORDERUNGEN
Eine ausgeführte Instanz von SLE Micro.
1 Analyse-Toolkit Performance Co-Pilot #
Das Toolkit umfasst Tools zum Erfassen und Verarbeiten von Leistungsinformationen, die entweder in Echtzeit oder aus PCP-Archivprotokollen stammen.
Die Leistungsdaten werden von Leistungskennzahlen-Domänenagenten erfasst und an den pmcd
-Daemon weitergeleitet. Der Daemon koordiniert das Erfassen und Exportieren von Leistungsstatistiken als Reaktion auf Anforderungen der PCP-Überwachungstools. pmlogger
wird dann zum Protokollieren der Kennzahlen verwendet. Detaillierte Informationen finden Sie in PCP
documentation.
1.1 Abrufen des PCP-Container-Images #
Das PCP-Container-Image basiert auf dem BCI-Init-Container, der mit systemd
die PCP-Dienste verwaltet.
Sie können das Container-Image mit Podman oder über die Cockpit Web-Managementkonsole abrufen. Führen Sie das folgende Kommando aus, um das Image mit Hilfe von Podman abzurufen:
#
podman pull registry.suse.com/suse/pcp:latest
Wenn Sie das Container-Image über Cockpit abrufen möchten, gehen Sie zu pcp. Wählen Sie dann das Image unter registry.suse.com
für SLE 15 SP4 aus und laden Sie es herunter.
2 Ausführen des PCP-Containers #
Das folgende Kommando zeigt die minimalen Optionen, die Sie für die Ausführung eines PCP-Containers verwenden müssen:
#
podman run -d \
--systemd always \
-p HOST_IP:HOST_PORT:CONTAINER_PORT \
-v HOST_DIR:/var/log/pcp/pmlogger \
PCP_CONTAINER_IMAGE
wobei die Optionen die folgende Bedeutung haben:
-
-d
Der Container wird in einem getrennten Modus ohne tty ausgeführt.
-
--systemd always
Führt den Container im
systemd
-Modus aus. Alle Dienste, die für die Ausführung im PCP-Container benötigt werden, werden automatisch vonsystemd
im Container gestartet.-
--privileged
Der Container wird mit erweiterten Rechten ausgeführt. Verwenden Sie diese Option, wenn auf Ihrem System SELinux aktiviert ist. Andernfalls sind die erfassten Kennzahlen unvollständig.
-
-v HOST_DIR:/var/log/pcp/pmlogger
Erzeugt einen Bind-Mount, so dass die
pmlogger
-Archive in das HOST_DIR auf dem Host geschrieben werden. Standardmäßig speichertpmlogger
die erfassten Kennzahlen in/var/log/pcp/pmlogger
.- PCP_CONTAINER_IMAGE
Ist das heruntergeladene PCP-Container-Image.
Weitere nützliche Optionen des Kommandos podman run
folgen:
-
-p HOST_IP:HOST_PORT:CONTAINER_PORT
Veröffentlicht die Ports des Containers, indem ein Container-Port auf einen Host-Port abgebildet wird. Wenn Sie HOST_IP nicht angeben, werden die Ports auf dem lokalen Host zugeordnet. Wenn Sie den Wert HOST_PORT weglassen, wird eine zufällige Portnummer verwendet. Standardmäßig überwacht der
pmcd
-Daemon den Port 44321 und stellt die PMAPI für den Empfang von Kennzahlen bereit. Wir empfehlen daher, diesen Port der gleichen Portnummer auf dem Host zuzuordnen. Derpmproxy
-Daemon überwacht standardmäßig den Port 44322 und stellt die REST PMWEBAPI für den Zugriff auf Kennzahlen zur Verfügung. Es wird daher empfohlen, diesen Port der gleichen Host-Portnummer zuzuordnen.-
--net host
Der Container verwendet das Netzwerk des Hosts. Verwenden Sie diese Option, um Kennzahlen von den Netzwerkschnittstellen des Hosts zu erfassen.
-
-e
Mit dieser Option können Sie die folgenden Umgebungsvariablen festlegen:
- PCP_SERVICES
Ist eine durch Kommata getrennte Liste von Diensten, die von
systemd
im Container gestartet werden sollen.Standarddienste sind:
pmcd
,pmie
,pmlogger
,pmproxy
.Mit dieser Variable können Sie einen Container mit einer Liste von Diensten starten, die sich von der Standardliste unterscheidet, zum Beispiel nur mit
pmlogger
:#
podman run -d \ --name pmlogger \ --systemd always \ -e PCP_SERVICES=pmlogger \ -v pcp-archives:/var/log/pcp/pmlogger \ registry.suse.com/suse/pcp:latest- HOST_MOUNT
ist ein Pfad innerhalb des Containers zum Bind-Mount des Root-Dateisystems des Hosts. Der Standardwert ist nicht festgelegt.
- REDIS_SERVERS
Gibt eine Verbindung zu einem Redis-Server an. In einer nicht geclusterten Einrichtung geben Sie eine durch Komma getrennte Liste von Host-Spezifikationen an. In einer Cluster-Einrichtung, die einen einzelnen Cluster-Host bereitstellt, werden die anderen Hosts im Cluster automatisch erkannt. Der Standardwert ist:
localhost:6379
.
Wenn Sie eine andere Konfiguration als die durch die Umgebungsvariablen bereitgestellte verwenden müssen, gehen Sie wie in Abschnitt 3, „Konfigurieren von PCP-Diensten“ beschrieben vor.
2.1 Automatischer Start des PCP-Containers beim Booten #
Nachdem Sie den PCP-Container ausgeführt haben, können Sie systemd
so konfigurieren, dass der Container beim Booten gestartet wird. Gehen Sie dazu wie folgt vor:
Erstellen Sie eine Unit-Datei für den Container mit dem Kommando
podman generate systemd
:#
podman generate systemd --name CONTAINER_NAME > /etc/systemd/system/container-CONTAINER_NAME.servicewobei CONTAINER_NAME der Name des PCP-Containers ist, den Sie bei der Ausführung des Containers aus dem Container-Image verwendet haben.
Aktivieren Sie den Dienst in
systemd
:#
systemctl enable container-CONTAINER_NAME
3 Konfigurieren von PCP-Diensten #
Alle Dienste, die innerhalb des PCP-Containers ausgeführt werden, haben eine Standardkonfiguration, die möglicherweise nicht Ihren Anforderungen entspricht. Wenn Sie eine benutzerdefinierte Konfiguration benötigen, die nicht durch die Umgebungsvariablen abgedeckt werden kann, erstellen Sie Konfigurationsdateien für die PCP-Dienste und übergeben sie dem PCP über einen Bind-Mount wie folgt:
#
podman run -d \
--name CONTAINER_NAME \
--systemd always \
-v $HOST_CONFIG:CONTAINER_CONFIG_PATH:z \
-v HOST_LOGS_PATH:/var/log/pcp/pmlogger \
registry.suse.com/suse/pcp:latest
Ort:
- CONTAINER_NAME
ist ein optionaler Container-Name.
- HOST_CONFIG
ist ein absoluter Pfad zu der Konfiguration, die Sie auf dem Hostrechner erstellt haben. Sie können jeden beliebigen Dateinamen wählen.
- CONTAINER_CONFIG_PATH
ist ein absoluter Pfad zu einer bestimmten Konfigurationsdatei innerhalb des Containers. Jede verfügbare Konfigurationsdatei wird in den entsprechenden Abschnitten näher beschrieben.
- HOST_LOGS_PATH
ist ein Verzeichnis, das ein Bind-Mount zu den Container-Protokollen sein soll.
Ein Container namens pcp
, mit der Konfigurationsdatei pmcd
auf dem Hostrechner und dem Verzeichnis pcp-archives
für die Protokolle auf dem Hostrechner, wird beispielsweise mit folgendem Kommando gestartet:
#
podman run -d \
--name pcp \
--systemd always \
-v $(pwd)/pcp-archives:/var/log/pcp/pmlogger \
-v $(pwd)/pmcd:/etc/sysconfig/pmcd \
registry.suse.com/suse/pcp:latest
3.1 Benutzerdefinierte Konfiguration des pmcd
-Daemons #
Die Konfiguration des pmcd
-Daemons wird in der Datei /etc/sysconfig/pmcd
gespeichert. In der Datei werden Umgebungsvariablen gespeichert, die das Verhalten des pmcd
-Daemons verändern.
Sie können die folgenden Variablen in die Datei /etc/sysconfig/pmcd
aufnehmen, um den pmcd
-Daemon zu konfigurieren:
- PMCD_LOCAL
Legt fest, ob der entfernte Host eine Verbindung zum
pmcd
-Daemon herstellen kann. Wenn sie auf 0 festgelegt ist, sind Fernverbindungen zum Daemon erlaubt. Bei 1 überwacht der Daemon nur den lokalen Host. Der Standardwert ist 0.- PMCD_MAXPENDING
Definiert die maximale Anzahl der anstehenden Verbindungen zum Agenten. Der Standardwert ist 5.
- PMCD_ROOT_AGENT
Wenn
pmdaroot
aktiviert ist (der Wert ist auf 1 festgelegt), löst das Hinzufügen einer neuen PDMA keinen Neustart anderer PMDAs aus. Wennpmdaroot
nicht aktiviert ist, erfordertpmcd
einen Neustart aller PMDAs, wenn ein neuer PMDA hinzugefügt wird. Der Standardwert ist 1.- PMCD_RESTART_AGENTS
Wenn er auf 1 festgelegt ist, versucht der
pmcd
-Daemon, jeden beendeten PMDA neu zu starten. Aktivieren Sie diese Option nur, wenn Siepmdaroot
aktiviert haben, dapmcd
selbst keine Rechte zum Neustart von PMDA besitzt.- PMCD_WAIT_TIMEOUT
Legt die maximale Zeit in Sekunden fest, die
pmcd
warten kann, um eine Verbindung zu akzeptieren. Nach dieser Zeit wird die Verbindung als fehlgeschlagen gemeldet. Der Standardwert ist 60.- PCP_NSS_INIT_MODE
Legt den Modus fest, in dem
pmcd
die NSS-Zertifikatsdatenbank initialisiert, wenn gesicherte Verbindungen verwendet werden. Der Standardwert istreadonly
. Sie können den Modus aufreadwrite
festlegen. Wenn die Initialisierung jedoch fehlschlägt, wird der Standardwert als Fallback verwendet.
Beispiel:
PMCD_LOCAL=0 PMCD_MAXPENDING=5 PMCD_ROOT_AGENT=1 PMCD_RESTART_AGENTS=1 PMCD_WAIT_TIMEOUT=70 PCP_NSS_INIT_MODE=readwrite
3.2 Benutzerdefinierte Konfiguration für pmlogger
#
Die benutzerdefinierte Konfiguration für pmlogger
wird in den folgenden Konfigurationsdateien gespeichert:
/etc/sysconfig/pmlogger
/etc/pcp/pmlogger/control.d/local
3.2.1 Die /etc/sysconfig/pmlogger
-Datei #
Sie können die folgenden Attribute verwenden, um pmlogger
zu konfigurieren:
- PMLOGGER_LOCAL
Definiert, ob
pmlogger
Verbindungen von entfernten Hosts zulässt. Wenn der Wert auf 1 festgelegt ist, lässtpmlogger
nur Verbindungen von einem lokalen Host zu.- PMLOGGER_MAXPENDING
Definiert die maximale Anzahl der anstehenden Verbindungen. Der Standardwert ist 5.
- PMLOGGER_INTERVAL
Legt das Standard-Stichprobenintervall fest, das
pmlogger
verwendet. Der Standardwert ist 60 s. Beachten Sie, dass dieser Wert über die Kommandozeilepmlogger
überschrieben werden kann.- PMLOGGER_CHECK_SKIP_LOGCONF
Wenn Sie diese Option auf ja festlegen, wird die Regeneration und Überprüfung der
pmlogger
-Konfiguration deaktiviert, wenn die Konfigurationpmlogger
vonpmlogconf
stammt. Standardmäßig werden die Konfigurationsdateien bei jedem Start vonpmlogger
neu generiert und auf Änderungen überprüft.
Beispiel:
PMLOGGER_LOCAL=1 PMLOGGER_MAXPENDING=5 PMLOGGER_INTERVAL=10 PMLOGGER_CHECK_SKIP_LOGCONF=yes
3.2.2 Die /etc/pcp/pmlogger/control.d/local
-Datei #
Die Datei /etc/pcp/pmlogger/control.d/local
speichert Angaben zum Host, welche Kennzahlen protokolliert werden sollen, die Häufigkeit der Protokollierung (Standard ist 24 Stunden) und pmlogger
-Optionen. Beispiel:
# === VARIABLE ASSIGNMENTS === # # DO NOT REMOVE OR EDIT THE FOLLOWING LINE $version=1.1 # Uncomment one of the lines below to enable/disable compression behaviour # that is different to the pmlogger_daily default. # Value is days before compressing archives, 0 is immediate compression, # "never" or "forever" suppresses compression. # #$PCP_COMPRESSAFTER=0 #$PCP_COMPRESSAFTER=3 #$PCP_COMPRESSAFTER=never # === LOGGER CONTROL SPECIFICATIONS === # #Host P? S? directory args # local primary logger LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -c config.default -v 100Mb
Wenn Sie pmlogger
in einem Container auf einem anderen Rechner ausführen als dem, auf dem pmcd
(ein Client) ausgeführt wird, ändern Sie die folgende Zeile, um auf den Client zu verweisen:
# local primary logger CLIENT_HOSTNAME y n PCP_ARCHIVE_DIR/CLIENT_HOSTNAME -r -T24h10m -c config.default -v 100Mb
Für den Hostnamen slemicro_1
sollte die Zeile zum Beispiel wie folgt aussehen:
# local primary logger slemicro_1 y n PCP_ARCHIVE_DIR/slemicro_1 -r -T24h10m -c config.default -v 100Mb
4 Verwalten von PCP-Kennzahlen #
4.1 Auflisten von PCP-Kennzahlen #
Innerhalb des Containers können Sie Kennzahlen mit dem Kommando pminfo
auflisten. Führen Sie zum Beispiel zum Auflisten aller verfügbaren Kennzahlen das folgende Kommando aus:
#
pminfo
Sie können eine Gruppe von zusammenhängenden Kennzahlen auflisten, indem Sie das Kennzahlen-Präfix angeben:
#
pminfo METRIC_PREFIX
Wenn Sie beispielsweise alle Kennzahlen für den Kernel auflisten möchten, verwenden Sie das Kommando:
#
pminfo disk
disk.dev.r_await
disk.dm.await
disk.dm.r_await
disk.md.await
disk.md.r_await
...
Sie können auch zusätzliche Zeichenketten angeben, um die Liste der Kennzahlen einzugrenzen, zum Beispiel:
#
piminfo disk.dev
disk.dev.read
disk.dev.write
disk.dev.total
disk.dev.blkread
disk.dev.blkwrite
disk.dev.blktotal
...
Wenn Sie einen Online-Hilfetext zu einer bestimmten Kennzahl erhalten möchten, verwenden Sie die Option -t
gefolgt von der Kennzahl, zum Beispiel:
#
pminfo -t kernel.cpu.util.user
kernel.cpu.util.user [percentage of user time across all CPUs, including guest CPU time]
Wenn Sie einen Beschreibungstext zu einer bestimmten Kennzahl anzeigen möchten, verwenden Sie die Option -T
gefolgt von der Kennzahl, zum Beispiel:
#
pminfo -T kernel.cpu.util.user
Help:
percentage of user time across all CPUs, including guest CPU time
4.2 Prüfen lokaler Kennzahlen #
Nachdem Sie den PCP-Container gestartet haben, können Sie überprüfen, ob die Kennzahlen ordnungsgemäß aufgezeichnet werden. Führen Sie dazu das folgende Kommando innerhalb des Containers aus:
#
pcp
Performance Co-Pilot configuration on localhost:
platform: Linux localhost 5.3.18-150300.59.68-default #1 SMP Wed May 4 11:29:09 UTC 2022 (ea30951) x86_64
hardware: 1 cpu, 1 disk, 1 node, 1726MB RAM
timezone: UTC
services: pmcd pmproxy
pmcd: Version 5.2.2-1, 9 agents, 4 clients
pmda: root pmcd proc pmproxy xfs linux mmv kvm jbd2
pmlogger: primary logger: /var/log/pcp/pmlogger/localhost/20220607.09.24
pmie: primary engine: /var/log/pcp/pmie/localhost/pmie.log
Prüfen Sie nun, ob die Protokolle an ein geeignetes Ziel geschrieben werden:
#
ls PATH_TO_PMLOGGER_LOGS
wobei PATH_TO_PMLOGGER_LOGS in diesem Fall /var/log/pcp/pmlogger/localhost/
sein sollte.
4.3 Aufzeichnen von Kennzahlen von entfernten Systemen #
Sie können Kollektor-Container bereitstellen, die Kennzahlen von anderen entfernten Systemen erfassen als denen, auf denen die pmlogger
-Container ausgeführt werden. Jedes entfernte Kollektorsystem benötigt den pmcd
-Daemon und einen festgelegten Satz pmda. Gehen Sie wie folgt vor, um mehrere Kollektoren mit einem zentralisierten Überwachungssystem bereitzustellen.
Führen Sie auf jedem System, von dem Sie Kennzahlen erfassen möchten (Clients), einen Container mit dem
pmcd
-Daemon aus:#
podman run -d \ --name pcp-pmcd \ --privileged \ --net host \ --systemd always \ -e PCP_SERVICES=pmcd \ -e HOST_MOUNT=/host \ -v /:/host:ro,rslave \ registry.suse.com/suse/pcp:latestErstellen Sie auf dem Überwachungssystem eine
pmlogger
-Konfigurationsdatei für jeden Clientcontrol.CLIENT
mit folgendem Inhalt:$version=1.1 CLIENT_HOSTNAME n n PCP_ARCHIVE_DIR/CLIENT -N -r -T24h10m -c config.default -v 100Mb
Denken Sie daran, dass der CLIENT_HOSTNAME im DNS auflösbar sein muss. Sie können stattdessen IP-Adressen oder vollständig qualifizierte Domänennamen (FQDN) verwenden.
Erstellen Sie auf dem Überwachungssystem für jeden Client ein Verzeichnis, in dem die aufgezeichneten Protokolle gespeichert werden:
#
mkdir /root/pcp-archives/CLIENTZum Beispiel für
slemicro_1
:#
mkdir /root/pcp-archives/slemicro_1Führen Sie auf dem Überwachungssystem für jeden Client einen Container mit
pmlogger
aus:#
podman run -d \ --name pcp-pmlogger-CLIENT \ --systemd always \ -e PCP_SERVICES=pmlogger \ -v /root/pcp-archives/CLIENT:/var/log/pcp/pmlogger:z \ -v $(pwd)/control.CLIENT:/etc/pcp/pmlogger/control.d/local:z \ registry.suse.com/suse/pcp:latestZum Beispiel für einen Client namens
slemicro_1
:#
podman run -d \ --name pcp-pmlogger-slemicro_1 \ --systemd always \ -e PCP_SERVICES=pmlogger \ -v /root/pcp-archives:/var/log/pcp/pmlogger:z \ -v $(pwd)/control.slemicro_1:/etc/pcp/pmlogger/control.d/local:z \ registry.suse.com/suse/pcp:latestAnmerkungDer zweite Bind-Mount verweist auf die in Schritt 2 erstellte Konfigurationsdatei und ersetzt die standardmäßige
pmlogger
-Konfiguration. Wenn Sie diesen Bind-Mount nicht erstellen, verwendetpmlogger
die Standarddatei/etc/pcp/pmlogger/control.d/local
und die Protokollierung von Clients schlägt fehl, da die Standardkonfiguration auf einen lokalen Host zeigt. Einzelheiten zur Konfigurationsdatei finden Sie unter Abschnitt 3.2.2, „Die/etc/pcp/pmlogger/control.d/local
-Datei“.Wenn Sie überprüfen möchten, ob die Protokollsammlung ordnungsgemäß funktioniert, führen Sie Folgendes aus:
#
ls -l pcp-archives/CLIENT/CLIENTBeispiel:
#
ls -l pcp-archives/slemicro_1/slemicro_1 total 1076 -rw-r--r--. 1 systemd-network systemd-network 876372 Jun 8 11:24 20220608.10.58.0 -rw-r--r--. 1 systemd-network systemd-network 312 Jun 8 11:22 20220608.10.58.index -rw-r--r--. 1 systemd-network systemd-network 184486 Jun 8 10:58 20220608.10.58.meta -rw-r--r--. 1 systemd-network systemd-network 246 Jun 8 10:58 Latest -rw-r--r--. 1 systemd-network systemd-network 24595 Jun 8 10:58 pmlogger.log
5 Rechtliche Hinweise #
Copyright © 2006–2025 SUSE LLC und Mitwirkende. Alle Rechte vorbehalten.
Es wird die Genehmigung erteilt, dieses Dokument unter den Bedingungen der GNU Free Documentation License, Version 1.2 oder (optional) Version 1.3 zu vervielfältigen, zu verbreiten und/oder zu verändern; die unveränderlichen Abschnitte hierbei sind der Urheberrechtshinweis und die Lizenzbedingungen. Eine Kopie dieser Lizenz (Version 1.2) finden Sie im Abschnitt „GNU Free Documentation License“.
Die SUSE Marken finden Sie im https://www.suse.com/company/legal/. Alle anderen Marken von Drittanbietern sind Besitz ihrer jeweiligen Eigentümer. Markensymbole (®, ™ usw.) kennzeichnen Marken von SUSE und ihren Tochtergesellschaften. Sternchen (*) kennzeichnen Marken von Drittanbietern.
Alle Informationen in diesem Buch wurden mit größter Sorgfalt zusammengestellt. Auch hierdurch kann jedoch keine hundertprozentige Richtigkeit gewährleistet werden. Weder SUSE LLC noch ihre Tochtergesellschaften noch die Autoren noch die Übersetzer können für mögliche Fehler und deren Folgen haftbar gemacht werden.