Passer au contenu principal
Pour instrumenter les applications Rack, AppSignal fournit un middleware d’instrumentation Rack. Si vous utilisez l’un des frameworks Rack pris en charge comme Rails, Sinatra, Hanami, Grape ou Padrino, nous vous recommandons d’utiliser ces instrumentations à la place.

Ajouter le middleware d’instrumentation

Vous utilisez une gem AppSignal Ruby plus ancienne ? Suivez notre guide hérité.
Pour intégrer AppSignal dans une application Rack, nous devons d’abord charger, configurer et démarrer AppSignal. Ensuite, instrumentez l’application Rack en ajoutant nos middlewares Rack EventMiddleware et InstrumentationMiddleware à la pile de middlewares. Cette documentation explique comment procéder dans le fichier config.ru de votre application.
# 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
Assurez-vous que les middlewares EventMiddleware et InstrumentationMiddleware sont enregistrés dans la pile de middlewares de l’application aussi tôt que possible. Plus ces middlewares sont enregistrés tôt, plus l’exécution de la requête instrumentée par les middlewares sera importante. Si d’autres middlewares sont enregistrés au préalable, nos middlewares n’instrumenteront pas ces autres middlewares. Après avoir ajouté les EventMiddleware et InstrumentationMiddleware à la pile de middlewares de votre application, l’action doit être définie pour chaque route de votre application dans AppSignal. Sans nom d’action pour regrouper les requêtes, le middleware d’événements ne signalera pas les informations de requête. Pour plus d’informations sur le fonctionnement de votre application Rack, nous recommandons d’ajouter une instrumentation supplémentaire aux endpoints de l’application.

Le middleware d’événements Rack

Nous recommandons d’ajouter notre middleware d’événements Rack à toutes les applications Rack. Ce middleware garantira que nous suivons Le middleware d’événements Rack AppSignal présente les fonctionnalités suivantes :
  • Instrumentation de la requête et enregistrement d’un événement process_request.rack.
  • Signalement des exceptions qui se produisent dans l’application et le middleware.
  • Suivi du code de statut de la réponse comme tag response_status sur l’échantillon.
  • Suivi du code de statut de la réponse comme métrique response_status, avec les tags namespace et status.

Le middleware d’instrumentation Rack

Nous recommandons qu’en plus du Appsignal::Rack::EventMiddleware, le AppSignal::Rack::InstrumentationMiddleware soit ajouté à l’application. Ce middleware complète l’instrumentation du middleware d’événements en ajoutant des tags pour le chemin et la méthode de requête, ainsi qu’en suivant la gestion du corps de réponse et les opérations de fermeture du corps de réponse. Le middleware d’instrumentation présente les fonctionnalités suivantes :
  • Instrumentation de la requête et enregistrement d’un événement process_request.rack.
  • Signalement des exceptions qui se produisent dans l’application.
  • Suivi du chemin et de la méthode de requête comme tags sur l’échantillon.
  • Instrumentation de la gestion du corps de réponse et enregistrement d’un événement process_response_body.rack pour cette opération.
  • Instrumentation de la fermeture du corps de réponse et enregistrement d’un événement close_response_body.rack pour cette opération.

Utilisation du middleware d’instrumentation hérité

Le middleware GenericInstrumentation a été déprécié dans la gem Ruby 3.10.0. Veuillez utiliser le nouveau guide à la place.
Pour intégrer AppSignal dans une application Rack, nous devons d’abord charger, configurer et démarrer AppSignal. Ensuite, instrumentez l’application Rack en ajoutant notre middleware Rack GenericInstrumentation à la pile de middlewares. Cette documentation explique comment procéder dans le fichier config.ru de votre application.
# 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
Assurez-vous que les middlewares EventMiddleware et InstrumentationMiddleware sont enregistrés dans la pile de middlewares de l’application aussi tôt que possible. Plus ces middlewares sont enregistrés tôt, plus l’exécution de la requête instrumentée par les middlewares sera importante. Si d’autres middlewares sont enregistrés au préalable, nos middlewares n’instrumenteront pas ces autres middlewares. Après avoir ajouté les EventMiddleware et InstrumentationMiddleware à la pile de middlewares de votre application, l’action doit être définie pour chaque route de votre application dans AppSignal. Sans nom d’action pour regrouper les requêtes, le middleware d’événements ne signalera pas les informations de requête. Pour plus d’informations sur le fonctionnement de votre application Rack, nous recommandons d’ajouter une instrumentation supplémentaire aux endpoints de l’application.

Définition du nom d’action

Définissez un nom d’action sur la transaction AppSignal pour une requête afin que nous puissions regrouper les endpoints dans nos incidents et métriques. Nous recommandons d’utiliser un nom d’action statique par endpoint, comme GET /blog, POST /users, PUT /users/:id, etc. Pour définir un nom d’action pour une requête, appelez l’assistant Appsignal.set_action depuis l’application.
N’utilisez pas le chemin de la requête de la route comme nom d’action si le chemin comporte des segments dynamiques. L’utilisation de chemins de requête réels pour les noms d’actions rompt notre regroupement de requêtes en créant des incidents uniques pour chaque chemin de requête possible.
# 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