Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
documentation.suse.com / Analysieren von Leistungskennzahlen mit dem Analyse-Toolkit Performance Co-Pilot

Analysieren von Leistungskennzahlen mit dem Analyse-Toolkit Performance Co-Pilot

Veröffentlicht: 25.02.2025
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 Podman-Container, klicken Sie auf Neues Image abrufen und suchen Sie nach 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 von systemd 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 speichert pmlogger 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:

Weitere Optionen
-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. Der pmproxy-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:

  1. 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.service

    wobei CONTAINER_NAME der Name des PCP-Containers ist, den Sie bei der Ausführung des Containers aus dem Container-Image verwendet haben.

  2. 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. Wenn pmdaroot nicht aktiviert ist, erfordert pmcd 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 Sie pmdaroot aktiviert haben, da pmcd 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 ist readonly. Sie können den Modus auf readwrite 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ässt pmlogger 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 Kommandozeile pmlogger ü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 Konfiguration pmlogger von pmlogconf stammt. Standardmäßig werden die Konfigurationsdateien bei jedem Start von pmlogger 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
Anmerkung
Anmerkung: Die Standardeinstellungen verweisen auf den lokalen Host

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.

  1. 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:latest
  2. Erstellen Sie auf dem Überwachungssystem eine pmlogger-Konfigurationsdatei für jeden Client control.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.

  3. Erstellen Sie auf dem Überwachungssystem für jeden Client ein Verzeichnis, in dem die aufgezeichneten Protokolle gespeichert werden:

    # mkdir /root/pcp-archives/CLIENT

    Zum Beispiel für slemicro_1:

    # mkdir /root/pcp-archives/slemicro_1
  4. Fü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:latest

    Zum 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:latest
    Anmerkung
    Anmerkung

    Der 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, verwendet pmlogger 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“.

  5. Wenn Sie überprüfen möchten, ob die Protokollsammlung ordnungsgemäß funktioniert, führen Sie Folgendes aus:

    # ls -l pcp-archives/CLIENT/CLIENT

    Beispiel:

    # 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