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

# Minütliche Probes

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal for Python", version: "1.2.0" }
]}
/>

Minütliche Probes sind ein Mechanismus, um in regelmäßigen Abständen benutzerdefinierte Metriken an AppSignal zu senden. In minütlichen Intervallen ab dem Zeitpunkt der Erstellung der Probe kann eine benutzerdefinierte Funktion aufgerufen werden, in der Sie Metriken erfassen können, um sie an AppSignal zu senden. Die Funktionen der minütlichen Probes werden asynchron ausgeführt.

Sie können minütliche Probes vollständig mit der Konfigurationsoption [`enable_minutely_probes`](/python/configuration/options#option-enable_minutely_probes) aktivieren oder deaktivieren.

## Probes registrieren

Um benutzerdefinierte Metriken aus Ihrer Anwendung zu verfolgen, können Sie eigene Probes hinzufügen. Um eine Probe zu registrieren, müssen Sie die Methode `probes.register()` mit zwei Argumenten aufrufen: einem Probe-Namen und einer Funktion, die einmal pro Minute aufgerufen werden soll.

<CodeGroup>
  ```python Python theme={null}
  from appsignal import probes, set_gauge

  def set_database_size_gauge():
      set_gauge("database_size", 10)

  probes.register("database", set_database_size_gauge)
  ```
</CodeGroup>

Um sicherzustellen, dass alle minütlichen Probes rechtzeitig ausgeführt werden, ist es wichtig, lange Blockaden innerhalb einer Funktion einer minütlichen Probe zu vermeiden.

## Zustandsbehaftete Probes

Eine Probe-Funktion kann den Zustand zwischen Ausführungen behalten, indem sie ihn als Argument akzeptiert und zurückgibt. Dies ist nützlich, um zu verfolgen, wie sich Werte im Laufe der Zeit ändern:

<CodeGroup>
  ```python Python theme={null}
  from appsignal import probes, set_gauge

  def set_user_signups_gauge(previous_user_count):
      current_user_count = User.objects.all().count()

      if previous_user_count is not None:
        set_gauge("user_signups", current_user_count - previous_user_count)

      return current_user_count

  probes.register("user_signups", set_user_signups_gauge)
  ```
</CodeGroup>

Beim ersten Aufruf der minütlichen Probe wird `None` als Argument übergeben. Bei nachfolgenden Aufrufen wird der von der vorherigen Ausführung zurückgegebene Wert als Argument übergeben.
