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:
RabbitMQMessage Broker zum Empfangen der Fehlererkennungsanfragen und Ablegen der Ergebnisse und Logs.MinIOObject 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.ErrorDetectionfür Berechnungsanfragen und Antworten- Anfragen werden über den entsprechenden Routing Key empfangen und in der Queue
Measurement.ErrorDetection.RequestQueuegehalten - Antworten auf die Berechnungsanfragen werden in der Queue
Measurement.ErrorDetection.ResponseQueuegehalten
- Anfragen werden über den entsprechenden Routing Key empfangen und in der Queue
Measurement.ErrorDetection.Logszur Speicherung von Logs in der QueueMeasurement.ErrorDetection.Logs.QueueMeasurement.ErrorDetection.DeadLetterzur Speicherung von Nachrichten, die nicht verarbeitet werden können, in der QueueMeasurement.ErrorDetection.DeadLetter.QueueMeasurement.ErrorDetection.Canceledzur Speicherung von fehlerhaften Berechnungsanfragen in der QueueMeasurement.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 Kanalsdata_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, sonstexplicitoder 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.
{
"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 Kanalserrors: 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
}

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
}

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
}

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.

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):

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 Attributensize(Default: 1024) undoverlap(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
}
