Passer au contenu principal
Les sondes par minute sont un mécanisme permettant d’envoyer périodiquement des métriques personnalisées à AppSignal. C’est un système inclus par défaut dans le paquet AppSignal pour Elixir. Au début de chaque minute, les sondes par minute sont déclenchées pour collecter des métriques puis mises en veille jusqu’à la minute suivante. Par défaut, le paquet AppSignal pour Elixir active une sonde pour la ErlangVM.
Remarque : Nous recommandons d’utiliser le paquet AppSignal pour Elixir 1.10.1 ou supérieur lors de l’utilisation de cette fonctionnalité.

Utilisation

Les sondes par minute permettent au paquet AppSignal pour Elixir de collecter des métriques personnalisées par défaut pour la ErlangVM et des métriques spécifiques à l’application en créant votre propre sonde.

Instances multiples

Une fois activé, le système de sondes par minute s’exécute sur chaque instance d’une application. Cela signifie que si une sonde signale des métriques sans une forme de tag différenciant, les métriques globales peuvent être écrasées par des métriques au niveau de l’instance. Pour remédier à cela, nous suggérons de taguer vos métriques avec le nom d’hôte ou autre chose d’unique pour chaque instance. Par exemple, la sonde ErlangVM tague les métriques avec le nom d’hôte par défaut. Vous pouvez également désactiver les sondes par minute pour toutes les instances sauf une, sur laquelle le processus de sondes par minute s’exécute. Nous suggérons d’utiliser la variable d’environnement APPSIGNAL_ENABLE_MINUTELY_PROBES pour ne l’activer que sur l’instance de votre choix.

Configuration

Les sondes par minute sont configurées à l’aide de l’option de configuration enable_minutely_probes. La valeur par défaut est true.

Créer des sondes

Si vous voulez suivre plus de métriques personnalisées depuis votre application que ne le font nos sondes par défaut, vous pouvez ajouter votre/vos propre(s) sonde(s). Une sonde par minute AppSignal peut être une fonction anonyme, ou une fonction basée sur un module.

Fonction anonyme

Le type de sonde le plus simple à enregistrer. Si vous n’avez pas de dépendances pour votre sonde, c’est la méthode privilégiée.
Appsignal.Probes.register(:my_probe, fn ->
  Appsignal.set_gauge("database_size", 10)
end)

Fonction basée sur un module

Une fonction basée sur un module peut être utile si vous avez une sonde plus complexe, ou une sonde qui a des dépendances.
# lib/my_app/probes/my_probe.ex
defmodule MyApp.MyProbe do
  def call do
    Appsignal.set_gauge("database_size", 10)
  end
end
Vous pouvez maintenant enregistrer cette sonde dans la fonction start de votre app OTP.
Appsignal.Probes.register(:my_probe, &MyApp.MyProbe.call/0)

Sondes avec état

À partir de la version 2.2.8 du paquet AppSignal pour Elixir, les sondes peuvent transmettre un état entre les exécutions. Si votre sonde prend un argument, la valeur de retour de la dernière exécution sera passée comme valeur de cet argument lors de l’exécution suivante. Un état initial à utiliser pour la première exécution de la sonde peut être fourni comme troisième argument à Appsignal.Probes.register. S’il n’est pas fourni, l’état initial sera nil.
Appsignal.Probes.register(:stateful_probe, fn minutes ->
  Appsignal.set_gauge("uptime_minutes", minutes)
  minutes + 1
end, 0)
Ou, sous forme de fonction basée sur un module :
# lib/my_app/probes/my_probe.ex
defmodule MyApp.MyProbe do
  def call(minutes) do
    Appsignal.set_gauge("uptime_minutes", minutes)
    minutes + 1
  end
end
Que vous pouvez ensuite enregistrer comme :
Appsignal.Probes.register(:stateful_probe, &MyApp.MyProbe.call/1, 0)

Enregistrer des sondes

Les sondes peuvent être enregistrées avec la méthode register du module Appsignal.Probes. Cette méthode accepte trois arguments.
  • key - C’est la clé/le nom de la sonde. Elle sera utilisée pour identifier la sonde au cas où une erreur se produirait lors de l’exécution de la sonde (qui sera journalisée dans le fichier appsignal.log) et pour remplacer une sonde existante.
  • probe - C’est l’un des types de sondes pris en charge qui devrait être appelé chaque minute pour collecter des métriques.
  • state - C’est l’état initial qui sera passé à votre sonde. Si votre sonde ne prend pas d’état comme argument, alors cet argument n’a aucun effet. Il s’agit d’un argument optionnel, et sa valeur par défaut est nil.
Pour ajouter une sonde, enregistrez-la dans la fonction start/2 de votre application, juste avant le démarrage du superviseur. Dans une application Phoenix, cela ressemblera à ceci :
# lib/my_app/application.ex
def start(_type, _args) do
  children = [
    MyApp.Repo,
    MyAppWeb.Endpoint,
  ]

  Appsignal.Probes.register(:my_probe, &MyProbe.call/0)

  opts = [strategy: :one_for_one, name: Weekmenu.Supervisor]
  Supervisor.start_link(children, opts)
end

Remplacer les sondes par défaut

AppSignal est livré avec des sondes par défaut pour certaines intégrations. Si, pour une raison quelconque, cette sonde ne fonctionne pas correctement ou nécessite une configuration supplémentaire pour votre cas d’utilisation, vous pouvez remplacer la sonde par défaut en enregistrant une nouvelle sonde avec la même clé.
# lib/my_app/application.ex

Appsignal.Probes.register(:erlang, fn() ->
  # Do things
end)
Le remplacement de sondes journalisera un message de débogage dans le fichier appsignal.log, ce qui peut aider à détecter si une sonde est correctement remplacée.