Zum Hauptinhalt springen
Minutely-Probes sind ein Mechanismus, um regelmäßig benutzerdefinierte Metriken an AppSignal zu senden. Dies ist ein System, das standardmäßig im AppSignal Ruby-Gem enthalten ist. Zu Beginn jeder Minute werden die Minutely-Probes nacheinander ausgelöst, um Metriken zu sammeln, und dann bis zur nächsten Minute pausiert. Standardmäßig aktiviert das AppSignal Ruby-Gem Probes für Bibliotheken, die für Ihre App erkannt werden.
Hinweis: In AppSignal Ruby-Gem 3.7.0 und niedriger verwenden Sie das Modul Appsignal::Minutely.probes, um Probes zu registrieren, anstelle der neuen Appsignal::Probes-API.

Verwendung

Die Minutely-Probes ermöglichen es dem AppSignal Ruby-Gem, standardmäßig benutzerdefinierte Metriken für Integrationen und app-spezifische Metriken durch Erstellen Ihrer eigenen Probe zu sammeln.

Mehrere Instanzen

Einmal aktiviert, läuft das Minutely-Probes-System auf jeder Instanz einer App. Das bedeutet, wenn eine Probe Metriken ohne eine Art unterscheidendes Tag meldet, können globale Metriken durch Metriken auf Instanzebene überschrieben werden. Beispielsweise gibt es eine Probe, die verfolgt, wie groß die lokale Hintergrundjob-Queue für eine App ist. Die Queue-Datenbank läuft lokal auf der Instanz, und die Queue-Größen können stark variieren. Jede Instanz einer App meldet unterschiedliche Metrikwerte für dieselbe Metrik und dieselben Tags, was den Metrikwert jede Minute mit denen der zuletzt meldenden Instanz überschreibt. Um Abhilfe zu schaffen, schlagen wir vor, Ihre Metriken mit dem Hostnamen oder etwas anderem zu taggen, das für jede Instanz einzigartig ist. Beispielsweise taggt die Sidekiq-Probe Metriken standardmäßig mit dem Redis-Hostnamen. Alternativ können Sie Minutely-Probes deaktivieren für alle Instanzen außer einer, auf der der Minutely-Probes-Prozess läuft. Wir empfehlen die Verwendung der Umgebungsvariable APPSIGNAL_ENABLE_MINUTELY_PROBES, um sie nur auf der Instanz Ihrer Wahl zu aktivieren.

Konfiguration

Die Minutely-Probes werden mit der Konfigurationsoption enable_minutely_probes konfiguriert.

Probes erstellen

Wenn Sie mehr benutzerdefinierte Metriken aus Ihrer App verfolgen möchten als die mit unseren Integrationen ausgelieferten Standard-Probes, können Sie eigene Probe(s) hinzufügen. Eine AppSignal-Minutely-Probe kann eines von drei Dingen sein. Welcher der drei Typen für Ihre Klasse verwendet werden soll, hängt vom Anwendungsfall ab.

Lambda-Probe

Der einfachste Probe-Typ zum Registrieren. Wenn Sie keine Abhängigkeiten für Ihre Probe haben, ist dies die bevorzugte Methode.
# config/initializers/appsignal.rb or a file that's loaded on boot
Appsignal::Probes.register(:my_probe, lambda do
  Appsignal.set_gauge("database_size", 10)
end)

Klassen-Probe

Eine Klassen-Probe ist eine lazy initialisierte Probe. Sie wird nur gestartet, wenn die Minutely-Probes gestartet werden. Sie wird zu Beginn des Minutely-Probes-Threads initialisiert und bleibt initialisiert, solange Ihre App läuft. Diese Methode ist nützlich, wenn Sie enable_minutely_probes nicht für jede Umgebung aktiviert haben und nicht möchten, dass sie standardmäßig initialisiert wird.
# config/initializers/appsignal.rb or a file that's loaded on boot

# Creating a probe using a Ruby class
class BackgroundJobLibraryProbe
  def initialize
    # This is only called when the minutely probe gets initialized
    require "background_job_library"
    @connection = BackgroundJobLibrary.connection
  end

  def call
    stats = @connection.fetch_queue_stats
    Appsignal.set_gauge "background_job_library_queue_length", stats.queue_length
    Appsignal.set_gauge "background_job_library_processed_jobs", stats.processed_jobs
  end
end

# Registering a Class probe
Appsignal::Probes.register(
  :background_job_library_probe,
  BackgroundJobLibraryProbe
)

Initialisierte Klassen-Probe

Diese Methode ist am nützlichsten zum Überschreiben von Standard-Probes. Das AppSignal Ruby-Gem liefert einige Probes für Integrationen standardmäßig mit. Diese Standard-Probes registrieren Probes als Klasse, sodass sie beim Überschreiben nicht initialisiert werden. Wenn die Standardkonfiguration der Probe nicht zu Ihrem Anwendungsfall passt, können Sie eine Standard-Probe überschreiben mit Ihrer eigenen Konfiguration. Beachten Sie, dass wir keine Klasse als Probe registrieren, sondern eine Instanz der Klasse mit .new und ein Konfigurationsobjekt übergeben, z. B. BackgroundJobLibraryProbe.new(<config>).
# config/initializers/appsignal.rb or a file that's loaded on boot
require "background_job_library"

# Creating a probe using a Ruby class
class BackgroundJobLibraryProbe
  def initialize(config)
    @connection = BackgroundJobLibrary.connection(config)
  end

  def call
    stats = @connection.fetch_queue_stats
    Appsignal.set_gauge "background_job_library_queue_length", stats.queue_length
    Appsignal.set_gauge "background_job_library_processed_jobs", stats.processed_jobs
  end
end

# Registering an initialized Class probe
Appsignal::Probes.register(
  :background_job_library_probe,
  BackgroundJobLibraryProbe.new(:database => "redis://localhost:6379")
)

Probes registrieren

Probes können mit der register-Methode des Moduls Appsignal::Probes registriert werden. Diese Methode akzeptiert zwei Argumente.
# config/initializers/appsignal.rb or a file that's loaded on boot

Appsignal::Probes.register(:my_probe, lambda do
  Appsignal.set_gauge("database_size", 10)
end)

Rails-Apps

Wir empfehlen, Ihre Probes in einem Rails-Initializer zu registrieren, z. B.: config/initializers/my_probe.rb.

Abhängigkeitsanforderungen

Nicht jede Probe sollte standardmäßig zur Liste der Probes hinzugefügt werden. Manche Abhängigkeit kann erforderlich sein, damit die Probe ordnungsgemäß funktioniert. Diese Abhängigkeitsprüfung wird in den im Gem gelieferten Probes verwendet, kann aber auch in Ihren eigenen Probes verwendet werden. Durch Hinzufügen einer Klassenmethode mit dem Namen dependencies_present? kann vor dem Start der Probe geprüft werden, ob sie gestartet werden soll. Dies funktioniert sowohl bei Klassen-Probes als auch bei initialisierten Klassen-Probes. Im letzteren Szenario sollte es in der initialize-Methode der Probe keinen Aufruf an die genannte Abhängigkeit geben, da diese bereits initialisiert ist.
# config/initializers/appsignal.rb or a file that's loaded on boot
require "background_job_library"

# Creating a probe using a Ruby class
class BackgroundJobLibraryProbe
  def self.dependencies_present?
    # Only start the probe if the BackgroundJobLibrary version is higher or
    # equal to 1.0.0.
    Gem::Version.new(BackgroundJobLibrary::Version) >= Gem::Version.new("1.0.0")
  end

  def initialize(config = {})
    @config = config
  end

  def call
    stats = connection.fetch_queue_stats
    Appsignal.set_gauge "background_job_library_queue_length", stats.queue_length
    Appsignal.set_gauge "background_job_library_processed_jobs", stats.processed_jobs
  end

  private

  def connection
    @connection ||= BackgroundJobLibrary.connection(@config)
  end
end

# Registering a Class probe with a `dependencies_present?` check
Appsignal::Probes.register(
  :background_job_library_probe,
  BackgroundJobLibraryProbe
)
# Also works for initialized probes
Appsignal::Probes.register(
  :background_job_library_probe,
  BackgroundJobLibraryProbe.new(:url => "schema://my_connection_url:9090")
)

Standard-Probes überschreiben

AppSignal wird mit Standard-Probes für bestimmte Integrationen ausgeliefert. Wenn diese Probe aus irgendeinem Grund nicht ordnungsgemäß funktioniert oder zusätzliche Konfiguration für Ihren Anwendungsfall benötigt, können Sie die Standard-Probe überschreiben, indem Sie die Probe-Klasse mit Ihrer eigenen Konfiguration initialisieren. Beispiel zum Überschreiben der Sidekiq-Probe.
# config/initializers/appsignal.rb or a file that's loaded on boot

Appsignal::Probes.register(
  :sidekiq, # Use the same key as the default Sidekiq probe to override it
  Appsignal::Probes::SidekiqProbe.new(:hostname => ENV["REDIS_URL"])
)
(Beachten Sie, dass Sie die Umgebungsvariable REDIS_URL selbst setzen müssen.) Das Überschreiben von Probes protokolliert eine Debug-Nachricht in der appsignal.log-Datei, die helfen kann zu erkennen, ob eine Probe korrekt überschrieben wurde.

Probes deregistrieren

Um zuvor registrierte Probes, einschließlich der Standard-Probes, zu deregistrieren, verwenden Sie die Methode Appsignal::Probes.unregister. Rufen Sie die unregister-Methode mit dem Namen der Probe auf, um sie zu deregistrieren.
Appsignal::Probes.unregister(
  :probe_name # Use the same key as used in `Probes.register` to unregister it
)