> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sondes par minute

Les sondes par minute sont un mécanisme permettant d'envoyer périodiquement des [métriques personnalisées](/metrics/custom) à 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.

<Tip>
  **Remarque** : Nous recommandons d'utiliser le paquet AppSignal pour Elixir `1.10.1` ou supérieur
  lors de l'utilisation de cette fonctionnalité.
</Tip>

## Utilisation

Les sondes par minute permettent au paquet AppSignal pour Elixir de collecter des [métriques personnalisées](/metrics/custom) par défaut pour la ErlangVM et des métriques spécifiques à l'application en [créant votre propre sonde](#creating-probes).

### 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](/metrics/custom#metric-tags) 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](/elixir/configuration/options#option-enable_minutely_probes) 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`](/elixir/configuration/options#option-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`](/elixir/configuration/options#option-enable_minutely_probes). La valeur par défaut est `true`.

## Créer des sondes

Si vous voulez suivre plus de [métriques personnalisées](/metrics/custom) 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](#anonymous-function), ou une [fonction basée sur un module](#module-based-function).

### 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.

<CodeGroup>
  ```elixir Elixir theme={null}
  Appsignal.Probes.register(:my_probe, fn ->
    Appsignal.set_gauge("database_size", 10)
  end)
  ```
</CodeGroup>

### 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.

<CodeGroup>
  ```elixir Elixir theme={null}
  # lib/my_app/probes/my_probe.ex
  defmodule MyApp.MyProbe do
    def call do
      Appsignal.set_gauge("database_size", 10)
    end
  end
  ```
</CodeGroup>

Vous pouvez maintenant enregistrer cette sonde dans la fonction start de votre app OTP.

<CodeGroup>
  ```elixir Elixir theme={null}
  Appsignal.Probes.register(:my_probe, &MyApp.MyProbe.call/0)
  ```
</CodeGroup>

### 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`.

<CodeGroup>
  ```elixir Elixir theme={null}
  Appsignal.Probes.register(:stateful_probe, fn minutes ->
    Appsignal.set_gauge("uptime_minutes", minutes)
    minutes + 1
  end, 0)
  ```
</CodeGroup>

Ou, sous forme de fonction basée sur un module :

<CodeGroup>
  ```elixir Elixir theme={null}
  # 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
  ```
</CodeGroup>

Que vous pouvez ensuite enregistrer comme :

<CodeGroup>
  ```elixir Elixir theme={null}
  Appsignal.Probes.register(:stateful_probe, &MyApp.MyProbe.call/1, 0)
  ```
</CodeGroup>

## 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](/support/debugging#logs)) et pour [remplacer une sonde existante](#overriding-default-probes).
* `probe` - C'est l'un des [types de sondes pris en charge](#creating-probes) 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 :

<CodeGroup>
  ```elixir Elixir theme={null}
  # 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
  ```
</CodeGroup>

## Remplacer les sondes par défaut

AppSignal est livré avec des sondes par défaut pour certaines [intégrations](/elixir/integrations/). 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é.

<CodeGroup>
  ```elixir Elixir theme={null}
  # lib/my_app/application.ex

  Appsignal.Probes.register(:erlang, fn() ->
    # Do things
  end)
  ```
</CodeGroup>

Le remplacement de sondes journalisera un message de débogage dans le [fichier appsignal.log](/support/debugging#logs), ce qui peut aider à détecter si une sonde est correctement remplacée.
