Ein Span ist der Name des Objekts, das wir verwenden, um Daten über einen Fehler und seinen umgebenden Kontext zu erfassen. Er ist so gestaltet, dass er dem Span aus der OpenTelemetry-Standardspezifikation ähnelt, aber nicht exakt mit ihm übereinstimmt.
Einen neuen Span erstellen
Ein Span kann durch den Aufruf von appsignal.createSpan() erstellt werden, wodurch ein neues Span-Objekt mit allen Standardoptionen initialisiert wird, die Sie bei der Initialisierung des Appsignal-Objekts übergeben haben.
const span = appsignal.createSpan();
Die Methode createSpan() kann auch eine Funktion als Parameter annehmen, sodass Sie die Daten des Span gleichzeitig mit dessen Erstellung definieren können.
const span = appsignal.createSpan((span) => {
return span.setTags({
tag: "value",
});
});
Spans können nicht verschachtelt werden, und es können auch nicht mehrere Spans gleichzeitig an appsignal.send() übergeben werden. Wir empfehlen die Verwendung von Promise.all für gleichzeitige send-Vorgänge.
const span1 = appsignal.createSpan();
const span2 = appsignal.createSpan();
Promise.all([appsignal.send(span1), appsignal.send(span2)]);
Einen Span aktualisieren
Nachdem ein Span erstellt wurde, können Sie ihm mithilfe von Methoden des Span-Objekts Daten hinzufügen:
const span = appsignal.createSpan();
span.setTags({ tag: "value" });
console.log(span.serialize().tags); // { tag: "value" }
Jede Methode, die den Span ändert, gibt this zurück, sodass Sie Methoden verketten können:
const span = appsignal.createSpan();
span.setTags({ tag: "value" }).setError(new Error("test error"));
console.log(span.serialize().tags); // { tag: "value" }
console.log(span.serialize().error); // { name: "Error", message: "test error", backtrace: [...] }
span.setAction(name: string)
Setzt die action des aktuellen Span. Die action darf niemals ein leerer String sein – sie kann entweder undefined oder ein nicht leerer String sein. Ein Action-Name wird verwendet, um den Ort einer bestimmten Stichprobe von Fehlern und Performance-Problemen zu identifizieren.
span.setNamespace(name: string)
Setzt den namespace des aktuellen Span. Namespaces sind eine Möglichkeit, Fehler-Incidents, Performance-Incidents und Host-Metriken in Ihrer App zu gruppieren.
span.setError(error: Error | object)
Setzt den error des aktuellen Span. Das Error-Objekt hat eine Eigenschaft name, message und backtrace. Achten Sie darauf, als name nur etwas zu verwenden, das den Fehlertyp beschreibt. AppSignal gruppiert die Fehler anhand dieses Namens. In die message können Sie alles aufnehmen, was Sie möchten.
Wenn ein Error-Objekt an die Methode setError übergeben wird, wird die stack-Eigenschaft normalisiert und in ein Array von Strings transformiert, wobei jeder String eine Zeile im Stacktrace darstellt. Für Konsistenz mit unseren anderen Integrationen wird stack in backtrace umbenannt.
Fügt dem aktuellen Span tags hinzu. Die aktuellen tags werden mit dem als Parameter übergebenen tags-Objekt zusammengeführt.
span.setParams(params: object)
Fügt dem aktuellen Span params hinzu. Die aktuellen params werden mit dem als Parameter übergebenen params-Objekt zusammengeführt.
Wenn Sie eine Version vor 1.3.28 verwenden, darf das params-Objekt keine
verschachtelten Objekte enthalten.
span.serialize()
Gibt den Inhalt eines Span als Objekt zurück.
Einen Span an AppSignal senden
Wenn Sie mit dem Hinzufügen von Daten zum Span fertig sind, kann er an appsignal.send() übergeben werden, um an unsere API gesendet zu werden.
const span = appsignal.createSpan((span) => {
return span.setError(new Error("test error"));
});
appsignal.send(span);
Die Methode send() unterscheidet sich von der Methode sendError(), da sie es ermöglicht, einen Span als Parameter zu übergeben, der entweder sofort an die API gesendet oder bei einem Netzwerkfehler der Warteschlange hinzugefügt wird, um später erneut versucht zu werden.
Sobald der Span an appsignal.send() übergeben wurde, werden alle Hooks in der folgenden Reihenfolge auf den Span angewendet:
- Decorators
- Optionale
tags- oder namespace-Argumente an appsignal.send()
- Overrides
Über die Wiederholungs-Warteschlange
Wenn aus irgendeinem Grund das Pushen eines Fehlers an die API fehlschlägt (z. B. wenn die Netzwerkverbindung nicht funktioniert), wird das Span-Objekt, zu dem er gehört, in die Wiederholungs-Warteschlange gestellt. Standardmäßig werden Anfragen 5 Mal mit exponentiellem Backoff wiederholt. Wenn die Anfrage erfolgreich ist, wird der entsprechende Span aus der Warteschlange entfernt. Sobald das Wiederholungslimit erreicht ist, werden alle in der Warteschlange verbleibenden Spans verworfen.
Für die Wiederholungs-Warteschlange ist derzeit kein Caching implementiert,
was bedeutet, dass ein Span, der sich in der Warteschlange befindet, wenn der Benutzer
von Ihrer Anwendung wegnavigiert, ebenfalls verworfen wird.