Naar hoofdinhoud gaan
Om Rack-applicaties te instrumenteren, biedt AppSignal een Rack-instrumentatie-middleware. Als u een van de ondersteunde Rack-frameworks gebruikt, zoals Rails, Sinatra, Hanami, Grape, of Padrino, raden we aan om in plaats daarvan die instrumentaties te gebruiken.

De instrumentatie-middleware toevoegen

Gebruikt u een oudere AppSignal Ruby-gem? Volg onze legacy handleiding.
Om AppSignal te integreren in een Rack-applicatie, moeten we eerst AppSignal laden, configureren en starten. Vervolgens instrumenteert u de Rack-app door onze Rack EventMiddleware en InstrumentationMiddleware aan de middleware-stack toe te voegen. In deze documentatie wordt uitgelegd hoe u dit doet in het config.ru-bestand van uw applicatie.
# 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
Zorg ervoor dat de EventMiddleware en InstrumentationMiddleware zo vroeg mogelijk in de middleware-stack van de applicatie worden geregistreerd. Hoe eerder deze middleware wordt geregistreerd, hoe meer request-runtime de middleware zal instrumenteren. Als er eerder andere middleware wordt geregistreerd, instrumenteert onze middleware deze andere middleware niet. Nadat u de EventMiddleware en InstrumentationMiddleware aan de middleware-stack van uw app heeft toegevoegd, moet de actie voor elke route in uw app worden ingesteld in AppSignal. Zonder actienaam om requests te groeperen, rapporteert de event-middleware geen request-informatie. Voor meer inzicht in de werking van uw Rack-applicatie raden we aan aanvullende instrumentatie toe te voegen aan de endpoints van de applicatie.

De Rack-event-middleware

We raden aan om onze Rack-event-middleware aan alle Rack-applicaties toe te voegen. Deze middleware zorgt ervoor dat we het volgende bijhouden: De AppSignal Rack-event-middleware heeft de volgende functies:
  • Instrumentatie van de request en het registreren van een process_request.rack-event.
  • Rapporteren van excepties die in de app en middleware optreden.
  • Bijhouden van de response-statuscode als de response_status-tag op het sample.
  • Bijhouden van de response-statuscode als de response_status-metriek, met de tags namespace en status.

De Rack-instrumentatie-middleware

We raden aan om naast de Appsignal::Rack::EventMiddleware ook de AppSignal::Rack::InstrumentationMiddleware aan de app toe te voegen. Deze middleware vult de instrumentatie van de event-middleware aan door tags toe te voegen voor het request-pad en de request-methode, en door responsbody-afhandeling en het sluiten van de responsbody bij te houden. De instrumentatie-middleware heeft de volgende functies:
  • Instrumentatie van de request en het registreren van een process_request.rack-event.
  • Rapporteren van excepties die in de app optreden.
  • Bijhouden van het request-pad en de request-methode als tags op het sample.
  • Instrumentatie van de responsbody-afhandeling en het registreren van een process_response_body.rack-event voor deze operatie.
  • Instrumentatie van het sluiten van de responsbody en het registreren van een close_response_body.rack-event voor deze operatie.

De legacy instrumentatie-middleware gebruiken

De GenericInstrumentation-middleware is verouderd verklaard in Ruby-gem 3.10.0. Gebruik in plaats daarvan de nieuwe handleiding.
Om AppSignal te integreren in een Rack-applicatie, moeten we eerst AppSignal laden, configureren en starten. Vervolgens instrumenteert u de Rack-app door onze Rack GenericInstrumentation-middleware aan de middleware-stack toe te voegen. In deze documentatie wordt uitgelegd hoe u dit doet in het config.ru-bestand van uw applicatie.
# 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
Zorg ervoor dat de EventMiddleware en InstrumentationMiddleware zo vroeg mogelijk in de middleware-stack van de applicatie worden geregistreerd. Hoe eerder deze middleware wordt geregistreerd, hoe meer request-runtime de middleware zal instrumenteren. Als er eerder andere middleware wordt geregistreerd, instrumenteert onze middleware deze andere middleware niet. Nadat u de EventMiddleware en InstrumentationMiddleware aan de middleware-stack van uw app heeft toegevoegd, moet de actie voor elke route in uw app worden ingesteld in AppSignal. Zonder actienaam om requests te groeperen, rapporteert de event-middleware geen request-informatie. Voor meer inzicht in de werking van uw Rack-applicatie raden we aan aanvullende instrumentatie toe te voegen aan de endpoints van de applicatie.

De actienaam instellen

Stel een actienaam in op de AppSignal-transactie voor een request, zodat we endpoints kunnen groeperen in onze issues en metrieken. We raden aan om per endpoint een statische actienaam te gebruiken, zoals GET /blog, POST /users, PUT /users/:id, etc. Om een actienaam voor een request in te stellen, roept u de Appsignal.set_action-helper aan vanuit de app.
Gebruik het request-pad van de route niet als actienaam als het pad dynamische segmenten bevat. Het gebruik van echte request-paden voor actienamen verstoort onze request-groepering door unieke issues voor elk mogelijk request-pad aan te maken.
# 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