Zum Hauptinhalt springen
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.
# config.ru
require "appsignal"                           # Load AppSignal

Appsignal.start                               # Start the AppSignal integration

# Add the Rack EventMiddleware first
use Appsignal::Rack::EventMiddleware
# Add the Rack InstrumentationMiddleware
use Appsignal::Rack::InstrumentationMiddleware

# Load your app with a require statement here, like
require_relative "app"

# Add other middleware here if needed

# Finally, run the app
use MyApp.run
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 Sample.
  • 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 Sample.
  • 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.
# config.ru
# Load and configure AppSignal
require "appsignal"                           # Load AppSignal

Appsignal.config = Appsignal::Config.new(
  File.expand_path("../", __FILE__),          # Application root path
  ENV["RACK_ENV"],                            # Application environment
)
Appsignal.start                               # Start the AppSignal integration
Appsignal.start_logger                        # Start logger

# Load your app with a require statement here, like
require_relative "app"

# Add the GenericInstrumentation middleware
use Appsignal::Rack::GenericInstrumentation

# Add other middleware here if needed

# Finally, run the app
use MyApp.run
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.
# app.rb
require "rack"

# Example pure-Rack app
class MyApp
  def call(env)
    case [env["REQUEST_METHOD"], env["PATH_INFO"]]
    when ["GET", "/"]
      Appsignal.set_action("GET /") # Action name set here
      body = <<~BODY
        <h1>Rack example app</h1>

        <ul>
          <li><a href="/slow">Slow request</a></li>
          <li><a href="/error">Error request</a></li>
        </ul>
      BODY
      [200, {"Content-Type" => "text/html"}, [body]]
    when ["GET", "/slow"]
      Appsignal.set_action("GET /slow") # Action name set here
      sleep 1
      [200, {"Content-Type" => "text/plain"}, ["Slow response"]]
    when ["GET", "/error"]
      Appsignal.set_action("GET /error") # Action name set here
      raise "uh oh"
    else
      Appsignal.set_action("NotFound") # Action name set here
      [404, {"Content-Type" => "text/plain"}, ["Page not found"]]
    end
  end
end