Engineering

Benutzeranmerkungen für Elastic Machine Learning

Benutzeranmerkungen sind als neue Machine Learning-Funktion in Elasticsearch ab Version 6.6 verfügbar. Erweitern Sie Ihre Machine Learning-Jobs mit deskriptivem Domänenwissen. Die Algorithmen in Ihren Machine Learning Jobs versuchen, Anomalien zu finden, ohne jedoch zu wissen, womit sich die Daten befassen. Ein Job weiß beispielsweise nicht, ob er Daten zur CPU-Auslastung oder zum Netzwerkdurchsatz verarbeitet hat. Mit Benutzeranmerkungen können Sie die Ergebnisse um das Wissen ergänzen, das Sie als Benutzer über die Daten haben. 

In diesem Blogeintrag zeigen wir Ihnen, wie Benutzeranmerkungen in verschiedenen Anwendungsfällen funktionieren. Wir werden Daten von Hydro Online analysieren, einem Datenportal des österreichischen Bundeslands Tirol. Hydro Online bietet eine Schnittstelle für die Analyse von Wettersensordaten wie etwa Niederschlagsmengen, Pegelständen von Flüssen und Schneemengen. Wie bereits in einem unserer vorherigen Blogeinträge beschrieben, haben wir mit der Datenvisualisierung für Dateien ein robustes Werkzeug zum Ingestieren von CSV-Daten.

Verwendung

Wir beginnen mit einem einzigen Metrik-Job, der die Pegelstandsmessungen des Flusses Grossache im Dorf Kössen analysiert. Nach der Erstellung des Jobs können Sie den Single Metric Viewer verwenden, um Anmerkungen zu den Analyseergebnissen hinzuzufügen. Ziehen Sie mit der Maus über einen Zeitbereich im Diagramm, um eine Anmerkung zu erstellen. Daraufhin wird rechts ein Flyout-Element geöffnet, in dem Sie eine benutzerdefinierte Beschreibung eingeben können. Im unten gezeigten Beispiel erstellen wir eine Anmerkung für einen ungewöhnlichen Pegelstand während einer großen Überschwemmung. Mit der Anmerkung machen Sie Ihr Wissen für andere Benutzer verfügbar.

Die Anmerkung wird sowohl im eigentlichen Diagramm als auch in der Anmerkungstabelle darunter angezeigt. Mit der Beschriftung in der ersten Tabellenspalte können Sie die Anmerkungen im Diagramm identifizieren. Diese Beschriftungen werden für die angezeigten Anmerkungen dynamisch erstellt. Wenn Sie den Mauszeiger über eine Zeile in der Anmerkungstabelle bewegen, wird die entsprechende Anmerkung im Diagramm darüber ebenfalls hervorgehoben.

Die Anmerkungen für einen Job sind auch auf der Jobverwaltungsseite verfügbar, werden dort in einer eigenen Registerkarte angezeigt und erweitern die entsprechende Zeile in der Jobliste. Jede Anmerkung in der Tabelle enthält einen Link in der rechten Spalte. Dieser Link führt zurück zum Single Metric Viewer mit Fokus auf den Zeitbereich, auf den sich die Anmerkung bezieht. Diese Permalinks können ebenfalls mit anderen Benutzern geteilt werden. Sie können also Anmerkungen verwenden, um Lesezeichen für bestimmte Anomalien zu erstellen, mit denen Sie sich später befassen möchten.

Wenn sich mehrere Anmerkungen auf denselben Zeitbereich beziehen, werden die Anmerkungen im Diagramm vertikal verteilt, um Überlappungen zu vermeiden. Klicken Sie auf eine Anmerkung im Diagramm, um sie zu bearbeiten oder zu löschen. Das Flyout-Element wird erneut auf der rechten Seite geöffnet, und Sie können den Text bearbeiten oder die Anmerkung löschen. Ab Version 6.7 können Sie dazu auch die Bearbeitungsschaltfläche in der Anmerkungstabelle verwenden, wodurch diese Funktion auch auf der Jobverwaltungsseite verfügbar ist.

Nachdem wir die grundlegenden Vorgänge zum Erstellen und Verwenden von Benutzeranmerkungen besprochen haben, werden wir jetzt einige Anwendungsfälle unter die Lupe nehmen.

Verwenden von Anmerkungen zum Überprüfen erwarteter Anomalien

Anmerkungen können eingesetzt werden, um eine Ground Truth bereitzustellen, mit der Sie die Ergebnisse eines Machine Learning Jobs überprüfen können. Im folgenden Beispiel sehen wir uns erneut die Pegelstandsdaten aus Hydro Online an und versuchen, historische Ereignisse automatisch als Anmerkungen über die Anomalieergebnisse zu legen. Als Datenwissenschaftler sind Sie möglicherweise dafür verantwortlich, sowohl die zu analysierenden Quelldaten als auch den Datensatz zum Überprüfen der Ergebnisse zu beschaffen und aufzubereiten.

Für unsere eigene Analyse brauchen wir den Rohdatensatz.


In diesem Fall können wir jedoch neben der Analyse der Daten über die Webschnittstelle glücklicherweise auch historische Daten zur weiteren Analyse herunterladen. Für dieses Beispiel verwenden wir die Pegelstandsdaten des Flusses Grossache an der Messstelle „Huette“. Die Anmerkungen zur gewünschten Ground Truth werden aus einem Dokument, das schwere Überschwemmungen und Pegelstände beschreibt, erstellt.

Neben der bereits beschriebenen Benutzeroberfläche werden Machine Learning-Anmerkungen auch als Dokumente in einem separaten herkömmlichen Elasticsearch-Index gespeichert. Anmerkungen können auch programmgesteuert oder manuell mit den herkömmlichen Elasticsearch-APIs erstellt werden. Anmerkungen werden in einem versionsspezifischen Index gespeichert und sollten über die Aliase .ml-annotations-read und .ml-annotations-write abgerufen werden. In diesem Beispiel fügen wir Anmerkungen für historische Flussereignisse hinzu, bevor wir unseren Machine Learning Job erstellen.

{
   "_index":".ml-annotations-6",
   "_type":"_doc",
   "_id":"DGNcAmoBqX9tiPPqzJAQ",
   "_score":1.0,
   "_source":{
      "timestamp":1368870463669,
      "end_timestamp":1371015709121,
      "annotation":"2013 June; 770 m3/s; 500 houses flooded.",
      "job_id":"annotations-leukental-4d-1533",
      "type":"annotation",
      "create_time":1554817797135,
      "create_username":"elastic",
      "modified_time":1554817797135,
      "modified_username":"elastic"
   }
}

Anschließend erstellen wir einen Machine Learning Job, um Anomalien im Pegelstand zu suchen. Der Name des Jobs stimmt mit dem Feld job_id aus der obigen Anmerkung überein, um die manuell erstellten Anmerkungen einlesen zu können. So sieht der Job im Assistenten für einzelne Metriken aus, nachdem wir die historischen Flussdaten in einen Elasticsearch-Index ingestiert haben:

Dabei ist entscheidend, dass der ausgewählte Jobname mit dem Namen für die Anmerkungen übereinstimmt. Wenn wir den Job ausführen und zum Single Metric Viewer wechseln, sollten die Anmerkungen für die Anomalien im Pegelstand angezeigt werden, die der Machine Learning Job gefunden hat:

image9.png

Mit dieser Technik können Sie mühelos überprüfen, ob eine ausgeführte Analyse gültig ist, indem Sie sie mit vorhandenen Validierungsdaten vergleichen, die als Anmerkungen gespeichert sind.

Anmerkungen für Systemereignisse

Neben den von Benutzern generierten Anmerkungen generiert das Machine Learning Backend in bestimmten Fällen auch automatische Anmerkungen für Systemereignisse.

Der obige Screenshot zeigt ein Beispiel für eine automatisch generierte Anmerkung. In diesem Fall wurde ein Machine Learning Job ausgeführt, aber die Dateningestion konnte nicht mit der für den Job erforderlichen Rate Schritt halten. Daher wurden Dokumente zum Job hinzugefügt, nachdem der Job seine Analyse für den Bucket ausgeführt hatte. Die automatisch generierte Anmerkung hebt dieses Problem hervor, das andernfalls schwer zu finden und zu debuggen wäre. Der Anmerkungstext enthält Details zum aufgetretenen Problem sowie eine Empfehlung zur Behebung, in diesem Fall eine Anpassung der Einstellung „query_delay“.

Alerting-Integration

Noch vor den Benutzeranmerkungen für Machine Learning konnten Sie bereits Watcher einsetzen, um Warnungen auf Basis von Anomalien zu erstellen, die bei Machine Learning Jobs gefunden wurden. Dies ist zwar bereits ein großer Fortschritt gegenüber Warnungen mit einfachen Schwellenwerten, aber die Warnungen sind möglicherweise zu differenziert für die jeweilige Empfängergruppe. Falls Sie Machine Learning Jobs verwenden, können Sie mit Anmerkungen kuratieren, welche Watcher-Warnungen ausgelöst werden und welche Informationen an andere Beteiligte weitergegeben werden. Da die Anmerkungen in einem eigenen Elasticsearch-Index gespeichert werden, können Sie mit Watcher mühelos auf neu erstellte Dokumente in diesem Index reagieren und Benachrichtigungen auslösen. Watcher kann auch Warnungen an einen Slack-Channel senden. Mit der folgenden Beispielkonfiguration Sie eine Watch erstellen, um Slack-Nachrichten auszulösen, wenn eine neue Anmerkung erstellt wird:

{
 "trigger": {
   "schedule": {
     "interval": "5s"
   }
 },
 "input": {
   "search": {
     "request": {
       "search_type": "query_then_fetch",
       "indices": [
         ".ml-annotations-read"
       ],
       "rest_total_hits_as_int": true,
       "body": {
         "size": 1,
         "query": {
           "range": {
             "create_time": {
               "gte": "now-9s"
             }
           }
         },
         "sort": [
           {
             "create_time": {
               "order": "desc"
             }
           }
         ]
       }
     }
   }
 },
 "condition": {
   "compare": {
     "ctx.payload.hits.total": {
       "gte": 1
     }
   }
 },
 "actions": {
   "notify-slack": {
     "transform": {
       "script": {
         "source": "def payload = ctx.payload; DateFormat df = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\"); payload.timestamp_formatted = df.format(Date.from(Instant.ofEpochMilli(payload.hits.hits.0._source.timestamp)));  payload.end_timestamp_formatted = df.format(Date.from(Instant.ofEpochMilli(payload.hits.hits.0._source.end_timestamp))); return payload",
         "lang": "painless"
       }
     },
     "throttle_period_in_millis": 10000,
     "slack": {
       "message": {
         "to": [
           "#<slack-channel>"
         ],
         "text": "New Annotation for job *{{ctx.payload.hits.hits.0._source.job_id}}*: {{ctx.payload.hits.hits.0._source.annotation}}",
         "attachments": [
           {
             "fallback": "View in Single Metric Viewer http://<kibana-host>:5601/app/ml#/timeseriesexplorer?_g=(ml:(jobIds:!({{ctx.payload.hits.hits.0._source.job_id}})),refreshInterval:(pause:!t,value:0),time:(from:'{{ctx.payload.timestamp_formatted}}',mode:absolute,to:'{{ctx.payload.end_timestamp_formatted}}'))&_a=(filters:!(),mlSelectInterval:(interval:(display:Auto,val:auto)),mlSelectSeverity:(threshold:(color:%23d2e9f7,display:warning,val:0)),mlTimeSeriesExplorer:(zoom:(from:'{{ctx.payload.timestamp_formatted}}',to:'{{ctx.payload.end_timestamp_formatted}}')),query:(query_string:(analyze_wildcard:!t,query:'*')))",
             "actions": [
               {
                 "name": "action_name",
                 "style": "primary",
                 "type": "button",
                 "text": "View in Single Metric Viewer",
                 "url": "http://<kibana-host>:5601/app/ml#/timeseriesexplorer?_g=(ml:(jobIds:!({{ctx.payload.hits.hits.0._source.job_id}})),refreshInterval:(pause:!t,value:0),time:(from:'{{ctx.payload.timestamp_formatted}}',mode:absolute,to:'{{ctx.payload.end_timestamp_formatted}}'))&_a=(filters:!(),mlSelectInterval:(interval:(display:Auto,val:auto)),mlSelectSeverity:(threshold:(color:%23d2e9f7,display:warning,val:0)),mlTimeSeriesExplorer:(zoom:(from:'{{ctx.payload.timestamp_formatted}}',to:'{{ctx.payload.end_timestamp_formatted}}')),query:(query_string:(analyze_wildcard:!t,query:'*')))"
               }
             ]
           }
         ]
       }
     }
   }
 }
}

Ersetzen Sie in der oben gezeigten Konfiguration <slack-channel> und <kibana-host> durch Ihre Einstellungen, und schon können Sie eine erweiterte Watch erstellen. Nach der Einrichtung sollten Sie für jede neu erstellte Anmerkung eine Slack-Benachrichtigung erhalten, mit dem Anmerkungstext und einem Link zurück zum Single Metric Viewer.

Zusammenfassung

In diesem Artikel haben wir die neue Anmerkungsfunktion für Elasticsearch Machine Learning besprochen. Mit dieser Funktion können Sie Anmerkungen über die Benutzeroberfläche und Systemanmerkungen über Backend-Aufgaben hinzufügen. Diese Anmerkungen sind als Lesezeichen auf der Jobverwaltungsseite verfügbar und können mit anderen Benutzern geteilt werden. Anmerkungen können programmgesteuert aus externen Daten erstellt und als Ground Truth-Overlay für erkannte Anomalien verwendet werden. In Kombination mit Watcher und der Slack-Aktion in Elasticsearch haben wir außerdem gesehen, wie Sie Anmerkungen für kuratierte Warnungen verwenden können. Viel Spaß mit den Anmerkungen, und falls Sie Fragen haben, erreichen Sie uns in den Diskussionsforen.