Skip to content

error-detection

Der error-detection Service erkennt verschiedene Arten von Fehlern in Messdaten, u.a. Drifts und Peaks.

Laufzeitumgebung

Der error-detection Service muss Zugriff auf zwei Komponenten haben:

  • RabbitMQ Message Broker zum Empfangen der Fehlererkennungsanfragen und Ablegen der Ergebnisse und Logs.
  • MinIO Object Storage, der Messdaten zur Verfügung stellt, falls diese zu groß sind, um sie direkt in der RabbitMQ-Anfrage zu senden.
---
  config:
    class:
      hideEmptyMembersBox: true
---
classDiagram
    class Client
    class RabbitMQ {
        <<Message Broker>>
    }
    class error-detection {
        <<Service>>
    }
    class MinIO {
        <<Cloud Storage>>
    }

    Client --> RabbitMQ : publish requests
    error-detection --> RabbitMQ : subscribe requests
    error-detection ..> RabbitMQ : publish results
    error-detection ..> MinIO : fetch data
    error-detection --> MinIO : store results

Der error-detection Service verwendet die folgenden RabbitMQ-Exchanges:

  • Measurement.ErrorDetection für Berechnungsanfragen und Antworten
    • Anfragen werden über den entsprechenden Routing Key empfangen und in der Queue Measurement.ErrorDetection.RequestQueue gehalten
    • Antworten auf die Berechnungsanfragen werden in der Queue Measurement.ErrorDetection.ResponseQueue gehalten
  • Measurement.ErrorDetection.Logs zur Speicherung von Logs in der Queue Measurement.ErrorDetection.Logs.Queue
  • Measurement.ErrorDetection.DeadLetter zur Speicherung von Nachrichten, die nicht verarbeitet werden können, in der Queue Measurement.ErrorDetection.DeadLetter.Queue
  • Measurement.ErrorDetection.Canceled zur Speicherung von fehlerhaften Berechnungsanfragen in der Queue Measurement.ErrorDetection.Canceled.Queue

Konfiguration

Umgebungsvariable Beschreibung Typ Werte
RABBITMQ_HOST* Der Host, unter dem der RabbitMQ Message Broker erreichbar ist. string
RABBITMQ_PORT Der Port, unter dem der RabbitMQ Message Broker erreichbar ist. int 64-65535 (default: 5672)
RABBITMQ_USER* Der RabbitMQ-Benutzer, den der error-detection Service zur Athentifizierung verwendet. string
RABBITMQ_PASSWORD* Das Passwort des konfigurierten RabbitMQ-Benutzers. string
RABBITMQ_VIRTUALHOST* Der verwendete Virtualhost des RabbitMQ-Servers. string
RABBITMQ_EXCHANGE_NAME Der RabbitMQ-Exchange, auf dem die Berechnungsanfragen und -ergebnisse abgelegt werden. string default: Measurement.ErrorDetection
MINIO_HOST* Name bzw. Adresse des Hosts, unter dem der MinIO-Server erreichbar ist. string
MINIO_PORT* TCP-Port, unter dem der MinIO-Server erreichbar ist. int 64-65535
MINIO_BUCKET* Name des MinIO-Buckets, der zum Laden der Messdaten verwendet werden soll. string
MINIO_USER* Nutzername, den der Service zur Authentifizierung mit MinIO verwenden soll. string mind. 8 Zeichen
MINIO_PASSWORD* Passwort des konfigurierten MinIO-Nutzers. string mind. 8 Zeichen
MINIO_TLS* Gibt an, ob TLS bzw. HTTPS für eine verschlüsselte Kommunikation verwendet werden soll. boolean
MINIO_SSL_CERT_FILE Pfad zu einer Datei, die die verwendete Kette an SSL-Zertifikaten enthält (mit der u.a. das Server-Zertifikat signiert wurde). Ist keine solche Datei angegeben, wird das Client-Zertifikat bei Anfragen nicht überprüft. string
RABBITMQ_DEAD_LETTER_EXCHANGE Der RabbitMQ-Exchange, an den durch einen Timeout oder sonstige Fehler nicht bearbeitete Nachrichten weitergeleitet werden. string default: Measurement.ErrorDetection.DeadLetter

API

Allgemeines Anfrage- und Antwortformat

Alle Anfragen an den error-detection Service enthalten die folgenden Felder:

  • channel_name: Name des zu überprüfenden Kanals
  • data_provider: Stellt den zu überprüfenden Messkanal zur Verfügung.
  • request_minio_bucket: Optionale Angabe des MinIO-Buckets, aus dem die Messdaten geladen werden sollen (muss nur angegeben werden, falls der Messdaten-Bucket nicht der konfigurierte ist).
  • result_data_provider_type: minio, falls die Berechnungsergebnisse in MinIO gespeichert werden sollen, sonst explicit oder den Parameter weglassen.
  • result_minio_bucket: Der MinIO-Bucket, in dem Berechnungsergebnisse gespeichert werden sollen.
  • Guid: Eine optionale GUID, die von der Anfrage in die Antwort übernommen wird.

Je nach Art der durchgeführten Fehlererkennung sind zusätzliche fehlerspezifische Parameter notwendig.

Anfrageformat
{
    "channel_name": "channel_123",
    "data_provider": {...},
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

Die Antwort des error-detection Service ist wie folgt aufgebaut:

  • channel_name: Name des überprüften Kanals
  • errors: Die erkannten Fehler in den Messdaten mit inklusivem Start- und Endindex des Auftretens sowie einem Konfidenzwert zwischen 0 und 1.
  • service_version: Version des error-detection Containers, der die Anfrage bearbeitet hat.
  • Guid: Optionale aus der Anfrage übernommene GUID.
{
    "channel_name": "Channel123",
    "errors": [
        {
            "error_type": "<error_type>",
            "start": 12345,
            "end": 12382,
            "confidence": 0.67
        },
        ...
    ],
    "service_version": "1.2.3",
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}
{
    "channel_name": "Channel123",
    "errors": [
        {
            "type": "minio",
            "bucket": "bucket_name",
            "path": "errors_123.json"
        }
    ],
    "service_version": "1.2.3",
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

NoValue-Erkennung

  • Routing Key: NoValues
  • error_type: novalues
  • Erkennt NoValues bzw. null-Werte in den Messdaten
  • Keine zusätzlichen Parameter

Endanschlag-Erkennung

  • Routing Key: Limits
  • error_type: limit
  • Erkennt Endanschläge, d.h. zusammenhängende Bereiche am Maximum order Minimum der Messdaten
  • Zusätzliche Parameter:
    • min_size: Minimale Anzahl der aufeinanderfolgenden Minimal- bzw. Maximalwerte, um diese als Endanschlag zu identifizieren (Default: 5)
{
    "channel_name": "channel_123",
    "data_provider": {...},
    "min_size": 7 | null,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

Beispiel Endanschläge

Drift-Erkennung

  • Routing Key: Drifts
  • error_type: drift
  • Erkennt Drifts, d.h. kontinuierliche Verschiebungen des Messbereichs über den gesamten Zeitraum
  • Zusätzliche Parameter:
    • threshold: Grenzwert für den Konfidenzwert, ab dem ein Drift als solcher eingestuft wird (Default: 0.5)
{
    "channel_name": "channel_123",
    "data_provider": {...},
    "threshold": 0.35 | null,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

Beispiel Drift-Erkennung

Peak-Erkennung für Einzelkanäle

  • Routing Key: Peaks
  • error_type: peak
  • Erkennt Peaks, d.h. fehlerhafte Ausschläge des Messsignals, in einem einzelnen Messkanal
  • Zusätzliche Parameter:
    • epsilon: Parameter für die Ausreißer-Erkennung zwischen 0.001 und 0.1 (Default: 0.01)
{
    "channel_name": "channel_123",
    "data_provider": {...},
    "epsilon": 0.023 | null,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

Beispiel Peak-Erkennung

Ob das Signal \(S\) an Stelle \(n\) einen Peak enthält, wird abhängig von den durch den Parameter \(\epsilon\) festgelegten Quantilen \(Q_{\epsilon}\) und \(Q_{1-\epsilon}\) nach der Formel \(S_n > (Q_{1-\epsilon} + (Q_{1-\epsilon} - Q_{\epsilon}) * 1.5) \vee S_n < (Q_{\epsilon} - (Q_{1-\epsilon} - Q_{\epsilon}) * 1.5)\) bestimmt. Um sowohl lokale als auch globale Peaks zu erkennen, wird das Signal in mehreren Durchläufen mit Fenstern verschiedener Größe verarbeitet.

Allgemein besteht der Zusammenhang: Je größer \(\epsilon\) gewählt wird, desto sensitiver ist der Algorithmus und desto mehr Peaks mit geringerem Konfidenzwert werden in der Folge erkannt.

Vereinfachte Darstellung der Peakerkennung

Peak-Erkennung mit Kanalvergleich

  • Routing Key: Peaks.MultiChannel
  • error_type: peak
  • Erkennt Peaks, d.h. fehlerhafte Ausschläge des Messsignals, durch Abgleich eines Messkanals mit den Peaks ähnlicher Messkanäle
  • Zusätzliche Parameter:
    • window_size: Größe des Fensters (in Messpunkten), in dem zu einem Peak im Hauptkanal passende Peaks im Vergleichskanal gesucht werden (Default: 8)
    • epsilon: Parameter für die Ausreißer-Erkennung (Default: 0.1)
    • comparison_data_providers: Liste von Data Providern der Vergleichskanäle
{
    "channel_name": "channel_123",
    "data_provider": {...},
    "epsilon": 0.023 | null,
    "window_size": 10 | null,
    "comparison_data_providers": [ {...} ],
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

Eingabekanäle für die Peak-Erkennung mit Kanalvergleich (betrachteter Kanal oben, Vergleichskanal unten):

Eingabekanäle für die Peak-Erkennung mit Kanalvergleich (betrachteter Kanal oben, Vergleichskanal unten)

Beispielergebnis der Peak-Erkennung mit Kanalvergleich:

Beispielergebnis der Peak-Erkennung mit Kanalvergleich

Messfehler-Erkennung

  • Routing Key: QuantizationErrors
  • error_type: quantization_error
  • Erkennt Messfehler bzw. "Bitklappern" an Stellen, an denen das Signal keine echten Messdaten enthält
  • Zusätzliche Parameter:
    • bins: Bins für die Erstellung des Histogramms, auf dessen Basis die Messfehler identifiziert werden (Default: 64)
    • threshold: Grenzwert für den Konfidenzwert, ab dem ein Messfehler als solcher eingestuft wird (Default: 0.5)
    • window_config: Konfiguration der Fenster, in welche das Messsignal für die Fehlererkennung eingeteilt wird, mit den Attributen size (Default: 1024) und overlap (Default: 512)
{
    "channel_name": "channel_123",
    "data_provider": {...},
    "bins": 128 | null,
    "threshold": 0.35 | null,
    "window_config": {
        "size": 200 | null,
        "overlap": 100 | null
    },
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

Beispiel Messfehler Beispiel Bitklappern