Zum Hauptinhalt springen
Das AppSignal-für-PHP-Paket bietet Out-of-the-box-Instrumentierungen für Ihre PHP-Anwendung. Manchmal benötigen Sie jedoch eine feingranulare Observability, die eine manuelle Instrumentierung erfordert. Verwenden Sie in diesen Fällen die Methode Appsignal::instrument und passen Sie die an AppSignal gesendeten Daten mit den Hilfsmethoden an.
An AppSignal gesendete Daten dürfen keine personenbezogenen Daten enthalten, wie Namen oder E-Mail-Adressen. Bereinigen Sie die Daten Ihrer Anwendung, bevor Sie sie an AppSignal senden. Wenn Sie eine Person identifizieren müssen, verwenden Sie Alternativen wie eine Benutzer-ID, einen Hash oder ein Pseudonym.

Spans erstellen

Die Klasse Appsignal stellt eine Hilfsmethode zum Erstellen von Spans bereit.

instrument

Erstellt und aktiviert einen neuen Span. Übergeben Sie eine Closure, damit der Span automatisch geschlossen wird, oder lassen Sie sie weg, um den Lebenszyklus des Spans manuell zu verwalten.

Mit einer Closure

Wenn Sie eine Closure verwenden, schließt AppSignal den aktiven Span automatisch.
PHP
Appsignal::instrument(
	name: 'process-order',
	attributes: ['order_id' => $orderId],
	closure: function () {
		// do work here
		Appsignal::setAttributes(['order_status' => 'processed']);
	},
);

Ohne Closure

Ohne Closure gibt die Methode instrument eine Instanz der Klasse ActiveSpan zurück, einen schlanken Wrapper um den OpenTelemetry-Span und dessen Scope. Schließen Sie diesen Span manuell, indem Sie $span->end() aufrufen.
PHP
$activeSpan = Appsignal::instrument(
	name: 'upload-file',
	attributes: ['file_name' => $filename],
);

try {
    uploadFile($file);
} catch (Throwable $e) {
    Appsignal::setError($e);
} finally {
    $activeSpan->end();
}

Hilfsmethoden

Die Basisklasse Appsignal stellt Hilfsmethoden bereit, um Traces oder Spans benutzerdefinierte Daten hinzuzufügen. Die folgenden Abschnitte beschreiben jede Hilfsmethode.
Die folgenden Codebeispiele setzen voraus, dass Ihr Code bereits instrumentiert wird (zum Beispiel innerhalb eines Laravel- oder Symfony-Route-Handlers). Wenn Ihr Code noch nicht instrumentiert ist, müssen Sie einen Root-Span erstellen, indem Sie Appsignal::instrument() aufrufen, und die Hilfsmethoden darin verwenden.

addAttributes

Fügt dem aktuellen Span Attribute hinzu.
PHP
Appsignal::addAttributes([
    'user_id'   => $user->id,
    'user_plan' => $user->plan,
]);

addHeaders

Fügt dem aktuellen Span Request-Header hinzu. Wenn der Header-Name bereits existiert, wird der Wert überschrieben. Request-Header werden für gesampelte Traces in AppSignal angezeigt. Weitere Informationen finden Sie im Leitfaden zur Anpassung von Request-Headern.
PHP
Appsignal::addHeaders(['custom-header' => 'some-value']);

addTags

Fügt dem aktuellen Span Tags hinzu. Tags erscheinen in AppSignal als filterbare Metadaten und werden intern mit appsignal.tag. präfixiert.
PHP
Appsignal::addTags([
    'locale'  => 'en',
    'version' => '2.1.0',
]);
Weitere Informationen zur Funktionsweise von Tags in AppSignal finden Sie im Tagging-Leitfaden.

setAction

Legt den Aktionsnamen für den aktuellen Span fest. AppSignal zeigt diesen als Transaktionsnamen an und verwendet ihn, um Samples zu gruppieren.
PHP
Appsignal::setAction('OrdersController::create');

setNamespace

Legt den Namespace des Root-Spans fest.
PHP
Appsignal::setNamespace('admin');

setParams

Legt die Query-Parameter der eingehenden Anfrage fest. Die $params müssen ein Wert sein, der als JSON serialisiert werden kann.
PHP
$params = [
    'param1' => 'value1',
    'param2' => 'value2',
    'nested' => [
        'param3' => 'value3',
        'param4' => 'value4',
    ],
];

Appsignal::setParams($params);

setPayload

Legt den Payload der eingehenden Anfrage fest. Das $payload muss ein Wert sein, der als JSON serialisiert werden kann.
PHP
$payload = [
    'key1' => 'value1',
    'key2' => 'value2',
    'nested' => [
        'key3' => 'value3',
        'key4' => 'value4',
    ],
];

Appsignal::setPayload($payload);

ActiveSpan

Appsignal::instrument() gibt eine ActiveSpan-Instanz zurück, die alle Standard-OpenTelemetry-API-SpanInterface-Methoden durchreicht. Wenn Sie Low-Level-Kontrolle über den Span benötigen, verwenden Sie diese Methoden, um Daten oder Events direkt an ihn anzuhängen.
PHP
$activeSpan = Appsignal::instrument('render-report');
$activeSpan->setAttribute('report.type', 'pdf');
$activeSpan->addEvent('rendering-started');

someExpensiveMethod();

$activeSpan->end();