Zum Inhalt springen

Alarme für den Kontingentverbrauch in Observability einrichten

Zuletzt aktualisiert am

Um eine kontinuierliche Daten-Ingestion ohne unerwartete Datenverluste zu gewährleisten, wird die Einrichtung von Frühwarnalarmen dringend empfohlen. Durch die Konfiguration von Alarmen, die auslösen, sobald Ihr Ressourcenverbrauch 90 % Ihrer zugewiesenen Limits erreicht, haben Sie genügend Zeit zu reagieren – entweder durch die Optimierung Ihrer Datenübertragung oder durch ein Upgrade Ihres Tarifs.

Diese Anleitung bietet eine einsatzbereite Konfiguration zur Einrichtung von Email-Alarmen für die folgenden kritischen Kontingente:

  • Logs: Größe des Speicher-Buckets
  • Traces: Größe des Speicher-Buckets
  • Metrics: Schreib-Samples pro Minute

Folgen Sie diesen Schritten, um Ihren Alertmanager-Receiver, das Routing und die Prometheus-Alarmregeln zu konfigurieren.

  1. Variablen exportieren

    Um die Befehle in dieser Anleitung reibungslos auszuführen, exportieren Sie zuerst die Variablen aus dem Code-Block in Ihrem Terminal. Ersetzen Sie die Werte durch Ihre tatsächliche Projekt-ID, Instanz-ID und die Email-Adresse, die die Alarme empfangen soll:

    Terminal-Fenster
    export PROJECT_ID="ihre-projekt-id"
    export INSTANCE_ID="ihre-instanz-id"
    export EMAIL_ADDRESS="ihre-email@firma.de"
  2. Alertmanager-Receiver erstellen

    Konfigurieren Sie zunächst einen Alertmanager-Receiver, um festzulegen, wohin der Alarm gesendet werden soll. Wir erstellen einen Email-Receiver unter Verwendung Ihrer exportierten Email-Adresse.

    STACKIT API (CLI)

    Terminal-Fenster
    stackit curl -X POST "[https://argus.api.eu01.stackit.cloud/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/alertconfigs/receivers](https://argus.api.eu01.stackit.cloud/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/alertconfigs/receivers)" \
    -H "accept: application/json" \
    -H "Content-Type: application/json" \
    --data '{
    "name":"QuotaAlertsReceiver",
    "emailConfigs":[{"to":"'$EMAIL_ADDRESS'"}]
    }'
  3. Alertmanager-Route erstellen

    Erstellen Sie als Nächstes eine Alert-Konfigurationsroute. Diese weist den Alertmanager an, Alarme basierend auf spezifischen Gruppierungs- und Timing-Einstellungen an den erstellten Receiver weiterzuleiten. Wir wenden außerdem einen Matcher an, um sicherzustellen, dass nur Alarme mit der Schweregrad-Stufe warning hierhin geroutet werden.

    STACKIT API (CLI)

    Terminal-Fenster
    stackit curl -X POST "[https://argus.api.eu01.stackit.cloud/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/alertconfigs/routes](https://argus.api.eu01.stackit.cloud/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/alertconfigs/routes)" \
    -H "accept: application/json" \
    -H "Content-Type: application/json" \
    --data '{
    "receiver":"QuotaAlertsReceiver",
    "groupBy":["alertname"],
    "groupWait":"30s",
    "groupInterval":"5m",
    "repeatInterval":"4h",
    "matchers":["severity=warning"]
    }'
  4. Prometheus-Alarmgruppe und -Regeln erstellen

    Definieren Sie abschließend die Alarmbedingungen basierend auf der Prometheus Query Language (expr). Der folgende Befehl erstellt eine Alarmgruppe mit drei Regeln, die auslösen, wenn Ihre Logs-, Traces- oder Metrics-Nutzung 90 % erreicht.

    STACKIT API (CLI)

    Terminal-Fenster
    stackit curl -X POST "[https://argus.api.eu01.stackit.cloud/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/alertgroups](https://argus.api.eu01.stackit.cloud/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/alertgroups)" \
    -H "accept: application/json" \
    -H "Content-Type: application/json" \
    --data '{
    "name": "QuotaConsumptionAlerts",
    "interval": "60s",
    "rules": [
    {
    "alert": "LogQuotaApproaching",
    "expr": "max(instance_logs_storage_size{} * 100 / instance_logs_plan_size{}) >= 90",
    "for": "5m",
    "labels": { "severity": "warning" }
    },
    {
    "alert": "TraceQuotaApproaching",
    "expr": "max(instance_traces_storage_size{} * 100 / instance_trace_plan_size{}) >= 90",
    "for": "5m",
    "labels": { "severity": "warning" }
    },
    {
    "alert": "MetricsQuotaApproaching",
    "expr": "avg by(namespace) (increase(instance_remote_write_samples_received_total[2m])) / on() group_right min(instance_remote_write_samples_max_1m) >= 0.9",
    "for": "5m",
    "labels": { "severity": "warning" }
    }
    ]
    }'