Aktivieren und Konfigurieren der Ablaufverfolgung von „ PHP “

Standardmäßig ist die Ablaufverfolgung „ PHP “ in der Agent-Konfigurationsdatei aktiviert. Wenn die Nachverfolgung von „ PHP “ aktiviert ist, installiert der Sensor „ PHP “ automatisch den „ PHP Tracer“ (auch als „ InstanaPHP Tracing Extension“ bezeichnet) in Ihrer „ PHP “-Laufzeitumgebung.

Hinweis: Die Begriffe „ PHP -Tracer“ und „ PHP -Tracing-Erweiterung“ werden in diesem Dokument synonym verwendet.

Anforderungen

Der Sensor „ PHP “ ermöglicht die Ablaufverfolgung nur, wenn die erkannte Laufzeitumgebung „ PHP “ die Erweiterung „ JSON “ unterstützt. Wenn eine der folgenden Erweiterungen in einer PHP -Laufzeitumgebung erkannt wird, wird die Installation des PHP -Tracers automatisch deaktiviert:

  • SourceGuardian
  • New Relic
  • Dynatrace
  • Datadog

Wenn die Erweiterung „ ionCube -Loader“ in einer „ PHP “-Laufzeitumgebung erkannt wird, wird der „ PHP -Tracer“ installiert, wobei die „ PHP “-Userland-Ablaufverfolgung deaktiviert ist.

PHP Nachverfolgungsprozess

Wenn die Ablaufverfolgung „ PHP “ in der Agent-Konfigurationsdatei aktiviert ist, wird die Installation und Konfiguration der Ablaufverfolgungserweiterung „ PHP “ automatisch vom Sensor „ PHP “ durchgeführt, wie in den folgenden Schritten beschrieben:

  1. Der Sensor „ PHP “ lädt die Erweiterung „ PHP Tracing“ herunter und aktiviert sie in der INI-Konfiguration der Laufzeitumgebung „ PHP “ wie folgt:

    • Wenn die Laufzeitumgebung von „ PHP “ mit einem separaten Verzeichnis für zusätzliche INI-Dateien konfiguriert ist, legt der Sensor „ PHP “ eine zzz-instana.ini Datei mit den INI-Einstellungen der Erweiterung „ PHP Tracing“ in diesem Verzeichnis ab.
    • Andernfalls konfiguriert der Sensor „ PHP “ (Eingabe- und Ausgabeprotokollierung) den Tracer „ PHP “, indem er die INI-Einstellungen an die php.ini Hauptdatei anhängt.

    Nicht ändern, zzz-instana.ini da der Sensor „ PHP “ ihn bei jeder Installation basierend auf den Konfigurationen in der Datei configuration.yaml „ Instana agent“ überschreibt.

  2. Der Sensor „ PHP “ versucht dann, die Umgebung „ PHP “ ordnungsgemäß neu zu starten, um die Erweiterung „ PHP Tracing“ in den Speicher zu laden.

  3. Wenn die Laufzeitumgebung „ PHP “ erfolgreich neu gestartet wurde, beginnt die Erweiterung „ PHP -Tracing“ mit der Erfassung von Traces in der Laufzeitumgebung „ PHP “.

  4. Wenn der automatische Neustart aufgrund des SAPI-Typs der Laufzeitumgebung „ PHP “ nicht funktioniert, müssen Sie „ PHP “ manuell neu starten, um die Erweiterung „ PHP Tracing“ in den Speicher zu laden. Weitere Informationen zum automatischen Neustart der Laufzeitumgebung von „ PHP “ finden Sie unter Automatische Neustarts.

  5. Der Sensor „ PHP “ generiert sinnvolle Standardeinstellungen für die INI-Einstellungen der Erweiterung „ PHP -Tracing“. Sie können diese Einstellungen jedoch an sehr spezifische Anforderungen anpassen. Weitere Informationen finden Sie unter Erweiterte Anpassung.

Wenn bei der automatischen Installation der Erweiterung „ PHP -Tracing“ Probleme auftreten, können Sie diese auch manuell installieren. Weitere Informationen finden Sie unter Manuelles Installieren der Erweiterung „ PHP -Tracing “.

Erweiterte Anpassung

Der Sensor „ PHP “ überschreibt zzz-instana.inihäufig Daten, daher sollten Sie diese INI-Datei nicht ändern. Stattdessen können Sie Ihre eigene benutzerdefinierte INI-Datei hinzufügen, die die Standard-INI-Einstellungen von Instana in zzz-instana.ini. überschreibt. PHP lädt die INI-Dateien in alphanumerischer Reihenfolge, wobei die zuletzt vorkommende Instanz einer Einstellung der effektive Wert ist. Um sicherzustellen, dass die INI-Einstellungen in Ihrer benutzerdefinierten INI-Datei die INI-Einstellungen in zzz-instana.iniüberschreiben, benennen Sie Ihre benutzerdefinierte INI-Datei in zzzzz-instana-extras.ini (beachten Sie das Präfix zzzzz-), damit sie nach geladen zzz-instana.ini wird. In Container-Szenarien kann Ihre benutzerdefinierte INI-Datei dynamisch eingebunden oder Teil des Images gemacht werden.

Die folgenden Einstellungen sind für alle Versionen von „ PHP “ verfügbar:

  • instana.batch_threshold_us: Der Längen- und Abstandsschwellenwert, in dem das Batching von Spannen stattfindet. Der Standardwert ist 10000.
  • instana.backtrace_limit: Steuert die Tiefe der aufgezeichneten Aufruf-Stacks. Der Standardwert oder der Höchstwert beträgt 25 Einträge.
  • instana.disabled_instrumentation (veraltet): Gibt eine Bitmaske der zu deaktivierenden Instrumentierungen an. Der Standardwert ist 0 (keiner). Weitere Informationen finden Sie im Abschnitt „Deaktivieren der Instrumentierung “. Diese INI-Einstellung ist veraltet und wurde durch die Funktion zum Deaktivieren von Spans ersetzt, die eine bessere Konfigurierbarkeit der Deaktivierung von Instrumenten bietet.
  • instana.disable_userland_tracing: Deaktiviert alle Ablaufverfolgungen für nicht native PHP -Erweiterungen und PHP -Userland-Code wie Frameworks. Der Standardwert ist 0 (aus).
  • instana.enable_cli: Aktivieren oder deaktivieren Sie die Ablaufverfolgung für die CLI-SAPI. 1 = ein. 0 = aus. Der Standardwert ist 0 (aus).
  • instana.log_level: Die Protokollierungsstufe: 0 = aus, 1 = FEHLER, 2 = WARNUNG, 3 = INFO und 4 = DEBUG. Der Standardwert ist 0 (aus).
  • instana.segfault_error_logErfassen oder vermeiden Sie einen Backtrace zum Fehlerprotokoll von PHP bei Segfaults. Der Standardwert ist 0 (aus).
  • instana.span_chunk_sizeDie Anzahl der Spans, die im Speicher von „ PHP ” gespeichert bleiben sollen, bevor sie an den Agenten gesendet werden. Diese Zahl wirkt sich direkt auf die Chargierung aus. Beispielsweise deaktivieren Teile von einem effektiv das Batching.

Die folgenden Einstellungen gelten ausschließlich für „ PHP 5“:

  • instana.socketDie Adresse des Sockets „ TCP ” des Sensors „ Instana ” ( PHP ). Die Socketadresse wird während der Installation festgelegt und lautet standardmäßig tcp://127.0.0.1:16816.

Die folgenden Einstellungen gelten ausschließlich für „ PHP 7.0“ und spätere Versionen:

  • instana.buffer_hard_limitDie maximale Anzahl von Spannen, die im Puffer gespeichert werden sollen, wenn der Agent nicht mehr reagiert. Die Spannen werden beginnend mit der ältesten so lange entfernt, bis der Puffer innerhalb dieser Grenze liegt. Der Standardwert ist 1000.
  • instana.buffer_maximum_delay_msDas maximale Intervall zwischen aufeinanderfolgenden Freigaben eines Spannenpuffers. Der Standardwert ist 1000 ms.
  • instana.buffer_soft_limitDie maximale Anzahl von Spannen, die gepuffert werden sollen, bevor ein Spannpuffer gelöscht wird. Der Standardwert ist '500'.

Die folgenden Einstellungen gelten ausschließlich für „ PHP8.1 “ und höher:

  • instana.span_filter_config_file: Gibt den absoluten Pfad der Datei „ YAML “ an, die die Konfiguration zum Deaktivieren von Traces enthält. Der Sensor „ PHP “ aktualisiert diese Einstellung, um die Deaktivierung der Spanne über die configuration.yaml Agentendatei zu ermöglichen. Der Standardwert ist <System_Temp>/instana-php/instana_span_filter_config.yaml. Weitere Informationen zu dieser Einstellung finden Sie im Abschnitt „Zusätzliche Konfiguration “.

Die folgende Tabelle enthält eine vollständige Liste der Umgebungsvariablen für die Konfiguration der Erweiterung „ PHP “:

Umgebungsvariable Standardwert
INSTANA_AGENT_HOST 127.0.0.1
INSTANA_AGENT_PORT 42699
INSTANA_SERVICE_NAME Leer
INSTANA_DEBUG OFF
INSTANA_STACK_TRACE_LENGTH 25
INSTANA_EXTRA_HTTP_HEADERS KEINE
INSTANA_SECRETS password, key, secret
INSTANA_LOG_LEVEL KEINE

Das Vorhandensein dieser Umgebungsvariablen hat Vorrang vor den Konfigurationen in zzz-instana.ini. Weitere Informationen finden Sie unter Umgebungsvariablen.

Wenn Sie Hilfe bei diesen Einstellungen benötigen, wenden Sie sich bitte an den Support von IBM.

Erfassen von benutzerdefinierten „ HTTP “-Headern

PHP Tracer kann benutzerdefinierte „ HTTP “-Header in Eingangs- und Ausgangsspannen erfassen. Um diese Header zu erfassen, geben Sie die Liste der Header in einer der folgenden Konfigurationen an:

  • PHP INI-Einstellung:

    instana.extra_http_headers=HEADER1,HEADER2

  • Konfiguration der Umgebungsvariablen:

    INSTANA_EXTRA_HTTP_HEADERS=HEADER1;HEADER2

Alternativ können Sie die „ HTTP “-Header jeder verfolgten Anfrage oder Antwort erfassen, indem Sie die Header-Liste in der configuration.yaml Agentendatei festlegen. Weitere Informationen finden Sie unter Erfassen benutzerdefinierter „ HTTP “-Header

Der Tracer „ PHP “ behält Leerzeichen sowohl in Header-Schlüsseln als auch in Werten bei.

Spannen deaktivieren

Der Tracer „ PHP “ unterstützt das Deaktivieren von Traces oder Spans für bestimmte Span-Typen (Frameworks, Bibliotheken und Instrumentierungen) oder ganze Gruppen von Bibliotheken (Span-Kategorie). Mit dieser Funktion zum Deaktivieren von Spannen können Sie die Ablaufverfolgung an die Anforderungen Ihrer Anwendung anpassen, wodurch die Netzwerkkosten gesenkt werden, da nur die für Ihre Anwendung wesentlichen Ablaufverfolgungen gemeldet werden.

Verwenden Sie eine der folgenden Methoden, um die Konfiguration zum Deaktivieren der Ablaufverfolgung bereitzustellen:

Hinweis: Wenn Sie diese Funktion zum ersten Mal aktivieren oder von einer leeren „ YAML “-Konfiguration aus, müssen Sie nach der Aktualisierung der Konfiguration die „ PHP “-Laufzeitumgebung neu starten. Nach dem Neustart werden alle zukünftigen Änderungen an der Konfiguration ohne weiteren Neustart übernommen.

Für die Konfiguration der Span-Deaktivierung in „ Apache “ und IIS-Servern sind zusätzliche Schritte erforderlich. Weitere Informationen finden Sie unter „Zusätzliche Konfiguration “. Weitere Informationen dazu, wie „ Instana “ die Deaktivierung von Spans priorisiert, finden Sie unter Konfigurationspriorität für die Deaktivierung von Spans.

Konfiguration über Umgebungsvariablen

Um die Ablaufverfolgung über die Umgebungsvariable zu deaktivieren, setzen Sie die Umgebungsvariable INSTANA_CONFIG_PATH auf den absoluten Pfad der Datei „ YAML “ mit Ihrer Konfiguration.

Um beispielsweise die Ablaufverfolgung für alle Datenbankaufrufe (außer „ MongoDB “) und alle Protokollierungsframeworks zu deaktivieren, kopieren Sie den folgenden Code in eine separate Datei „ YAML “:

tracing:
  disable:
    - databases: true
    - mongodb: false
    - logging: true
 

Setzen Sie die Umgebungsvariable INSTANA_CONFIG_PATH auf den absoluten Pfad der Datei „ YAML “, in der der Inhalt wie folgt abgelegt ist:

INSTANA_CONFIG_PATH=<your YAML file>
 
Hinweis: Da der Inhalt der Konfigurationsdatei überwacht wird, um Änderungen in Echtzeit anzuwenden, legen Sie die Datei in einem speziellen Verzeichnis ab, um unnötige Aktivitäten von Dateiüberwachungs-APIs zu reduzieren, die zu einem hohen CPU-Verbrauch durch den Prozess „ PHP “ führen könnten.

Konfiguration über die Konfiguration des Agenten „ Instana “

Um die Ablaufverfolgung über die Konfiguration des Instana -Agenten zu deaktivieren, deaktivieren Sie die Ablaufverfolgung im com.instana.tracing.disable Abschnitt der configuration.yaml Agentendatei.

Um die Ablaufverfolgung für alle Datenbankaufrufe (außer „ Redis “) und alle Protokollierungsframeworks zu deaktivieren, aktualisieren Sie den com.instana.tracing Abschnitt in Ihrer configuration.yaml Agentendatei wie im folgenden Beispiel gezeigt:

com.instana.tracing:
  disable:
    - databases: true
    - redis: false
    - logging: true
 

Weitere Informationen zum Anpassen der Konfiguration finden Sie unter Deaktivieren der Ablaufverfolgung.

Durch Deaktivieren der Ablaufverfolgung für eine Kategorie wird die Spannen-Generierung für alle Bibliotheken unter dieser Kategorie deaktiviert. Siehe die folgende Liste der von „ PHP Tracer” unterstützten Kategorien:

Konfigurationspriorität für die Deaktivierung von Spans

Span-Deaktivierungsregeln werden in der folgenden Reihenfolge angewendet, aufgeführt von der höchsten zur niedrigsten Priorität:

  1. Deaktivieren Sie Regeln aus der Konfigurationsdatei, die über die INSTANA_CONFIG_PATH Umgebungsvariable übergeben wird.
  2. Span-Deaktivierung in der instana.disabled_instrumentation INI-Einstellung konfiguriert.
  3. Regeln zum Deaktivieren von Spannen aus der configuration.yaml Agentendatei.

Diese Priorität wird auf Funktionsebene durchgesetzt. Wenn eine „ PHP “-Laufzeitumgebung mehrere Konfigurationen in einer Funktion erkennt, wendet sie die Regeln zum Deaktivieren von Spannen aus der Konfiguration mit der höchsten Priorität an. Wenn beispielsweise eine PHP -Laufzeitumgebung die folgenden Regeln zum Deaktivieren von Spans über die INSTANA_CONFIG_PATH Umgebungsvariable festgelegt hat:

com.instana.tracing:
  disable:
    - logging: true
    - databases: true
    - redis: false
 

Und dieselbe Laufzeitumgebung hat die folgende INI-Einstellung:

instana.disabled_instrumentation=24 ; disables redis (16) and curl (8) instrumentations
 

Mit dieser Beispielkonfiguration funktioniert der Tracer „ PHP “ wie folgt:

  • Die Ablaufverfolgung für alle Protokollierungsbibliotheken ist deaktiviert.
  • Die Ablaufverfolgung für alle Datenbanken ist deaktiviert, mit Ausnahme von Redis.

Die instana.disabled_instrumentation ini-Einstellung wird ignoriert, da die INSTANA_CONFIG_PATH Umgebungsvariable Vorrang hat. Daher sind alle Instrumentierungen aktiviert, die nicht über die durch die INSTANA_CONFIG_PATH Umgebungsvariable angegebene Konfigurationsdatei deaktiviert sind.

Wenn Regeln zum Deaktivieren von Spannen sowohl über die INSTANA_CONFIG_PATH Umgebungsvariable als auch über die configuration.yaml Agentendatei festgelegt werden, werden die Regeln aus der configuration.yaml Datei ignoriert.

Zusätzliche Konfiguration

Der Sensor „ PHP ” erkennt alle Änderungen in der configuration.yaml Agentendatei und erstellt eine Kopie des Abschnitts com.instana.tracing.disable in einer separaten Datei unter <System Temp>/instana-php/instana_span_filer_config.yaml. Der absolute Pfad der generierten Datei wird in der instana.span_filter_config_file INI-Einstellung so festgelegt, dass PHP Tracer alle nachfolgenden Änderungen an der configuration.yaml Datei erkennen und anwenden kann, ohne dass die PHP -Laufzeit neu gestartet werden muss. Daher muss die Laufzeitumgebung von „ PHP “ Lesezugriff auf den temporären Ordner des Systems haben, wenn Sie Regeln zum Deaktivieren von Spans über die configuration.yaml Agentendatei konfigurieren.

Die folgenden Unterabschnitte beschreiben die zusätzlichen Schritte, die in einigen Umgebungen erforderlich sind, damit die Laufzeitumgebung von „ PHP “ ausreichenden Zugriff auf den temporären Ordner des Systems hat.

Apache-Server

Apache Server unter einem Betriebssystem auf Basis von Linux können so konfiguriert werden, dass sie einen isolierten temporären Ordner verwenden, anstatt den temporären Ordner des Systems zu nutzen. Damit der Tracer „ PHP “ auf die Konfigurationsdatei im temporären Ordner des Systems zugreifen kann, stellen Sie sicher, dass auf false gesetzt PrivateTmp ist, indem Sie die folgenden Schritte ausführen:

  1. Bearbeiten Sie die Systemd unit Datei, indem Sie den folgenden Befehl ausführen:

    sudo systemctl edit apache2.service
     
  2. Fügen Sie die PrivateTmp Eigenschaft im Abschnitt „Service“ hinzu oder aktualisieren Sie sie:

    [Service]
    PrivateTmp=false
     
  3. Starten Sie den Server „ Apache “ neu, um die Änderungen zu übernehmen.

Um eine Aktualisierung PrivateTmp zu vermeiden, können Sie die Regeln zum Deaktivieren des Bereichs über eine Umgebungsvariable konfigurieren.

IIS-Server

IIS-Arbeitsprozesse haben manchmal keinen Zugriff auf den temporären Ordner „ Windows “. Dieser unzureichende Zugriff auf den temporären Ordner ist darauf zurückzuführen, dass die Anwendungs-Pool-Identität, die zum Ausführen der Workerprozesse verwendet wird, nicht über ausreichende Lese- oder Schreibberechtigungen für den temporären Ordner verfügt. Um dieses Zugriffsproblem zu beheben, führen Sie die folgenden Schritte aus:

  1. Bestätigen Sie die Identität Ihres Anwendungspools, indem Sie den folgenden Befehl in Ihrem Terminal „ PowerShell “ ausführen:

    & $env:windir\system32\inetsrv\appcmd.exe list apppool <your AppPool> /text:processModel.identityType
     
  2. Wenn die Identität nicht ApplicationPoolIdentityübereinstimmt, führen Sie den folgenden Befehl aus, um die Identität zu aktualisieren:

    & $env:windir\system32\inetsrv\appcmd.exe set AppPool <your AppPool> -processModel.identityType:ApplicationPoolIdentity
     
  3. Starten Sie Ihren Anwendungspool neu, um die Änderungen zu übernehmen:

    & $env:windir\system32\inetsrv\appcmd.exe recycle apppool <your AppPool>
     

    Der IIS-Server erkennt den Anwendungspool, der mit ApplicationPoolIdentity der Identität ausgeführt wird, und erstellt einen virtuellen Benutzer mit dem Namen Ihres Anwendungspools.

  4. Um der Laufzeitumgebung von „ PHP “, d. h. den IIS-Arbeitsprozessen, Lesezugriff auf das <SYSTEM_TEMP> Verzeichnis zu gewähren, verwenden Sie den folgenden Befehl:

    
    icacls "<SYSTEM_TEMP>" /grant "IIS APPPOOL\<your AppPool>:(OI)(CI)R" /T /C
     

Instrumentierung deaktivieren

Um die Instrumentierung für eine bestimmte Bibliothek oder eine Reihe von Bibliotheken in den INI-Einstellungen „ PHP “ zu deaktivieren, verwenden Sie die instana.disabled_instrumentation Einstellung. Es nimmt den Bitmaskenwert der Bibliotheken, für die Sie die Ablaufverfolgung deaktivieren möchten. Die Bitmaskenwerte der Bibliotheken finden Sie in der Instrumentation flag Spalte im Abschnitt „Instrumentierte Bibliotheken und Frameworks “.

Um die Instrumentierung für mehrere Bibliotheken zu deaktivieren, fügen Sie die entsprechenden Instrumentation flag Werte hinzu. Um beispielsweise die Ablaufverfolgung für Aufrufe von „ MongoDB “ (mit Instrumentierungsflag: 32 ) und „ Redis “ (mit Instrumentierungsflag: 16) zu deaktivieren, fügen Sie die folgende Zeile in Ihre INI-Einstellungsdatei ein:

instana.disabled_instrumentation=48 ; 32 + 16 = 48
 

Verwenden Sie die Funktion „Spans deaktivieren“ anstelle der instana.disabled_instrumentation Einstellung, um die Generierung von Spans in Ihrem Tracer „ PHP “ besser zu steuern.

Automatische Neustarts

Da „ PHP Tracer” eine Erweiterung von „ PHP ” ist, die in die Laufzeitumgebung von „ PHP ” geladen wird, erfordert das Aktivieren und Deaktivieren der Ablaufverfolgung von „ PHP ” oder das Ändern der installierten Version der Ablaufverfolgungserweiterung „ PHP ” einen Neustart der Laufzeitumgebung von „ PHP ”, damit die Änderungen wirksam werden.

Der Sensor „ PHP ” kann die Laufzeiten „ Apache ” und „ PHP -FPM” automatisch und reibungslos neu starten. Für die folgenden Laufzeitszenarien von PHP ist jedoch ein manueller Neustart erforderlich:

  • PHP Laufzeiten mit CGI SAPI: Sie müssen die Laufzeit von PHP manuell neu starten.
  • PHP Laufzeiten mit vorab gegabelten Worker-Prozessen: Sie müssen den Master-Prozess „ PHP “ manuell neu starten.

Sie können die in den vorstehenden Fällen erforderlichen manuellen Neustarts automatisieren und auch die Art und Weise ändern, wie der Sensor „ PHP “ versucht, Ihre „ PHP “-Laufzeit neu zu starten, indem Sie ein Benachrichtigungsskript für tracing.notificationScript im Abschnitt com.instana.plugin.php der configuration.yaml Agentendatei festlegen.

Diese Einstellung verwendet den absoluten Pfad zu einem ausführbaren Shell-Skript ( Linux ) oder einem PowerShell -Skript ( Windows ). Wenn ein Neustart der Laufzeitumgebung von „ PHP “ erforderlich ist, führt der Sensor „ PHP “ das in definierte tracing.notificationScript Skript aus, anstatt seine Standard-Neustartbefehle zu verwenden.

Überlegungen zum Entwurf des Benachrichtigungsskripts

Das Benachrichtigungsskript wird einmal pro Laufzeit von „ PHP “ ausgeführt. Das bedeutet, dass das Skript möglicherweise nicht für alle Prozesse ausgelöst wird, die dieselbe ausführbare Datei von „ PHP “ ausführen. Um die Erweiterung „ PHP Tracing“ in den Speicher zu laden, müssen Sie sicherstellen, dass Ihr Skript alle Prozesse neu startet, die von dieser ausführbaren Datei „ PHP “ ausgeführt werden.

Wenn dieses Skript konfiguriert und erfolgreich ausgeführt wird, überschreibt es den Standardmechanismus für automatische Neustarts. Im Gegensatz zum Standardmechanismus wird das Skript für jede SAPI ausgeführt, sodass es zur Automatisierung von Neustarts für CGI-Umgebungen ( PHP ) verwendet werden kann. Wenn Sie automatische Neustarts vollständig deaktivieren möchten, konfigurieren Sie ein leeres Skript.

Der Sensor „ PHP “ legt die folgenden Umgebungsvariablen für die Skriptausführung fest:

INSTANA_EXT_VERSION_OLD = the version of the tracing extension currently in memory
INSTANA_EXT_VERSION_NEW = the version of the tracing extension after a restart
INSTANA_PID_HOST = the PID of the process on the host, e.g. your Apache, PHP-FPM or PHP-CGI
INSTANA_PID_CONTAINER = the PID the host process has in a container (if applicable)
INSTANA_CONTAINER = the ID/name of the container the process is running in (if applicable)
 

Das folgende Beispiel zeigt ein Skript, das Erweiterungsänderungen in einer Datei protokolliert und Apache neu startet:

#!/bin/bash
echo "Found new tracing extension." >> php_update.log;
echo "INSTANA_EXT_VERSION_OLD=$INSTANA_EXT_VERSION_OLD" >> php_update.log;
echo "INSTANA_EXT_VERSION_NEW=$INSTANA_EXT_VERSION_NEW" >> php_update.log;
echo "INSTANA_PID_HOST=$INSTANA_PID_HOST" >> php_update.log;
echo "INSTANA_PID_CONTAINER=$INSTANA_PID_CONTAINER" >> php_update.log;
echo "INSTANA_CONTAINER=$INSTANA_CONTAINER" >> php_update.log;
echo "restarting apache" >> php_update.log;
apachectl -k graceful >> php_update.log;
 

Wenn Ihr „ Apache “ in einem Container ausgeführt wird, ersetzen Sie die letzte Zeile im Beispielskript durch die folgende Zeile:

docker exec $INSTANA_CONTAINER apachectl -k graceful;
 

Für PHP -FPM können Sie einen Befehl „ SIGUSR2 “ senden, um es wie im folgenden Beispiel gezeigt ordnungsgemäß neu zu starten:

docker exec $INSTANA_CONTAINER kill -USR2 $INSTANA_PID_CONTAINER;
 

Ein eleganter Neustart lädt die Erweiterung „ PHP “ in den Speicher, ohne den Master-Prozess neu zu starten. Diese Ladung funktioniert also auch, wenn der Prozess als PID 1 innerhalb des Containers läuft. Wenn Sie den Neustart nicht verwenden können oder möchten, können Sie auch einen Snapshot der laufenden Containerinstanz erstellen, diese stoppen und ganz einfach eine neue Instanz öffnen:

#!/bin/bash
IMAGE_HASH=$(docker inspect --format='{{.Config.Image}}' $INSTANA_CONTAINER)
IMAGE_NAME=$(docker images | grep $IMAGE_HASH | awk '{print $1}')
IMAGE_TAG="instana-php-$INSTANA_EXT_VERSION_NEW"
docker commit $INSTANA_CONTAINER $IMAGE_NAME:$IMAGE_TAG &&
docker stop $INSTANA_CONTAINER &&
docker run -d --rm $IMAGE_NAME:$IMAGE_TAG
 

Diese Aktion verwendet die an das Skript übergebene Container-ID, um den Namen des Container-Images zu ermitteln. Anschließend wird der aktuell ausgeführte Container in ein neues Image übernommen, das mit der neuen Versionsnummer der Erweiterung „ PHP “ gekennzeichnet ist. Anschließend wird der ursprüngliche Container angehalten und ein Container aus dem neu getaggten Image gestartet. Diese Aktion löst zwar erneut die Installationsroutine im Sensor „ PHP “ aus, jedoch nicht erneut das Benachrichtigungsskript, da die Erweiterung bereits installiert ist.

Diese Beispiele gehen davon aus, dass Sie „ Docker “ als Container-Engine verwenden. Da das ausgelöste Shell-Skript jedoch vollständig unter Ihrer Kontrolle steht, können Sie jede beliebige Logik einfügen, die Sie benötigen, damit automatische Neustarts für Ihre Konfiguration funktionieren.

PHP -Verfolgung deaktivieren

Um die Ablaufverfolgung von „ PHP “ zu deaktivieren, führen Sie die folgenden Schritte aus:

  1. Setzen Sie im com.instana.plugin.php Abschnitt tracing.enabled der configuration.yaml Agentendatei auf false. Wenn die configuration.yaml Agentendatei den com.instana.plugin.php Abschnitt nicht enthält, müssen Sie ihn wie folgt hinzufügen:

    com.instana.plugin.php:
      tracing:
        enabled: false
     
    Hinweis: Das Kommentieren des com.instana.plugin.php Abschnitts deaktiviert nicht die PHP -Ablaufverfolgung, da diese standardmäßig aktiviert ist.

    Der Sensor „ PHP ” entfernt automatisch die INI-Einstellungen der Tracing-Erweiterung „ PHP ” aus der INI-Konfiguration „ PHP ” und versucht, die Laufzeitumgebung „ PHP ” ordnungsgemäß neu zu starten, um die Tracing-Erweiterung „ PHP ” aus dem Speicher zu entfernen. Nachdem die Laufzeitumgebung „ PHP “ erfolgreich neu gestartet wurde, ist die Ablaufverfolgung „ PHP “ vollständig deaktiviert.

  2. Wenn der Sensor „ PHP “ die Laufzeit „ PHP “ nicht automatisch neu starten kann, starten Sie die Laufzeit „ PHP “ manuell neu, um die Ablaufverfolgung „ PHP “ vollständig zu deaktivieren. Die Fähigkeit des Sensors „ PHP “ (Ende der Lebensdauer), die Laufzeit von „ PHP “ automatisch neu zu starten, hängt vom SAPI-Typ ab. Sie können dieses Verhalten steuern und den Neustart der Laufzeitumgebung von „ PHP “ automatisieren, der erforderlich ist, um den Tracer „ PHP “ aus dem Speicher zu entfernen. Weitere Informationen finden Sie unter Automatischer Neustart.

    Hinweis: Sie müssen den Abschnitt „Automatischer Neustart“ lesen und sorgfältig prüfen, ob Ihre „ PHP “-Laufzeitumgebung manuell neu gestartet werden muss, um die „ PHP “-Tracing-Erweiterung aus dem Speicher zu entfernen.
  3. Stellen Sie sicher, dass die Erweiterung „ PHP -Tracing” in Ihrer „ PHP ”-Laufzeitumgebung nicht mehr aktiviert ist, indem Sie überprüfen, ob nicht in der Liste der aktivierten Erweiterungen in Ihrer instana „ PHP ”-INI-Konfiguration aufgeführt ist. Sie können die Liste der aktivierten Erweiterungen von PHP abrufen, indem Sie die von Ihrer PHP -Laufzeitumgebung verwendete Binärdatei PHP mit der Option -m. ausführen. Das folgende Beispiel zeigt, wie Sie die aktivierten Erweiterungen von PHP mithilfe der php-fpm Binärdatei auflisten können:

    $> php-fpm -m
    [PHP Modules]
    curl
    json
    PDO
    sqlite3
    Zend OPcache
    zlib
    
    [Zend Modules]
    Zend OPcache
     
    Hinweis: Um zu überprüfen, ob die Erweiterung „ PHP Tracing” in „ Apache ” mit der mod_php Laufzeitumgebung deaktiviert ist, erstellen Sie ein Skript „ PHP ” mit dem Inhalt <?php phpinfo(); im Dokumentenstammverzeichnis des Webservers, damit „ Apache ” das Skript bereitstellt. Anschließend können Sie die URL zu diesem Skript in Ihrem Browser öffnen und überprüfen, ob nicht in der Liste der aktivierten instana Erweiterungen PHP aufgeführt ist.

    Wenn während dieses Vorgangs Fehler auftreten, können Sie die Ablaufverfolgung „ PHP “ manuell deaktivieren und die Erweiterung „ PHP -Ablaufverfolgung“ deinstallieren. Weitere Informationen finden Sie unter Manuelles Deaktivieren der Ablaufverfolgung von „ PHP “.

Durch die Deinstallation des Instana -Agenten wird die Erweiterung „ PHP Tracing“ nicht automatisch aus den bereits instrumentierten PHP -Laufzeitumgebungen entfernt. Bevor Sie den Instana -Agenten deinstallieren, deaktivieren Sie die PHP -Ablaufverfolgung, um die PHP -Ablaufverfolgungserweiterung aus allen PHP -Laufzeiten im Host zu deinstallieren. Weitere Informationen finden Sie unter Deinstallieren des Instana -Agenten.

Deaktivieren der Installation der Erweiterung „ PHP -Tracing“

Um die automatische Installation der Erweiterung „ PHP Tracing“ in neu erkannten „ PHP “-Laufzeitumgebungen zu deaktivieren, setzen Sie tracing.installExtension auf false im Abschnitt com.instana.plugin.php der configuration.yaml Agentendatei:

com.instana.plugin.php:
  tracing:
    enabled: true
    installExtension: false
 
Hinweis: Diese Konfiguration deaktiviert nicht die Erweiterung „ InstanaPHP “ in „ PHP “-Laufzeitumgebungen, in denen sie bereits installiert ist.

Fehlerbehebung

Fehlen von „ PHP “-Spuren in der Benutzeroberfläche von „ Instana “

Wichtig: Stellen Sie sicher, dass Sie eine unterstützte Version von PHP verwenden. Weitere Informationen finden Sie unter Unterstützte Versionen von PHP.

Wenn Sie Plesk verwenden, müssen Sie. plesk bin php_handler --rereadausführen.

Wenn in der Benutzeroberfläche von „ Instana “ keine Spuren für „ PHP “-Anwendungen angezeigt werden, führen Sie die folgenden Schritte aus:

  1. Überprüfen Sie die folgenden Voraussetzungen:

  2. Laden Sie die Erweiterung „ PHP -Tracing“ neu, indem Sie den folgenden reload Befehl für den Dienst ausführen, auf dem „ PHP “-Anwendungen ausgeführt werden:

    • Für „ Apache “:

      systemctl reload apache2
       
    • Für PHP -FPM:

      systemctl reload php<version>-fpm
       

      Ersetzen Sie <version> im Befehl zum Neuladen durch die tatsächlich auf dem System installierte Version.

Wenn Sie immer noch keine Spuren in der Benutzeroberfläche von „ Instana “ sehen und Ihr Betriebssystem standardmäßig SELinux enthält oder es aus Sicherheitsgründen zur Umgebung hinzufügt, könnte SELinux für das Problem verantwortlich sein.

Die Erweiterung „ PHP ” Tracer kommuniziert mit dem Daemon „ PHP ” über den Socket „ <socket path>UnixTCP ” und mit dem Agenten „ Instana ” über den IP-Port „ TCP /IP 42699”. Wenn SELinux auf den Durchsetzungsmodus eingestellt ist, verhindert es die Kommunikation zwischen der Erweiterung „ PHP “ und dem Daemon, es sei denn, SELinux ist so konfiguriert, dass es dies zulässt.

Um zu überprüfen, ob SELinux für das Problem verantwortlich ist, überprüfen Sie /var/log/audit/audit.log , ob für den Daemon „ PHP “ stillschweigende Ablehnungen protokolliert wurden. Alternativ können Sie einen Rauch-Test durchführen, indem Sie die folgenden Schritte ausführen:

  1. Deaktivieren Sie SELinux vorübergehend.
  2. Starten Sie den Daemon „ PHP “ neu.

Wenn SELinux als Ursache für das Problem identifiziert wurde, können Sie es mit einer der folgenden Optionen beheben:

  • Konfigurieren Sie SELinux so, dass die Kommunikation zwischen dem Tracer und dem Dienst „ PHP “ möglich ist: Mit SELinux können Sie Ihre eigenen Sicherheitsrichtlinien befolgen, um eine benutzerdefinierte Richtlinie zu konfigurieren, die die Kommunikation ermöglicht. Weitere Informationen zum Erstellen und Ändern von SELinux-Richtlinien finden Sie unter den folgenden Links:

  • SELinux in den permissiven Modus versetzen: In diesem Modus können Ihre Dienste ohne Einschränkungen ausgeführt werden. Sie können die Standardeinstellung wiederherstellen, indem Sie den Server neu starten. Um SELinux in den permissiven Modus zu versetzen, siehe SELinux-Permissive-Modus.

  • SELinux deaktivieren: Instana empfiehlt Ihnen nicht ausdrücklich, Sicherheitssoftware zu deaktivieren. Ein richtiger und sicherer Ansatz ist die Erstellung einer SELinux-Richtlinie. Wenn Sie sich jedoch entscheiden, SELinux zu deaktivieren, lesen Sie bitte den Abschnitt „ Linux deaktivieren “.

Protokollierung wird aktiviert

Standardmäßig ist die Protokollierung deaktiviert. Um es zu aktivieren, befolgen Sie die folgenden Schritte.

  • Aktivieren Sie die Protokollierung mithilfe von Umgebungsvariablen.
  1. Um die Protokollierungsstufe auf Debug zu setzen, setzen Sie INSTANA_DEBUG auf TRUE oder INSTANA_LOG_LEVEL=4
  • Aktivieren Sie die Protokollierung mithilfe der INI-Datei.
  1. Suchen Sie eine Datei namens zzz-instana.ini im Scan-Verzeichnis Ihrer PHP -Installation. Beispielsweise gibt das Ausführen von php --ini | grep zzz-instana.ini oder seinen Standort php-fpm<version> -i | grep zzz-instana.ini preis.

  2. Fügen Sie die Zeile instana.log_level=4 zu hinzu zzz-instana.ini.

  3. Wenn Sie die Laufzeitumgebung „ PHP “ Ihrer Wahl ausführen, stellen Sie sicher, dass in der Ausgabe einige Protokollierungen vorhanden sind und dass die Erweiterung aktiviert ist. Beispielsweise können Sie oder php --ri instana ausführen php-fpm<version> -i | grep instana , um dies zu überprüfen.

    Beispiel:

    [instana.INFO] Initializing, logging at level 4
     
  4. Laden Sie die Tracing-Erweiterung „ PHP “ wie hier beschrieben neu. Wenn Sie diesen Schritt überspringen, wird letztendlich keine Protokollierung durchgeführt.

Protokolle werden in die Laufzeitumgebung „ PHP “ geleitet, in der die Ablaufverfolgungserweiterung „ PHP “ installiert ist. Aus diesem Grund hängt seine genaue Position stark von seiner Konfiguration ab. Übliche Speicherorte sind /var/log/apache2/error.log für „ Apache2 “ und /var/log/php<version>-fpm.log für „ PHP -FPM“.

Manuelle Installation der Erweiterung „ PHP -Tracing“

Um die Erweiterung „ PHP -Tracing“ manuell zu installieren, führen Sie die folgenden Schritte aus:

  1. Laden Sie die Erweiterung „ InstanaPHP Tracing“ wie folgt herunter:

    1. Laden Sie das Shell-Skript aus dem folgenden Repository herunter:

      https://artifact-public.instana.io/artifactory/shared/com/instana/php/instana-ext-download-script/php-instana-ext-download-script.sh
       
    2. Führen Sie das Shell-Skript aus, um die für Ihre Umgebung geeignete Erweiterung herunterzuladen. Der folgende Befehl zeigt die verfügbaren Optionen an:

      ./php-instana-ext-download-script.sh -a <aarch64/x86_64> -l <musl/glibc> -p <PHP version> -t <NTS/ZTS> -d <serverless/native> -s <OpenSSL version> -v <Instana extension version>
       
      • Für die Version „ PHP “ geben Sie die Haupt- und Nebenversionsnummern an. Um beispielsweise die Erweiterung „ Instana “ für PHP 8.4.12 herunterzuladen, führen Sie das Shell-Skript mit dem Flag aus -p 8.4.

      • Für die Version „ OpenSSL “ verwenden Sie die Option -s ssl1 zum Herunterladen der Erweiterung, die „ OpenSSL 1.1 “ unterstützt, oder verwenden Sie -s ssl3 zum Herunterladen der Erweiterung, die „ OpenSSL “ unterstützt. 3.x.

      • Für die Erweiterung „ Instana “ lautet der Standardwert, wodurch die neueste releaseverfügbare Version heruntergeladen wird. Verwenden Sie -v das Flag, um das Artefakt für eine bestimmte Version herunterzuladen. Führen Sie beispielsweise das Skript mit aus -v 4.7.0 , um die Erweiterung mit der Release-Version 4.7.0 herunterzuladen.

      • Um alle für das Skript verfügbaren Optionen anzuzeigen, führen Sie den folgenden Befehl aus:

        ./php-instana-ext-download-script.sh
         
  2. Installieren Sie die Erweiterung wie folgt:

    1. Verschieben Sie die heruntergeladene .so Datei in das Verzeichnis „ PHP “ der CLI-Erweiterung.

    2. Erstellen Sie eine INI-Datei wie im folgenden Beispiel gezeigt und speichern Sie sie im zusätzlichen INI-Verzeichnis zzz-instana.ini der CLI „ PHP “. Ersetzen Sie <hostIP> durch die IP-Adresse des Instana -Agentenhosts, damit der Agent von der PHP -Umgebung aus erreichbar ist.

      ; this file was automatically generated by Instana
      ;
      ; any changes made to this file are expected to be overwritten when
      ; a new version of the Instana PHP Tracer extension is installed
      [instana]
      extension=<php cli extension dir path where extension.so file is placed>
      instana.socket=<hostIP>:16816
      instana.agent_endpoint=http://<hostIP>:42699
      instana.use_agent_endpoint=1
      instana.auto_profile_socket=tcp://<hostIP>:42699
      instana.enable_auto_profile=0
      instana.secrets_matcher=contains-ignore-case
      instana.secrets_list="key,pass,secret"
      instana.extra_http_headers=
      instana.pid_in_root_namespace=<pid of PHP process in hostnamespace>
      instana.enable_cli=1
       

Manuelles Deaktivieren der Nachverfolgung von „ PHP “

Wenn Sie die unter „Deaktivieren von ‚ PHP ‘“ beschriebenen Schritte ausführen, wird die Verfolgung von „ PHP “ vollständig deaktiviert, einschließlich der Entfernung der Erweiterung „ PHP Tracing“ aus Ihrer „ PHP “-Laufzeitumgebung.

Wenn während dieses Vorgangs Fehler auftreten und Sie die Ablaufverfolgung „ PHP “ manuell deaktivieren und die Erweiterung „ PHP -Ablaufverfolgung“ deinstallieren möchten, führen Sie die folgenden Schritte aus:

  1. Stellen Sie sicher, dass die Ablaufverfolgung „ PHP “ in der configuration.yaml Agentendatei wie folgt deaktiviert ist:

    com.instana.plugin.php:
      tracing:
        enabled: false
     

    Diese Konfiguration verhindert, dass der Sensor „ PHP “ die Erweiterung „ PHP -Tracing“ erneut installiert.

  2. Deaktivieren Sie die Erweiterung „ PHP Tracing“ in Ihrer INI-Konfiguration „ PHP “. Siehe Deaktivieren der Erweiterung „ PHP -Tracing “.

  3. Entfernen Sie die Erweiterung „ PHP Tracing“ von Ihrem System. Siehe Entfernen der Datei „ PHP Tracing Extension “.

PHP-Tracing-Erweiterung inaktivieren

Als der Sensor „ PHP “ die Erweiterung installiert hat, hat er diese auch für Ihre Installation „ PHP “ aktiviert. Durch das Aktivieren der Erweiterung wird der Sensor „ PHP “ entweder die zzz-instana.ini Datei in Ihrem Additional Ini files Ordner abgelegt oder direkt in Ihrem aktiviert php.ini.

Um herauszufinden, wo sie aktiviert wurde, führen Sie die php-Binärdatei aus, für die Sie das Tracing aktiviert haben. Das folgende Beispiel veranschaulicht dies anhand einer Binärdatei „ PHP -FPM“:

$> php-fpm7.0 -i | egrep "^(Scan|Loaded)"
Loaded Configuration File => /etc/php/7.0/fpm/php.ini
Scan this dir for additional .ini files => /etc/php/7.0/fpm/conf.d
 

In diesem Beispiel befindet sich die zzz-instana.ini Datei in /etc/php/7.0/fpm/conf.d. Wenn kein Additional Ini files Ordner verfügbar ist oder die zzz-instana.ini Datei an diesem Speicherort nicht vorhanden ist, überprüfen Sie stattdessen php.ini Ihre. In diesem Beispiel hat die Datei die Endung /etc/php/7.0/fpm/php.ini.

Führen Sie unter Windows den folgenden Befehl in PowerShell aus, um den Speicherort der php.ini Datei oder den Speicherort des Additional Ini files Ordners für PHP -CGI zu ermitteln:

PS C:\> php-cgi -i | Select-String -Pattern '(Scan|Loaded Configuration)' | ForEach-Object { ($_ -replace '<br\s*/?>', "`n") -replace '<[^>]+>', ''}
Loaded Configuration File C:\Php\php.ini
Scan this dir for additional .ini files (none)
 
Hinweis: Für Apache mit mod_php legen Sie eine Datei PHP mit dem Inhalt <?php phpinfo(); an einem über das Internet zugänglichen Speicherort auf Apache ab und öffnen Sie diese in einem Browser, um die gleichen Informationen anzuzeigen.

Um die Tracing-Erweiterung „ PHP “ zu deaktivieren, führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die entsprechende ini Datei in einem Editor und fügen Sie wie folgt ein Semikolon extension=/path/to/instana.so (;) vor der Zeile ein. Durch Hinzufügen eines Semikolons wird die Zeile auskommentiert.

    ;extension=/path/to/instana.so

    Alternativ können Sie die Zeile extension=/path/to/instana.so vollständig entfernen. Entfernen Sie es nicht, wenn Sie die Erweiterung zu einem späteren Zeitpunkt aktivieren möchten.

  2. Wenn Sie über die zzz-instana.ini Datei verfügen, können Sie diese auch wie folgt vollständig entfernen:

    $> sudo rm /etc/php/7.0/fpm/conf.d/zzz-instana.ini
     

    Unter Windows können Sie die Datei entfernen, indem Sie den folgenden Befehl in der Eingabeaufforderung (als Administrator) ausführen: PowerShell :

    PS C:\> Remove-Item -Path C:\Php\conf\zzz-instana.ini
     
    Wichtig: Entfernen Sie nicht Ihre gesamte php.ini Datei.
  3. Starten Sie Ihre „ PHP “-Laufzeitumgebung neu, um die „ PHP “-Tracing-Erweiterung aus dem Speicher zu entfernen. Wenn Ihre PHP -Laufzeit vorab gegabelte Worker verwendet, müssen Sie den PHP -Masterprozess jetzt neu starten.

Hinweis: Durch das Deaktivieren der Erweiterung wird die Erweiterungsdatei nicht von Ihrem System entfernt.

Entfernen der Datei „ PHP Tracing Extension“

PHP Protokolliert Startfehler, wenn es eine Erweiterung nicht finden kann. Bevor Sie die Erweiterung entfernen, müssen Sie sie daher auch deaktivieren. Weitere Informationen finden Sie unter Deaktivieren der Erweiterung „ PHP -Tracing “.

Der Sensor „ PHP “ (Erstellen von Verknüpfungen für die Verfolgung von Anwendungsressourcen) fügt die Verfolgungserweiterung „ Instana “ () PHP in das Verzeichnis ein, das in der extension_dir Einstellung in Ihrer php.ini. Um die Einstellung zu finden, führen Sie die php-Binärdatei aus, für die Sie das Tracing aktiviert haben. Das folgende Beispiel veranschaulicht dies anhand einer Binärdatei „ PHP -FPM“:

$> php-fpm7.0 -i | egrep ^extension_dir
extension_dir => /usr/lib/php/20151012 => /usr/lib/php/ext
 
Hinweis: Für Apache mit mod_php legen Sie eine Datei PHP mit dem Inhalt <?php phpinfo(); an einem über das Internet zugänglichen Speicherort auf Apache ab und öffnen Sie diese in einem Browser, um die gleichen Informationen anzuzeigen.

Der Sensor „ PHP “ verwendet nur den ersten Wert, sodass Sie in diesem Beispiel die Erweiterung unter finden /usr/lib/php/20151012können. Der Pfad zur Erweiterung ist auch in Ihrer php.ini oder der zzz-instana.ini Datei angegeben.

Unter Windows können Sie den folgenden Befehl in PowerShell ausführen, um dies herauszufinden extension_dir:

PS C:\> php-cgi -i | Select-String -Pattern 'extension_dir' | ForEach-Object { ($_ -replace '<br\s*/?>', "`n") -replace '<[^>]+>', ' '}
  extension_dir  C:\php\ext  C:\php\ext
 

Um die Erweiterung zu entfernen, führen Sie den folgenden Befehl aus:

$> sudo rm /usr/lib/php/20151012/instana.so
 

Unter Windows können Sie die Datei entfernen, indem Sie den folgenden Befehl in der Eingabeaufforderung ( PowerShell ) ausführen (als Administrator):

PS C:\> Remove-Item -Path C:\Php\ext\instana.dll
 

Wenn Sie vorab gegabelte Worker verwenden und Ihren Master-Prozess „ PHP “ beim Deaktivieren der Erweiterung noch nicht neu gestartet haben, müssen Sie ihn neu starten, damit die Änderungen wirksam werden.