Passer au contenu principal
AppSignal prend en charge de nombreuses gems prêtes à l’emploi et ne nécessite pas d’instrumentation supplémentaire pour signaler les données d’erreur et de performance. Pour les scripts personnalisés et les bibliothèques que nous ne prenons pas en charge, vous pouvez ajouter une surveillance en suivant ce guide.

Surveillance des scripts

Un échantillon AppSignal est composé de deux éléments : une transaction et des événements. Avant de signaler des événements avec nos assistants d’instrumentation, vous devez d’abord créer une transaction. Utilisez l’assistant Appsignal.monitor pour créer une transaction et la rendre active pendant la durée du bloc donné. L’assistant monitor signalera le bloc de code instrumenté sous forme de mesures de performance répertoriées dans la section Performance de l’interface utilisateur AppSignal, regroupées par nom d’action. Il suivra la durée du bloc et signalera les exceptions qui s’y produisent.
class CronJobScript
  def call
    Appsignal.monitor(
      :namespace => "cron",
      :action    => "CronJobScript#call"
    ) do
      # Your code
    end
  end
end
L’assistant monitor accepte deux arguments par mots-clés :
  • namespace (Facultatif) : personnalise le namespace de la transaction. La valeur par défaut est « web ».
  • action (Obligatoire) : nous regroupons les échantillons du script par ce nom d’action pour la création d’incidents et les notifications. Sans nom d’action, aucune information sur le bloc surveillé n’est signalée, car nous ne savons pas comment regrouper les données.

Définir le nom de l’action ultérieurement

L’argument action de l’assistant Appsignal.monitor peut être laissé nil ou explicitement défini sur :set_later, mais uniquement si l’assistant Appsignal.set_action est toujours appelé à l’intérieur du bloc pour définir le nom de l’action. Sans nom d’action, aucune donnée n’est signalée concernant le bloc instrumenté. Cette méthode de définition du nom de l’action peut être utile si le nom de l’action ne peut être déterminé que lors d’une étape de traitement à l’intérieur du bloc.
class CronJobScript
  def call
    Appsignal.monitor(
      :action => :set_later
    ) do
      # Your code

      # Set action name later
      Appsignal.set_action("My action name")
    end
  end
end

Événements d’instrumentation

Par défaut, la gem Ruby signalera les événements des intégrations prises en charge. Ces événements apparaîtront dans la chronologie des événements. Utilisez nos assistants d’instrumentation pour ajouter vos propres événements à la chronologie des événements. Cela crée une répartition plus détaillée de ce qui se passe à l’intérieur du bloc surveillé.
class CronJobScript
  def call
    Appsignal.monitor(
      :namespace => "cron",
      :action    => "CronJobScript#call"
    ) do
      Appsignal.instrument "fetch.plans" do
        # Complex part of fetching payment plans
      end

      Appsignal.instrument "send.invoices" do
        # Complex part of sending invoices
      end
    end
  end
end

Obligation d’arrêt

Pour les scripts exécutés sur des hôtes de courte durée, il est nécessaire d’arrêter la gem Ruby AppSignal avant que le script ne se termine. Cela garantit qu’elle signale les données du script à AppSignal avant que l’hôte ne s’éteigne. Ce comportement n’est nécessaire que dans des scénarios tels que :
  • Lorsqu’une tâche planifiée (un cron job) est exécutée par un service d’hébergement.
  • Lorsqu’un script est exécuté sur un conteneur qui démarre pour exécuter ce script et s’arrête lorsque le script se termine.
  • Lorsqu’un script est exécuté sur un runner Heroku, ou des fournisseurs d’hébergement similaires.
Il n’est pas nécessaire d’arrêter la gem Ruby AppSignal si l’hôte sur lequel le script est démarré continue de fonctionner après la fin du script. AppSignal est arrêté automatiquement lorsque le script se termine et qu’un conteneur ou un environnement d’hébergement comme Heroku est détecté. Ce comportement est contrôlé par l’option enable_at_exit_hook. Assurez-vous que cette option est définie sur true pour les scripts qui nécessitent l’arrêt d’AppSignal, si elle n’est pas détectée automatiquement. Il peut être nécessaire d’ajouter un appel sleep supplémentaire de quelques secondes pour s’assurer qu’il y a suffisamment de temps pour envoyer toutes les données. Utilisez l’exemple d’utilisation at_exit du code ci-dessous si nécessaire.
# This block is called after all tasks are ran
# Ensures the AppSignal agent has enough time to send the data to the AppSignal servers
at_exit { sleep 10 }

# Your script code

Assistant Monitor and stop

L’assistant Appsignal.monitor_and_stop est déprécié au profit de l’option enable_at_exit_hook, qui garantit que Appsignal.stop est appelé lorsque le processus se termine, et non chaque fois que l’assistant Appsignal.monitor_and_stop est appelé. Son utilisation est décrite dans la section ci-dessus.N’utilisez cet assistant que dans les versions de la gem Ruby qui ne prennent pas en charge l’option enable_at_exit_hook.
Si votre processus exécute toujours une seule tâche/un seul job et se termine immédiatement après, vous pouvez utiliser l’assistant Appsignal.monitor_and_stop. Cela garantira qu’AppSignal s’arrête automatiquement après l’exécution du bloc.
# This block is called right before the script exits
# Ensures the AppSignal agent has enough time to send the data to the AppSignal servers
at_exit do
  sleep 10
end

class CronJobScript
  def call
    Appsignal.monitor_and_stop(
      :namespace => "cron",
      :action    => "CronJobScript#call"
    ) do
      # Your code
    end
  end
end