Dokumentation

QueueHawk.Agent Konfigurationsreferenz

Jede Option auf QueueHawkOptions, was sie tut, ihr Default, und wann man sie tatsächlich ändert. Alle Optionen sind optional ausser ApiKey.

Program.cs
builder.Services.AddQueueHawk(options =>
{
    options.ApiKey = builder.Configuration["QueueHawk:ApiKey"];
    options.Environment = "Production";
    // jede Option unten ist optional und hat einen sinnvollen Default
});
OptionBeschreibungDefault
ApiKeyIdentifiziert Tenant/Application. Die einzige erforderliche Option — erhältlich durch eine kostenlose Application-Anlage auf queuehawk.com.(erforderlich)
EnvironmentFreitext-Label im Dashboard, z. B. "Production" oder ein Kundenname bei Multi-Tenant-Hosting. Wird serverseitig gegen nichts validiert — eine Abweichung vom ASP.NET-Core-Hosting-Environment-Namen wird nie abgelehnt."Default"
IncludeJobPayloadsSendet Job-Argumentwerte mit, nicht nur Metadaten. Standardmässig aus, da Payloads PII oder Geschäftsdaten enthalten können — siehe unten.false
OnBeforeSendCallback, der pro erfasstem Event aufgerufen wird, bevor es gepuffert wird, um es umzuschreiben oder zu verwerfen — genutzt zur Zensur von Exception-Inhalten. Siehe unten.null
MaxStackTraceLengthKürzt Exception.ToString() (inkl. Stacktrace) auf diese Zeichenanzahl vor dem Senden.4000
BatchIntervalSecondsWie oft der Hintergrund-Dispatcher gepufferte Events per HTTPS versendet. Niedrigere Werte reduzieren die Latenz zum Dashboard, höhere Werte reduzieren die Request-Anzahl.5
HeartbeatIntervalSecondsWie oft jeder Hangfire-Server-Prozess einen Heartbeat meldet — das Signal, mit dem QueueHawk einen Worker erkennt, der zwar läuft, aber keine Jobs mehr aufnimmt.30
EnabledGlobaler Schalter. Bei false wird kein Hangfire-Filter registriert und keine Hintergrund-Services erfassen oder senden irgendetwas — nützlich, um den Agenten in der lokalen Entwicklung komplett zu deaktivieren.true
MaxBufferedEventsGrösse des lokalen In-Memory-Ring-Buffers zwischen Hangfire-Filter und Dispatcher. Ist er voll, wird zuerst das älteste gepufferte Event verworfen — der Agent blockiert nie die Job-Ausführung und wächst nie unbegrenzt im Speicher, um ein Event nicht zu verlieren.5000
IngestionBaseUrlHostname, an den der Agent Events und Heartbeats sendet. Nur für lokale Tests oder einen selbst gehosteten Ingestion-Endpunkt überschreiben — produktive Integrationen sollten das beim Default belassen."https://ingest.queuehawk.com"

Job-Payloads: standardmässig aus

IncludeJobPayloads steuert, ob die tatsächlichen Argumentwerte eines Hangfire-Jobs — nicht nur Typ und Methodenname — an QueueHawk gesendet werden. Standardmässig false, da Job-Argumente regelmässig Kundendaten enthalten: die Argumente eines SendInvoice(Guid customerId, decimal amount)-Jobs sind genau die Art von Daten, die die eigene Infrastruktur nicht ohne bewusste Entscheidung verlassen sollten. Das Aktivieren ist global, nicht pro Job-Typ — aktuell gibt es keinen Weg, es für einen Job-Typ zu aktivieren und für einen anderen nicht.

Exception-Inhalte zensieren mit OnBeforeSend

Job-Payloads und Exception-Inhalte werden bewusst unterschiedlich behandelt. Exception-Messages und Stacktraces werden standardmässig gesendet (nur längen-gekürzt via MaxStackTraceLength) — ein Alert ohne Exception-Detail ist kaum ein Alert. Aber eine Exception-Message ist Freitext, geschrieben vom werfenden Code, und kann gelegentlich etwas Sensibles wiedergeben: eine Validierungs-Exception, die eine abgelehnte E-Mail-Adresse zitiert, eine Datenbank-Constraint-Verletzung, die den Schlüssel einer Zeile enthält, ein Third-Party-SDK, das eine Request-URL samt Query-String protokolliert.

OnBeforeSend ist der Hook für diesen Fall — ein Func<JobEventDto, JobEventDto?>, aufgerufen für jedes erfasste State-Change-Event, bevor es in den lokalen Puffer geschrieben wird:

Program.cs
builder.Services.AddQueueHawk(options =>
{
    options.ApiKey = builder.Configuration["QueueHawk:ApiKey"];
    options.Environment = "Production";

    options.OnBeforeSend = jobEvent =>
    {
        // nur Failed-Events tragen Exception-Inhalte
        if (jobEvent.ExceptionMessage is null)
        {
            return jobEvent;
        }

        return jobEvent with
        {
            ExceptionMessage = Regex.Replace(
                jobEvent.ExceptionMessage,
                @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}",
                "[REDACTED-EMAIL]"),
        };
    };
});

Ausführlicherer Artikel mit weiteren Beispielen: Personenbezogene Daten aus Exception-Messages fernhalten, bevor sie die App verlassen.

Zuverlässigkeits-Garantien, unabhängig von der Konfiguration

Diese sind nicht konfigurierbar — es sind architektonische Eigenschaften des Agenten, die unabhängig davon gelten, wie die obigen Optionen gesetzt sind:

Wirft nie in den Job-Pfad

Jede Agent-Operation — der Hangfire-Filter, der Dispatcher, der eigene OnBeforeSend-Callback — ist exception-gesichert. Ein Bug oder Netzwerkfehler im Agenten kann einen Kunden-Hangfire-Job nie fehlschlagen lassen oder crashen.

Begrenzter Speicher

Der lokale Puffer wächst nie über MaxBufferedEvents hinaus. Ist er voll, wird zuerst das älteste Event verworfen (Ring-Buffer-Prinzip), statt dass der Agent unbegrenzt Speicher verbraucht.

Nur ausgehend

Der Agent macht nur ausgehende HTTPS-Aufrufe an IngestionBaseUrl. Für QueueHawk muss nichts eingehend in der eigenen Firewall geöffnet werden.

← Wie die Integration funktioniert Zensur-Artikel lesen →

Eine Zeile zur Registrierung, volle Kontrolle darüber, was die App verlässt

Kostenlos für eine Application, keine Kreditkarte nötig.

Kostenlos starten