Aktivieren und Konfigurieren von PHP-Tracing
Standardmäßig ist das PHP-Tracing in der Konfigurationsdatei des Agenten aktiviert. Wenn PHP-Tracing aktiviert ist, installiert der PHP-Sensor automatisch den PHP Tracer (auch als Instana PHP Tracing-Erweiterung bezeichnet) in Ihrer PHP-Runtime.
Anforderungen
Der PHP-Sensor ermöglicht die Nachverfolgung nur, wenn die erkannte PHP-Laufzeitumgebung die JSON-Erweiterung unterstützt. Wenn eine der folgenden Erweiterungen in einer PHP-Laufzeitumgebung erkannt wird, wird die PHP Tracer-Installation automatisch deaktiviert:
- SourceGuardian
- New Relic
- Dynatrace
- Datadog
Wenn die ionCube Loader-Erweiterung in einer PHP-Laufzeitumgebung erkannt wird, wird der PHP Tracer mit deaktiviertem PHP Userland Tracing installiert.
PHP-Verfolgungsprozess
Wenn die PHP-Ablaufverfolgung in der Konfigurationsdatei des Agenten aktiviert ist, wird der Prozess der Installation und Konfiguration der PHP-Ablaufverfolgungserweiterung automatisch durch den PHP-Sensor durchgeführt, wie in den folgenden Schritten beschrieben:
Der PHP-Sensor lädt die PHP-Tracing-Erweiterung herunter und aktiviert sie wie folgt in der INI-Konfiguration der PHP-Laufzeit:
- Wenn die PHP-Laufzeit mit einem separaten Verzeichnis für zusätzliche INI-Dateien konfiguriert ist, legt der PHP-Sensor eine
zzz-instana.iniDatei mit den INI-Einstellungen der PHP-Tracing-Erweiterung in diesem Verzeichnis ab. - Andernfalls konfiguriert der PHP-Sensor den PHP Tracer, indem er die INI-Einstellungen an die Hauptdatei
php.inianhängt.
Ändern Sie
zzz-instana.ininicht, da der PHP-Sensor sie bei jeder Installation auf der Grundlage der Konfigurationen in der Dateiconfiguration.yamldes Instana-Agenten überschreibt.- Wenn die PHP-Laufzeit mit einem separaten Verzeichnis für zusätzliche INI-Dateien konfiguriert ist, legt der PHP-Sensor eine
Der PHP-Sensor versucht dann, die PHP-Umgebung ordnungsgemäß neu zu starten, um die PHP-Tracing-Erweiterung in den Speicher zu laden.
Wenn die PHP-Laufzeit erfolgreich neu gestartet wird, beginnt die PHP-Tracing-Erweiterung mit der Sammlung von Traces in der PHP-Laufzeit.
Wenn der automatische Neustart aufgrund des SAPI-Typs der PHP-Laufzeit nicht funktioniert, müssen Sie PHP manuell neu starten, um die PHP-Tracing-Erweiterung in den Speicher zu laden. Weitere Informationen zur Automatisierung des Neustarts der PHP-Laufzeit finden Sie unter Automatische Neustarts.
Der PHP-Sensor generiert vernünftige Standardwerte für die INI-Einstellungen der PHP-Tracing-Erweiterung. Sie können diese Einstellungen jedoch an Ihre ganz speziellen Bedürfnisse anpassen. Weitere Informationen finden Sie unter Erweiterte Anpassungen.
Wenn Sie Probleme mit der automatischen Installation der PHP-Tracing-Erweiterung haben, können Sie sie auch manuell installieren. Weitere Informationen finden Sie unter Manuelle Installation der PHP-Tracing-Erweiterung.
Erweiterte Anpassung
Der PHP-Sensor überschreibt häufig zzz-instana.ini, 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 letzte Instanz einer Einstellung den effektiven Wert darstellt. 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 zzz-instana.ini geladen wird. In Container-Szenarien kann Ihre benutzerdefinierte INI-Datei dynamisch gemountet oder zum Bestandteil 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 Höchstwert ist 25 Einträge.instana.disabled_instrumentation(veraltet): Gibt eine Bitmaske von zu deaktivierenden Instrumentierungen an. Der Standardwert ist 0 (keine). Weitere Einzelheiten finden Sie im Abschnitt Deaktivieren der Instrumentierung. Diese INI-Einstellung ist veraltet und wird durch die Funktion zur Deaktivierung der Spanne ersetzt, die eine bessere Konfigurierbarkeit der Deaktivierung von Instrumenten ermöglicht.instana.disable_userland_tracing: Deaktiviert alle Verfolgungen für nicht-native PHP-Erweiterungen und PHP-Userland-Code wie Frameworks. Der Standardwert ist 0 (aus).instana.enable_cli: Aktivieren oder deaktivieren Sie das Tracing für die CLI SAPI. 1 = ein. 0 = aus. Der Standardwert ist 0 (aus).instana.log_level: Die zu protokollierende Stufe: 0 = aus, 1 = FEHLER, 2 = WARN, 3 = INFO und 4 = DEBUG. Der Standardwert ist 0 (aus).instana.segfault_error_log: Erfassen oder vermeiden Sie einen Backtrace zum PHP-Fehlerprotokoll bei Segfaults. Der Standardwert ist 0 (aus).instana.span_chunk_size: Die Anzahl der Spans, die im PHP-Speicher gehalten werden sollen, bevor sie an den Agenten gesendet werden. Diese Zahl wirkt sich direkt auf die Dosierung aus. So wird zum Beispiel die Stapelung von einem Stück effektiv deaktiviert.
Die folgenden Einstellungen gelten nur für PHP 5:
instana.socket: Die Adresse des TCP-Sockets des Instana PHP-Sensors. 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 höher:
instana.buffer_hard_limit: Die maximale Anzahl von Zeitspannen, die im Puffer aufbewahrt werden, wenn der Agent nicht mehr antwortet. Die ältesten Abschnitte werden verworfen, bis der Puffer innerhalb dieses Limits liegt. Der Standardwert ist 1000.instana.buffer_maximum_delay_ms: Das maximale Intervall zwischen aufeinanderfolgenden Freigaben eines Spannenpuffers. Der Standardwert ist 1000 ms.instana.buffer_soft_limit: Die maximale Anzahl von Bereichen, die gepuffert werden sollen, bevor ein Bereichspuffer geleert wird. Der Standardwert ist '500'.
Die folgenden Einstellungen gelten ausschließlich für PHP 8.1 und höher:
instana.span_filter_config_file: Gibt den absoluten Pfad der YAML-Datei an, die die Konfiguration zur Deaktivierung von Traces enthält. Der PHP-Sensor aktualisiert diese Einstellung, um die Deaktivierung der Spanne über die Dateiconfiguration.yamldes Agenten zu ermöglichen. Der Standardwert ist<System_Temp>/instana-php/instana_span_filter_config.yaml. Weitere Einzelheiten zu dieser Einstellung finden Sie im Abschnitt Zusätzliche Konfiguration.
Die folgende Tabelle ist eine vollständige Liste der Umgebungsvariablen für die Konfiguration der PHP-Erweiterung:
| 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 Konfigurationen in zzz-instana.ini. Weitere Informationen finden Sie unter Umgebungsvariablen.
Wenn Sie Hilfe bei diesen Einstellungen benötigen, wenden Sie sich an den IBM Support.
Erfassen von benutzerdefinierten HTTP Kopfzeilen
PHP Tracer kann benutzerdefinierte HTTP Kopfzeilen in Eingangs- und Ausgangsspannen erfassen. Um diese Kopfzeilen zu erfassen, geben Sie die Liste der Kopfzeilen in einer der folgenden Konfigurationen an:
PHP INI-Einstellung:
instana.extra_http_headers=HEADER1,HEADER2Konfiguration der Umgebungsvariablen:
INSTANA_EXTRA_HTTP_HEADERS=HEADER1;HEADER2
Alternativ können Sie die HTTP Kopfzeilen jeder verfolgten Anfrage oder Antwort erfassen, indem Sie die Kopfzeilenliste in der Datei configuration.yaml des Agenten festlegen. Weitere Informationen finden Sie unter Erfassen von benutzerdefinierten HTTP Kopfzeilen
Der PHP Tracer behält Leerzeichen sowohl in den Header-Schlüsseln als auch in den Werten bei.
Deaktivieren von Spannen
Der PHP Tracer unterstützt die Deaktivierung von Traces oder Spans für bestimmte Spant-Typen (Frameworks, Bibliotheken und Instrumentierungen) oder ganze Gruppen von Bibliotheken (Span-Kategorie). Mit dieser Funktion zur Deaktivierung der Spanne können Sie die Ablaufverfolgung an die Anforderungen Ihrer Anwendung anpassen, was zu einer Reduzierung der Netzwerkkosten führt, da nur die für Ihre Anwendung wichtigen Ablaufverfolgungen gemeldet werden.
Verwenden Sie eine der folgenden Methoden, um die Konfiguration zur Deaktivierung der Ablaufverfolgung bereitzustellen:
Für die Konfiguration der Spannendeaktivierung auf Apache und IIS-Servern sind zusätzliche Schritte erforderlich. Einzelheiten finden Sie unter Zusätzliche Konfiguration. Details dazu, wie Instana die Deaktivierung von Spans priorisiert, finden Sie unter Konfigurationspriorität für die Deaktivierung von Spans.
Konfigurieren durch Umgebungsvariablen
Um das Tracing über die Umgebungsvariable zu deaktivieren, setzen Sie die Umgebungsvariable INSTANA_CONFIG_PATH auf den absoluten Pfad der YAML-Datei mit Ihrer Konfiguration.
Um z.B. das Tracing für alle Datenbankaufrufe (außer MongoDB ) und alle Logging-Frameworks zu deaktivieren, kopieren Sie den folgenden Code in eine separate YAML-Datei:
tracing:
disable:
- databases: true
- mongodb: false
- logging: true
Setzen Sie die Umgebungsvariable INSTANA_CONFIG_PATH auf den absoluten Pfad der YAML-Datei, in der der Inhalt abgelegt wird, wie folgt:
INSTANA_CONFIG_PATH=<your YAML file>
Konfigurieren über die Instana-Agentenkonfiguration
Um die Ablaufverfolgung über die Konfiguration des Instana-Agenten zu deaktivieren, deaktivieren Sie die Ablaufverfolgung im Abschnitt com.instana.tracing.disable in der Datei configuration.yaml des Agenten.
Um die Ablaufverfolgung für alle Datenbankaufrufe (außer Redis ) und alle Protokollierungs-Frameworks zu deaktivieren, aktualisieren Sie den Abschnitt com.instana.tracing in der Datei configuration.yaml Ihres Agenten 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.
Wenn Sie die Ablaufverfolgung für eine Kategorie deaktivieren, wird die Erzeugung von Spannen für alle Bibliotheken dieser Kategorie ausgeschaltet. Siehe die folgende Liste der von PHP Tracer unterstützten Kategorien:
- Datenbanken
- frameworks
- Nachrichtenübertragung
- Protokolle
- Protokollierung
- Erstellung anhand einer Vorlage
- Andere (für andere ist kein Kategorienschlüssel verfügbar)
Vorrang der Konfiguration für die Deaktivierung von Spans
Die Regeln für die Sperrung von Bereichen werden in der folgenden Reihenfolge angewendet, von der höchsten zur niedrigsten:
- Spanne Deaktivierungsregeln aus der Konfigurationsdatei, die über die
INSTANA_CONFIG_PATHumgebungsvariable übergeben wird. - Deaktivierung der Spanne, konfiguriert in der Einstellung
instana.disabled_instrumentationini. - Spanne Deaktivierungsregeln aus der Datei
configuration.yamldes Agenten.
Dieser Vorrang wird auf Merkmalsebene durchgesetzt. Wenn eine PHP-Laufzeitumgebung mehrere Konfigurationen in einem Merkmal erkennt, wendet sie die Regeln zum Deaktivieren der Spanne aus der Konfiguration mit der höchsten Priorität an. Wenn zum Beispiel eine PHP-Laufzeitumgebung die folgenden Regeln zum Deaktivieren der Spanne über die INSTANA_CONFIG_PATH umgebungsvariable festgelegt sind:
com.instana.tracing:
disable:
- logging: true
- databases: true
- redis: false
Und dieselbe Runtime hat die folgende Ini-Einstellung:
instana.disabled_instrumentation=24 ; disables redis (16) and curl (8) instrumentations
Mit dieser Beispielkonfiguration funktioniert der PHP Tracer wie folgt:
- Die Ablaufverfolgung für alle Protokollierungsbibliotheken ist deaktiviert.
- Die Ablaufverfolgung ist für alle Datenbanken außer für Redis deaktiviert.
Die Einstellung instana.disabled_instrumentation ini wird ignoriert, da die INSTANA_CONFIG_PATH umgebungsvariable Vorrang hat. Daher werden alle Instrumentierungen, die nicht durch die Konfigurationsdatei deaktiviert sind, die durch die INSTANA_CONFIG_PATH umgebungsvariable angegeben sind, aktiviert.
Wenn die Regeln zum Deaktivieren von Bereichen sowohl über die INSTANA_CONFIG_PATH umgebungsvariable und die Datei configuration.yaml des Agenten festgelegt werden, werden die Regeln aus der Datei configuration.yaml ignoriert.
Zusätzliche Konfiguration
Der PHP-Sensor erkennt alle Änderungen in der Datei configuration.yaml des Agenten und erstellt eine Kopie des Abschnitts com.instana.tracing.disable in eine separate Datei, die sich unter <System Temp>/instana-php/instana_span_filer_config.yaml befindet. Der absolute Pfad der generierten Datei wird auf die Einstellung instana.span_filter_config_file ini gesetzt, so dass PHP Tracer spätere Änderungen an der Datei configuration.yaml ohne Neustart der PHP-Laufzeit erkennen und übernehmen kann. Daher muss die PHP-Laufzeitumgebung Lesezugriff auf den Temp-Ordner des Systems haben, wenn Sie Regeln zum Deaktivieren der Spanne über die Datei configuration.yaml des Agenten konfigurieren.
Die folgenden Unterabschnitte beschreiben die zusätzlichen Schritte, die in einigen Umgebungen erforderlich sind, damit die PHP-Laufzeitumgebung ausreichenden Zugriff auf den Temp-Ordner des Systems hat.
Apache-Server
Apache server auf Linux -basierten Betriebssystemen kann so konfiguriert werden, dass er einen isolierten Temp-Ordner hat, anstatt den Temp-Ordner des Systems zu verwenden. Damit der PHP Tracer auf die Konfigurationsdatei zugreifen kann, die sich im Temp-Ordner des Systems befindet, stellen Sie sicher, dass PrivateTmp auf false eingestellt ist, indem Sie die folgenden Schritte durchführen:
Bearbeiten Sie die Datei
Systemd unit, indem Sie den folgenden Befehl ausführen:sudo systemctl edit apache2.serviceFügen Sie die Eigenschaft
PrivateTmpim Abschnitt Service hinzu oder aktualisieren Sie sie:[Service] PrivateTmp=falseStarten Sie den Apache Server neu, um die Änderungen zu übernehmen.
Um die Aktualisierung von PrivateTmp zu vermeiden, können Sie die Regeln zur Deaktivierung von Bereichen über eine Umgebungsvariable konfigurieren.
IIS-Server
IIS-Arbeitsprozesse haben manchmal keinen Zugriff auf den Windows-Temp-Ordner. Dieser unzureichende Zugriff auf den temporären Ordner ist darauf zurückzuführen, dass die Identität des Anwendungspools, der für die Ausführung der Arbeitsprozesse verwendet wird, keine ausreichenden Lese- oder Schreibrechte für den temporären Ordner besitzt. Führen Sie die folgenden Schritte aus, um dieses Zugriffsproblem zu lösen:
Bestätigen Sie die Identität Ihres Anwendungspools, indem Sie den folgenden Befehl in Ihrem PowerShell Terminal ausführen:
& $env:windir\system32\inetsrv\appcmd.exe list apppool <your AppPool> /text:processModel.identityTypeWenn die Identität nicht
ApplicationPoolIdentitylautet, 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:ApplicationPoolIdentityStarten 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 der Identität
ApplicationPoolIdentityläuft, und erstellt einen virtuellen Benutzer mit dem Namen Ihres Anwendungspools.Um der PHP-Laufzeit, d. h. den IIS-Arbeitsprozessen, Lesezugriff auf das Verzeichnis
<SYSTEM_TEMP>zu gewähren, verwenden Sie den folgenden Befehl:icacls "<SYSTEM_TEMP>" /grant "IIS APPPOOL\<your AppPool>:(OI)(CI)R" /T /C
Deaktivierung der Instrumentierung
Um die Instrumentierung für eine bestimmte Bibliothek oder eine Gruppe von Bibliotheken in den PHP-Ini-Einstellungen zu deaktivieren, verwenden Sie die Einstellung instana.disabled_instrumentation . Sie nimmt den Bitmaskenwert der Bibliotheken an, für die das Tracing deaktiviert werden soll. Die Bitmaskenwerte der Bibliotheken finden Sie in der Spalte Instrumentation flag 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 MongoDB -Aufrufe (mit Instrumentierungsflag: 32) und Redis -Datenspeicheraufrufe (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 Einstellung instana.disabled_instrumentation für eine bessere Kontrolle über die Erzeugung von Spans in Ihrem PHP Tracer.
Automatische Neustarts
Da PHP Tracer eine PHP-Erweiterung ist, die in die PHP-Laufzeitumgebung geladen wird, erfordert das Aktivieren und Deaktivieren von PHP Tracing oder das Ändern der Version der installierten PHP Tracing-Erweiterung einen Neustart der PHP-Laufzeitumgebung, damit die Änderungen wirksam werden.
Der PHP-Sensor ist in der Lage, die Laufzeiten von Apache und PHP-FPM automatisch und ordnungsgemäß neu zu starten. Ein manueller Neustart ist jedoch für die folgenden PHP-Laufzeitszenarien erforderlich:
- PHP-Laufzeiten mit CGI SAPI: Sie müssen die PHP-Laufzeitumgebung manuell neu starten.
- PHP-Laufzeiten mit vorgefertigten Worker-Prozessen: Sie müssen den PHP-Master-Prozess manuell neu starten.
Sie können die in den vorangegangenen Fällen erforderlichen manuellen Neustarts automatisieren und auch die Art und Weise ändern, wie der PHP-Sensor versucht, Ihre PHP-Laufzeit neu zu starten, indem Sie ein Benachrichtigungsskript für tracing.notificationScript im com.instana.plugin.php abschnitt in der Datei configuration.yaml des Agenten angeben.
Diese Einstellung nimmt den absoluten Pfad zu einem ausführbaren Shell-Skript ( Linux ) oder PowerShell Skript (Windows). Wenn ein Neustart der PHP-Laufzeit erforderlich ist, führt der PHP-Sensor das in tracing.notificationScript definierte Skript aus, anstatt seine Standard-Neustartbefehle zu verwenden.
Überlegungen zur Gestaltung des Benachrichtigungsskripts
Das Benachrichtigungsskript wird einmal pro PHP-Laufzeit ausgeführt, was bedeutet, dass das Skript möglicherweise nicht für alle Prozesse ausgelöst wird, die dieselbe ausführbare PHP-Datei ausführen. Um die PHP-Tracing-Erweiterung in den Speicher zu laden, müssen Sie sicherstellen, dass Ihr Skript alle Prozesse neu startet, die von dieser ausführbaren PHP-Datei aus laufen.
Wenn dieses Skript konfiguriert und erfolgreich ausgeführt wird, setzt es den Standardmechanismus für automatische Neustarts außer Kraft. Im Gegensatz zum Standardmechanismus wird das Skript für jedes SAPI ausgeführt, so dass es zur Automatisierung von Neustarts für PHP-CGI-Umgebungen verwendet werden kann. Wenn Sie den automatischen Neustart vollständig deaktivieren möchten, konfigurieren Sie ein leeres Skript.
Der PHP-Sensor setzt die folgenden Umgebungsvariablen für die Skriptausführung:
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 innerhalb eines Containers läuft, 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 eine SIGUSR2 senden, um ihn ordnungsgemäß neu zu starten, wie im folgenden Beispiel gezeigt:
docker exec $INSTANA_CONTAINER kill -USR2 $INSTANA_PID_CONTAINER;
Bei einem ordnungsgemäßen Neustart wird die PHP-Erweiterung in den Speicher geladen, ohne dass der Master-Prozess neu gestartet wird. Dieses Laden funktioniert also auch dann, wenn der Prozess als PID 1 innerhalb des Containers läuft. Wenn Sie den Neustart nicht durchführen können oder wollen, können Sie auch einen Snapshot der laufenden Container-Instanz erstellen, diese stoppen und 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-Bildes zu ermitteln. Anschließend wird der laufende Container in ein neues Image überführt, das mit der neuen Versionsnummer der PHP-Erweiterung versehen wird. Anschließend wird der ursprüngliche Container gestoppt und ein Container mit dem neu markierten Bild gestartet. Diese Aktion löst zwar erneut die Installationsroutine im PHP-Sensor aus, aber nicht erneut das Benachrichtigungsskript, da die Erweiterung bereits installiert ist.
Diese Beispiele gehen davon aus, dass Sie Docker als Container-Engine verwenden. Da das getriggerte Shell-Skript jedoch vollständig unter Ihrer Kontrolle steht, können Sie jede beliebige Logik einbauen, die Sie benötigen, damit der automatische Neustart für Ihre Einrichtung funktioniert.
Deaktivieren der PHP-Nachverfolgung
Um die PHP-Verfolgung zu deaktivieren, führen Sie die folgenden Schritte aus:
In dem
com.instana.plugin.phpabschnitt in der Dateiconfiguration.yamldes Agenten setzen Sietracing.enabledauffalse. Wenn die Datei des Agentenconfiguration.yamlnicht den Abschnittcom.instana.plugin.phpabschnitt enthält, müssen Sie ihn wie folgt hinzufügen:com.instana.plugin.php: tracing: enabled: falseHinweis: Das Auskommentieren descom.instana.plugin.phpabschnittes wird die PHP-Verfolgung nicht deaktiviert, da sie standardmäßig aktiviert ist.Der PHP-Sensor entfernt automatisch die INI-Einstellungen der PHP-Tracing-Erweiterung aus der PHP-INI-Konfiguration und versucht, die PHP-Laufzeit ordnungsgemäß neu zu starten, um die PHP-Tracing-Erweiterung aus dem Speicher zu entfernen. Nachdem die PHP-Laufzeit erfolgreich neu gestartet wurde, ist die PHP-Verfolgung vollständig deaktiviert.
Wenn der PHP-Sensor die PHP-Laufzeit nicht automatisch neu starten kann, starten Sie die PHP-Laufzeit manuell neu, um das PHP-Tracing vollständig zu deaktivieren. Die Fähigkeit des PHP-Sensors zum automatischen Neustart der PHP-Laufzeit hängt vom SAPI-Typ ab. Sie können dieses Verhalten steuern und den Neustart der PHP-Laufzeit automatisieren, der erforderlich ist, um den PHP Tracer aus dem Speicher zu entfernen. Weitere Informationen finden Sie unter Automatische Neustarts.
Hinweis: Lesen Sie den Abschnitt Automatische Neustarts und überlegen Sie sorgfältig, ob Ihre PHP-Laufzeit manuell neu gestartet werden muss, um die PHP-Tracing-Erweiterung aus dem Speicher zu entfernen.Vergewissern Sie sich, dass die PHP Tracing-Erweiterung in Ihrer PHP-Laufzeitumgebung nicht mehr aktiviert ist, indem Sie überprüfen, dass
instananicht in der Liste der aktivierten Erweiterungen in Ihrer PHP INI-Konfiguration aufgeführt ist. Sie können die Liste der aktivierten PHP-Erweiterungen erhalten, indem Sie das von Ihrer PHP-Laufzeitumgebung verwendete PHP-Binary mit der Option-mausführen. Das folgende Beispiel zeigt, wie man die aktivierten PHP-Erweiterungen mit Hilfe der Binärdateiphp-fpmauflisten kann:$> php-fpm -m [PHP Modules] curl json PDO sqlite3 Zend OPcache zlib [Zend Modules] Zend OPcacheHinweis: Um zu überprüfen, ob die PHP Tracing-Erweiterung in Apache mit dermod_phpRuntime deaktiviert ist, erstellen Sie ein PHP-Skript mit dem Inhalt<?php phpinfo();im Dokumentenstamm des Webservers, damit Apache das Skript bereitstellt. Sie können dann die Seite URL zu diesem Skript in Ihrem Browser öffnen und überprüfen, dassinstananicht in der Liste der aktivierten PHP-Erweiterungen enthalten ist.Wenn bei diesem Vorgang Fehler auftreten, können Sie das PHP-Tracing manuell deaktivieren und die PHP-Tracing-Erweiterung deinstallieren. Weitere Informationen finden Sie unter Manuelles Deaktivieren der PHP-Nachverfolgung.
Die Deinstallation des Instana-Agenten entfernt nicht automatisch die PHP-Tracing-Erweiterung von den PHP-Laufzeiten, die bereits instrumentiert sind. Bevor Sie den Instana-Agenten deinstallieren, deaktivieren Sie das PHP-Tracing, um die PHP-Tracing-Erweiterung von allen PHP-Laufzeiten auf dem Host zu deinstallieren. Weitere Informationen finden Sie unter Deinstallation des Instana-Agenten.
Deaktivieren der Installation der PHP-Tracing-Erweiterung
Um die automatische Installation der PHP-Tracing-Erweiterung in neu erkannten PHP-Laufzeiten zu deaktivieren, setzen Sie tracing.installExtension auf false im Abschnitt com.instana.plugin.php abschnitt in der Datei configuration.yaml des Agenten:
com.instana.plugin.php:
tracing:
enabled: true
installExtension: false
Fehlerbehebung
Fehlen von PHP-Spuren in der Instana-Benutzeroberfläche
Wenn Sie Plesk verwenden, müssen Sie plesk bin php_handler --reread ausführen.
Wenn Sie keine Spuren in der Instana-Benutzeroberfläche für PHP-Anwendungen sehen, führen Sie die folgenden Schritte aus:
Überprüfen Sie die folgenden Voraussetzungen:
- Der PHP-Sensor ist aktiviert. Weitere Informationen finden Sie unter Deaktivieren des PHP-Tracing.
- Das PHP Tracing Extension Binary ist verfügbar. Weitere Informationen finden Sie unter Deaktivieren der PHP-Tracing-Erweiterung.
- Die PHP-Tracing-Erweiterung ist in der Konfigurationsdatei des Agenten aktiviert. Weitere Informationen finden Sie unter Entfernen der PHP-Tracing-Erweiterungsdatei.
Laden Sie die PHP-Tracing-Erweiterung neu, indem Sie den folgenden
reloadauf dem Dienst, der PHP-Anwendungen ausführt:Für Apache :
systemctl reload apache2Für PHP-FPM:
systemctl reload php<version>-fpmErsetzen Sie <Version> im reload-Befehl durch die aktuelle Version, die im System installiert ist.
Wenn Sie immer noch keine Spuren in der Instana-Benutzeroberfläche sehen und Ihr Betriebssystem SELinux standardmäßig enthält oder es zu Sicherheitszwecken zur Umgebung hinzufügt, könnte SELinux für das Problem verantwortlich sein.
Die PHP-Tracer-Erweiterung kommuniziert mit dem PHP-Daemon über den Unix-TCP-Socket <socket path> und mit dem Instana-Agenten über den TCP/IP-Port 42699. Wenn SELinux auf den erzwingenden Modus eingestellt ist, verhindert es, dass die PHP-Erweiterung und der Daemon miteinander kommunizieren, es sei denn, SELinux ist so konfiguriert, dass es dies erlaubt.
Um zu überprüfen, ob SELinux für das Problem verantwortlich ist, überprüfen Sie /var/log/audit/audit.log auf alle stillen Verweigerungen, die für den PHP-Daemon aufgezeichnet wurden. Alternativ können Sie auch einen Rauchtest durchführen, indem Sie die folgenden Schritte ausführen:
- Deaktivieren Sie SELinux vorübergehend.
- Starten Sie den PHP-Daemon neu.
Wenn SELinux als Ursache für das Problem identifiziert wird, können Sie es mit einer der folgenden Optionen beheben:
Konfigurieren Sie SELinux, um PHP Tracer die Kommunikation zu ermöglichen: Mit SELinux können Sie Ihre eigenen Sicherheitsrichtlinien befolgen und eine benutzerdefinierte Richtlinie konfigurieren, um die Kommunikation zu ermöglichen. Weitere Informationen zum Erstellen und Ändern von SELinux-Richtlinien finden Sie unter den folgenden Links:
Setzen Sie SELinux in den permissiven Modus: In diesem Modus können Ihre Dienste ohne Einschränkungen arbeiten. Sie können die Standardeinstellung wiederherstellen, indem Sie den Server neu starten. Um SELinux in den permissiven Modus zu versetzen, siehe SELinux permissiver Modus.
Deaktivieren Sie SELinux: Instana ermutigt Sie nicht aktiv dazu, Sicherheitssoftware zu deaktivieren. Ein richtiger und sicherer Ansatz ist die Erstellung einer SELinux-Richtlinie. Wenn Sie sich jedoch entscheiden, SELinux zu deaktivieren, lesen Sie den Abschnitt Deaktivieren Linux.
Protokollierung wird aktiviert
In der Standardeinstellung ist die Protokollierung ausgeschaltet. Um sie zu aktivieren, führen Sie die folgenden Schritte aus.
- Aktivieren Sie die Protokollierung mit Hilfe von Umgebungsvariablen.
- Um die Protokollstufe auf Debug zu setzen, setzen Sie
INSTANA_DEBUGaufTRUEoderINSTANA_LOG_LEVEL=4
- Aktivieren Sie die Protokollierung mit Hilfe der INI-Datei.
Suchen Sie im Scan-Verzeichnis Ihrer PHP-Installation eine Datei namens
zzz-instana.ini. Wenn Sie z. B.php --ini | grep zzz-instana.inioderphp-fpm<version> -i | grep zzz-instana.iniaufrufen, sehen Sie, wo er sich befindet.Fügen Sie die Zeile
instana.log_level=4zuzzz-instana.inihinzu.Wenn Sie die PHP-Laufzeitumgebung Ihrer Wahl ausführen, vergewissern Sie sich, dass eine gewisse Protokollierung in der Ausgabe vorhanden und die Erweiterung aktiviert ist. Sie können zum Beispiel
php --ri instanaoderphp-fpm<version> -i | grep instanaausführen, um dies zu überprüfen.Beispiel:
[instana.INFO] Initializing, logging at level 4Laden Sie die PHP-Tracing-Erweiterung wie hier beschrieben neu. Wird dieser Schritt übersprungen, erfolgt keine Protokollierung.
Die Protokolle werden in die PHP-Laufzeitumgebung geleitet, in der die PHP-Tracing-Erweiterung 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 PHP-Tracing-Erweiterung
Um die PHP-Tracing-Erweiterung manuell zu installieren, führen Sie die folgenden Schritte aus:
Laden Sie die Instana PHP Tracing-Erweiterung wie folgt herunter:
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.shFühren Sie das Shell-Skript aus, um die für Ihre Umgebung geeignete Erweiterung herunterzuladen. Der folgende Befehl zeigt die verfügbaren Optionen:
./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>Geben Sie für die PHP-Version die Major- und Minor-Versionsnummern an. Um zum Beispiel die Instana-Erweiterung für PHP 8.4.12 herunterzuladen, führen Sie das Shell-Skript mit dem Flag
-p 8.4aus.Für die Version OpenSSL verwenden Sie die Option
-s ssl1, um die Erweiterung herunterzuladen, die OpenSSL 1.1 unterstützt, oder verwenden Sie-s ssl3, um die Erweiterung herunterzuladen, die OpenSSL 3.x unterstützt.Für die Version der Instana-Erweiterung ist der Standardwert
release, wodurch die neueste verfügbare Version heruntergeladen wird. Verwenden Sie das-vFlag, um das Artefakt für eine bestimmte Version herunterzuladen. Führen Sie zum Beispiel das Skript mit-v 4.7.0aus, um die Erweiterung mit der Release-Version 4.7.0 herunterzuladen.Um alle für das Skript verfügbaren Optionen zu sehen, führen Sie den folgenden Befehl aus:
./php-instana-ext-download-script.sh
Installieren Sie die Erweiterung wie folgt:
Verschieben Sie die heruntergeladene Datei
.soin das Verzeichnis der PHP CLI-Erweiterung.Erstellen Sie eine INI-Datei,
zzz-instana.ini, wie im folgenden Beispiel gezeigt, und speichern Sie sie im Verzeichnis PHP CLI additional INI. Ersetzen Sie<hostIP>durch die IP-Adresse des Instana-Agenten-Hosts, 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 Abschalten der PHP-Verfolgung
Führen Sie die unter Deaktivieren der PHP-Ablaufverfolgung beschriebenen Schritte aus, um die PHP-Ablaufverfolgung vollständig zu deaktivieren, einschließlich der Entfernung der PHP-Tracing-Erweiterung aus Ihrer PHP-Laufzeitumgebung.
Wenn während dieses Vorgangs Fehler auftreten und Sie die PHP-Verfolgung manuell deaktivieren und die PHP-Tracing-Erweiterung deinstallieren möchten, führen Sie die folgenden Schritte aus:
Stellen Sie sicher, dass PHP-Tracing in der Datei
configuration.yamlwie folgt deaktiviert ist:com.instana.plugin.php: tracing: enabled: falseDiese Konfiguration verhindert, dass der PHP-Sensor die PHP-Tracing-Erweiterung erneut installiert.
Deaktivieren Sie die PHP Tracing-Erweiterung in Ihrer PHP INI-Konfiguration. Siehe Deaktivieren der PHP-Tracing-Erweiterung.
Entfernen Sie die PHP Tracing-Erweiterungsdatei von Ihrem System. Siehe Entfernen der PHP-Tracing-Erweiterungsdatei.
PHP-Tracing-Erweiterung inaktivieren
Als der PHP-Sensor die Erweiterung installiert hat, hat er auch die Erweiterung für Ihre PHP-Installation aktiviert. Das Aktivieren der Erweiterung bedeutet, dass der PHP-Sensor die Datei zzz-instana.ini entweder in Ihrem Additional Ini files -Ordner abgelegt oder sie direkt in Ihrem php.ini aktiviert hat.
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 zeigt dies anhand einer PHP-FPM-Binärdatei:
$> 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 Datei zzz-instana.ini unter /etc/php/7.0/fpm/conf.d. Wenn kein Ordner Additional Ini files verfügbar ist oder die Datei zzz-instana.ini an diesem Ort nicht existiert, prüfen Sie stattdessen php.ini . In diesem Beispiel ist die Datei in /etc/php/7.0/fpm/php.ini.
Unter Windows führen Sie den folgenden Befehl in PowerShell aus, um den Speicherort der Datei php.ini oder den Speicherort des Ordners Additional Ini files 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)
<?php phpinfo(); an einem für das Web zugänglichen Ort auf Apache ab und öffnen Sie sie in einem Browser, um die gleichen Informationen zu erhalten.Um die PHP-Tracing-Erweiterung zu deaktivieren, führen Sie die folgenden Schritte aus:
Öffnen Sie die entsprechende Datei
iniin einem Editor und stellen Sie das Semikolon (;) in der Zeileextension=/path/to/instana.sowie folgt voran. Durch Hinzufügen eines Semikolons wird die Zeile auskommentiert.;extension=/path/to/instana.soAlternativ können Sie die Zeile
extension=/path/to/instana.soauch ganz entfernen. Entfernen Sie sie nicht, wenn Sie die Erweiterung zu einem späteren Zeitpunkt aktivieren möchten.Wenn Sie die Datei
zzz-instana.inihaben, können Sie die Datei auch wie folgt vollständig entfernen:$> sudo rm /etc/php/7.0/fpm/conf.d/zzz-instana.iniUnter Windows können Sie die Datei entfernen, indem Sie den folgenden Befehl unter PowerShell (als Administrator) ausführen:
PS C:\> Remove-Item -Path C:\Php\conf\zzz-instana.iniWichtig! Entfernen Sie nicht Ihre gesamte Dateiphp.ini.Starten Sie Ihre PHP-Laufzeitumgebung neu, um die PHP Tracing-Erweiterung aus dem Speicher zu entfernen. Wenn Ihre PHP-Laufzeitumgebung Pre-Forked Worker verwendet, müssen Sie den PHP-Master-Prozess jetzt neu starten.
Entfernen der PHP-Tracing-Erweiterungsdatei
PHP protokolliert Startfehler, wenn es eine Erweiterung nicht findet. Bevor Sie also die Erweiterung entfernen, müssen Sie sie auch deaktivieren. Weitere Informationen finden Sie unter Deaktivieren der PHP-Tracing-Erweiterung.
Der PHP-Sensor legt die Instana PHP-Tracing-Erweiterung in dem Verzeichnis ab, das in der Einstellung extension_dir in Ihrem php.ini angegeben ist. Um die Einstellung zu finden, führen Sie die php-Binärdatei aus, für die Sie das Tracing aktiviert haben. Das folgende Beispiel zeigt dies anhand einer PHP-FPM-Binärdatei:
$> php-fpm7.0 -i | egrep ^extension_dir
extension_dir => /usr/lib/php/20151012 => /usr/lib/php/ext
<?php phpinfo(); an einem für das Web zugänglichen Ort auf Apache ab und öffnen Sie sie in einem Browser, um die gleichen Informationen zu erhalten.Der PHP-Sensor verwendet nur den ersten Wert, so dass Sie in diesem Beispiel die Erweiterung unter /usr/lib/php/20151012 finden kö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 extension_dir herauszufinden:
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 unter PowerShell (als Administrator) ausführen:
PS C:\> Remove-Item -Path C:\Php\ext\instana.dll
Wenn Sie Pre-Forked Worker verwenden und Ihren PHP-Master-Prozess nicht bereits neu gestartet haben, als Sie die Erweiterung deaktiviert haben, müssen Sie ihn neu starten, damit die Änderungen wirksam werden.