Skip to main content
Um Rack-Anwendungen zu instrumentieren, stellt AppSignal eine Rack-Instrumentation-Middleware bereit. Wenn Sie eines der unterstützten Rack-Frameworks wie Rails, Sinatra, Hanami, Grape oder Padrino verwenden, empfehlen wir, stattdessen diese Instrumentationen zu verwenden.

Instrumentation-Middleware hinzufügen

Verwenden Sie ein älteres AppSignal-Ruby-Gem? Folgen Sie unserer Legacy-Anleitung.
Um AppSignal in eine Rack-Anwendung zu integrieren, müssen wir zunächst AppSignal laden, konfigurieren und starten. Instrumentieren Sie dann die Rack-App, indem Sie unsere Rack-EventMiddleware und InstrumentationMiddleware zum Middleware-Stack hinzufügen. Diese Dokumentation erklärt, wie Sie dies in der config.ru-Datei Ihrer Anwendung tun.
Stellen Sie sicher, dass die EventMiddleware und die InstrumentationMiddleware so früh wie möglich im Middleware-Stack der Anwendung registriert werden. Je früher diese Middlewares registriert sind, desto mehr Request-Laufzeit instrumentiert die Middleware. Wenn andere Middlewares zuvor registriert werden, instrumentiert unsere Middleware diese anderen Middlewares nicht. Nachdem Sie die EventMiddleware und die InstrumentationMiddleware zum Middleware-Stack Ihrer App hinzugefügt haben, muss die Action für jede Route in Ihrer App in AppSignal gesetzt werden. Ohne einen Action-Namen, der Anfragen gruppiert, meldet die Event-Middleware keine Anfrage-Informationen. Für tiefere Einblicke in den Betrieb Ihrer Rack-Anwendung empfehlen wir, zusätzliche Instrumentation zu den Endpunkten der Anwendung hinzuzufügen.

Die Rack-Event-Middleware

Wir empfehlen, unsere Rack-Event-Middleware zu allen Rack-Anwendungen hinzuzufügen. Diese Middleware stellt sicher, dass wir Folgendes erfassen: Die AppSignal-Rack-Event-Middleware bietet die folgenden Funktionen:
  • Instrumentation des Requests und Aufzeichnung eines process_request.rack-Events.
  • Meldung von Ausnahmen, die in der App und in Middlewares auftreten.
  • Erfassung des Response-Statuscodes als Tag response_status im Trace.
  • Erfassung des Response-Statuscodes als Metrik response_status mit den Tags namespace und status.

Die Rack-Instrumentation-Middleware

Wir empfehlen, zusätzlich zur Appsignal::Rack::EventMiddleware auch die AppSignal::Rack::InstrumentationMiddleware zur App hinzuzufügen. Diese Middleware ergänzt die Instrumentation der Event-Middleware, indem sie Tags für den Request-Pfad und die Request-Methode hinzufügt sowie die Verarbeitung und das Schließen des Response-Bodys verfolgt. Die Instrumentation-Middleware bietet die folgenden Funktionen:
  • Instrumentation des Requests und Aufzeichnung eines process_request.rack-Events.
  • Meldung von Ausnahmen, die in der App auftreten.
  • Erfassung des Request-Pfads und der Request-Methode als Tags im Trace.
  • Instrumentation der Verarbeitung des Response-Bodys und Aufzeichnung eines process_response_body.rack-Events für diese Operation.
  • Instrumentation des Schließens des Response-Bodys und Aufzeichnung eines close_response_body.rack-Events für diese Operation.

Verwendung der Legacy-Instrumentation-Middleware

Die GenericInstrumentation-Middleware wurde in Ruby Gem 3.10.0 als veraltet markiert. Bitte verwenden Sie stattdessen die neue Anleitung.
Um AppSignal in eine Rack-Anwendung zu integrieren, müssen wir zunächst AppSignal laden, konfigurieren und starten. Instrumentieren Sie dann die Rack-App, indem Sie unsere Rack-GenericInstrumentation-Middleware zum Middleware-Stack hinzufügen. Diese Dokumentation erklärt, wie Sie dies in der config.ru-Datei Ihrer Anwendung tun.
Stellen Sie sicher, dass die EventMiddleware und die InstrumentationMiddleware so früh wie möglich im Middleware-Stack der Anwendung registriert werden. Je früher diese Middlewares registriert sind, desto mehr Request-Laufzeit instrumentiert die Middleware. Wenn andere Middlewares zuvor registriert werden, instrumentiert unsere Middleware diese anderen Middlewares nicht. Nachdem Sie die EventMiddleware und die InstrumentationMiddleware zum Middleware-Stack Ihrer App hinzugefügt haben, muss die Action für jede Route in Ihrer App in AppSignal gesetzt werden. Ohne einen Action-Namen, der Anfragen gruppiert, meldet die Event-Middleware keine Anfrage-Informationen. Für tiefere Einblicke in den Betrieb Ihrer Rack-Anwendung empfehlen wir, zusätzliche Instrumentation zu den Endpunkten der Anwendung hinzuzufügen.

Action-Name setzen

Setzen Sie einen Action-Namen auf die AppSignal-Transaktion für eine Anfrage, damit wir Endpunkte in unseren Issues und Metriken gruppieren können. Wir empfehlen, pro Endpunkt einen statischen Action-Namen zu verwenden, wie GET /blog, POST /users, PUT /users/:id usw. Um einen Action-Namen für eine Anfrage zu setzen, rufen Sie den Helper Appsignal.set_action aus der App auf.
Verwenden Sie nicht den Request-Pfad der Route als Action-Namen, wenn der Pfad dynamische Segmente enthält. Die Verwendung echter Request-Pfade als Action-Namen bricht unsere Gruppierung der Anfragen, indem für jeden möglichen Request-Pfad einzigartige Issues erzeugt werden.

Span-Attribute

Nur im Collector-Modus: Dies gilt, wenn AppSignal für Ruby im Collector-Modus läuft. Andernfalls hat es keine Auswirkung.
Der Span des Requests enthält:
  • http.request.method — die Request-Methode.
  • url.scheme, url.path und url.query — die angefragte Adresse.
  • http.response.status_code — der Status, mit dem Ihre Anwendung geantwortet hat.
Ein Span für einen Request, der einen Fehler ausgelöst hat, enthält außerdem error.type, die Klasse des Fehlers.

Distributed tracing

Nur im Collector-Modus: Dies gilt, wenn AppSignal für Ruby im Collector-Modus läuft. Andernfalls hat es keine Auswirkung.
Eine Anfrage, die mit einem traceparent-Request-Header eintrifft, setzt den darin benannten Trace fort. Die Anfrage erscheint innerhalb des Trace des aufrufenden Service, unter der Anfrage, die sie ausgelöst hat. Sie können eine langsame Anfrage von diesem Service aus in diese Anwendung hinein verfolgen, ohne den Trace zu wechseln. Die HTTP-Clients, die AppSignal unterstützt, starten den Trace. Eine Anfrage ohne den Header startet einen neuen.