Zum Hauptinhalt springen
Minütliche Probes sind ein Mechanismus, um periodisch benutzerdefinierte Metriken an AppSignal zu senden. Dieses System ist standardmäßig im AppSignal-Elixir-Paket enthalten. Zu Beginn jeder Minute werden die minütlichen Probes ausgelöst, um Metriken zu erfassen, und dann bis zur nächsten Minute pausiert. Standardmäßig aktiviert das AppSignal-Elixir-Paket eine Probe für die ErlangVM.
Hinweis: Wir empfehlen die Verwendung des AppSignal-Elixir-Pakets 1.10.1 und höher, wenn Sie diese Funktion nutzen.

Verwendung

Die minütlichen Probes ermöglichen es dem AppSignal-Elixir-Paket, standardmäßig benutzerdefinierte Metriken für die ErlangVM zu sammeln und app-spezifische Metriken durch Erstellen eigener Probes.

Mehrere Instanzen

Nach der Aktivierung läuft das System der minütlichen Probes auf jeder Instanz einer App. Das bedeutet, dass globale Metriken durch instanzbezogene Metriken überschrieben werden können, wenn eine Probe Metriken ohne eine Art differenzierendes Tag meldet. Um dies zu beheben, empfehlen wir, Ihre Metriken mit dem Hostnamen oder etwas anderem, das für jede Instanz eindeutig ist, zu taggen. Beispielsweise taggt die ErlangVM-Probe Metriken standardmäßig mit dem Hostnamen. Alternativ können Sie minütliche Probes deaktivieren für alle außer einer Instanz, auf der der Prozess der minütlichen Probes ausgeführt wird. Wir empfehlen die Verwendung der Umgebungsvariable APPSIGNAL_ENABLE_MINUTELY_PROBES, um sie nur auf der Instanz Ihrer Wahl zu aktivieren.

Konfiguration

Die minütlichen Probes werden mit der Konfigurationsoption enable_minutely_probes konfiguriert. Der Standardwert ist true.

Probes erstellen

Wenn Sie mehr benutzerdefinierte Metriken aus Ihrer App verfolgen möchten als unsere Standard-Probes, können Sie Ihre eigene(n) Probe(s) hinzufügen. Eine minütliche AppSignal-Probe kann eine anonyme Funktion oder eine modulbasierte Funktion sein.

Anonyme Funktion

Der einfachste zu registrierende Probe-Typ. Wenn Sie keine Abhängigkeiten für Ihre Probe haben, ist dies die bevorzugte Methode.
Appsignal.Probes.register(:my_probe, fn ->
  Appsignal.set_gauge("database_size", 10)
end)

Modulbasierte Funktion

Eine modulbasierte Funktion kann nützlich sein, wenn Sie eine komplexere Probe haben oder eine Probe mit Abhängigkeiten.
# lib/my_app/probes/my_probe.ex
defmodule MyApp.MyProbe do
  def call do
    Appsignal.set_gauge("database_size", 10)
  end
end
Jetzt können Sie diese Probe in der Start-Funktion Ihrer OTP-App registrieren.
Appsignal.Probes.register(:my_probe, &MyApp.MyProbe.call/0)

Zustandsbehaftete Probes

Ab Version 2.2.8 des AppSignal-Elixir-Pakets können Probes Zustand zwischen Läufen weitergeben. Wenn Ihre Probe ein Argument annimmt, wird der Rückgabewert des letzten Laufs als Wert für dieses Argument im nächsten Lauf übergeben. Ein initialer Zustand, der für den ersten Lauf der Probe verwendet werden soll, kann als drittes Argument an Appsignal.Probes.register übergeben werden. Wenn er nicht angegeben wird, ist der initiale Zustand nil.
Appsignal.Probes.register(:stateful_probe, fn minutes ->
  Appsignal.set_gauge("uptime_minutes", minutes)
  minutes + 1
end, 0)
Oder als modulbasierte Funktion:
# 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
Die Sie dann wie folgt registrieren können:
Appsignal.Probes.register(:stateful_probe, &MyApp.MyProbe.call/1, 0)

Probes registrieren

Probes können mit der register-Methode im Modul Appsignal.Probes registriert werden. Diese Methode akzeptiert drei Argumente.
  • key – Dies ist der Schlüssel/Name der Probe. Er wird verwendet, um die Probe zu identifizieren, falls beim Ausführen der Probe ein Fehler auftritt (der in die appsignal.log-Datei protokolliert wird), und um eine bestehende Probe zu überschreiben.
  • probe – Dies ist einer der unterstützten Probe-Typen, der jede Minute aufgerufen werden soll, um Metriken zu erfassen.
  • state – Dies ist der initiale Zustand, der an Ihre Probe übergeben wird. Wenn Ihre Probe keinen Zustand als Argument annimmt, hat dieses Argument keine Wirkung. Es ist ein optionales Argument, und sein Standardwert ist nil.
Um eine Probe hinzuzufügen, registrieren Sie sie in der start/2-Funktion Ihrer Anwendung, kurz bevor der Supervisor gestartet wird. In einer Phoenix-App sieht das so aus:
# 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

Standard-Probes überschreiben

AppSignal liefert Standard-Probes für bestimmte Integrationen. Wenn diese Probe aus irgendeinem Grund nicht ordnungsgemäß funktioniert oder zusätzliche Konfiguration für Ihren Anwendungsfall erfordert, können Sie die Standard-Probe überschreiben, indem Sie eine neue Probe mit demselben Schlüssel registrieren.
# lib/my_app/application.ex

Appsignal.Probes.register(:erlang, fn() ->
  # Do things
end)
Das Überschreiben von Probes wird eine Debug-Meldung in die appsignal.log-Datei protokollieren, was dabei helfen kann festzustellen, ob eine Probe korrekt überschrieben wurde.