Fehlerbehebung bei Event Engine-Komponenten
Als Automation Engine-Administrator können Ihnen Probleme mit verschiedenen Event Engine-Komponenten begegnen.
Wichtig! Sie sollten über ausreichende Erfahrung mit Apache Kafka und Apache Flink verfügen.
Mögliche Probleme
- Sie führen eine Event Engine-Regel aus, der REST-Endpunkt gibt jedoch den Fehler ungültiger Schlüssel zurück.
- Sie senden Auslöser-Ereignisse an den REST-Endpunkt, der Ereigniszähler wird jedoch nicht inkrementiert
Schritte zur Fehlerbehebung
Bevor Sie mit der Fehlerbehebung beginnen, sollten Sie sich mit dem Ereignispfad in der Event Engine vertraut machen. Die folgende Abbildung zeigt die Meldungsabläufe zwischen den Event Engine-Komponenten. Die Zahlen geben die sequenziellen Schritte an.
Schritt 1 – Testen Sie den REST-Endpunkt Ihres RULE-Objekts.
Um den REST-Endpunkt zu testen, sollte das Analytics Backend ausgeführt werden. Verwenden Sie den Service Manager, um den Backend-Status zu überprüfen. Der Dienst heißt ANALYTICS-BACKEND. Ein grünes Häkchen zeigt an, dass das Analytics Backend ausgeführt wird:
Wichtig! Starten Sie das Analytics Backend neu, wenn es nicht ausgeführt wird. Wenn der Dienst nach dem Neustart fehlschlägt, überprüfen Sie die Analytics Backend-Log-Datei, die sich im folgenden Verzeichnis befindet:
<Automic>\Automation.Platform\Analytics\backend\temp\analytics_backend.log
Um den REST-Endpunkt zu aktivieren, setzen Sie die Eigenschaftcollector.events.enabled auf true. Der Wert kann über die Datei application.properties geändert werden, die sich im folgenden Verzeichnis befindet.
<Automic>\Automation.Platform\Analytics\backend\application.properties
Beispiel:
#####################
## Ereignis-Aufnahme #
#####################
# Ereignis-Aufnahme aktivieren/deaktivieren
collector.events.enabled=true
Um den REST-Endpunkt zu testen, senden Sie eine POST-Anforderung unter Verwendung von Postman oder cURL. Der Antwortcode mit dem HTTP-Status sollte 200 OK lauten.
Den REST-Endpunkt mit Postman testen
Richten Sie folgende Daten in Postman ein:
Anfragemethode:
POST
REST-Endpunkt:
<Backend.Endpunkt>:<Server.Port>/analytics/api/v1/events
Header:
Inhaltstyp: application/json
Berechtigung: <Ihr begrenzter API-Schlüssel>
Rumpf:
{
"Typ": "EVENTDEF_TEMPERATURE",
"Werte":
{
"Stadt": "Wien",
"Temperatur": 32
}
}
Wenn Sie den Antwortcode 200 OK in Postman erhalten, funktioniert der REST-Endpunkt ordnungsgemäß.
Den REST-Endpunkt mit cURL testen
curl -X POST \
http://<Backend.Endpunkt>:<Server.Port>/analytics/api/v1/events \
-w "\nStatus: %{http_code}\n" \
-H 'Berechtigung: <Ihr begrenzter API-Schlüssel>' \
-H 'Inhaltstyp: application/json' \
-H 'Cache-Steuerung: no-cache' \
-d '{
"Typ": "EVENTDEF_TEMPERATURE",
"Werte":
{
"Stadt": "Wien",
"Temperatur": 32
}
}
'
Wenn der Ausgabestatuscode 200 ist, funktioniert der REST-Endpunkt ordnungsgemäß.
Wichtig! Der /events-Endpunkt gibt auch dann den Statuscode 200 zurück, wenn die Ereignisdefinition in der JSON-Payload auf dem Zielmandanten nicht vorhanden ist (daher wird keine Regel ausgelöst). Um sicherzustellen, dass die Ereignisdefinition auf dem Zielmandanten vorhanden ist, verwenden Sie die Objektsuche.
Hinweise:
-
Um cURL leichter aufrufen zu können, speichern Sie den Rumpf der Anfrage in einer JSON-Datei (z. B. event.json). Beispiel:
curl -X POST -w "\nStatus: %{http_code}\n" --header "Inhaltstyp: application/json" --header "Akzeptiert: application/json" --header "Berechtigung: <Ihr begrenzter API-Schlüssel>" -d @event.json "localhost:8090/analytics/api/v1/events"
- Durch Verwendung des Schalters -w können Sie erzwingen, dass cURL den Statuscode der HTTP-Anfrage ausgibt.
Schritt 2 – Überprüfen Sie, ob Event Engine-Komponenten miteinander kompatibel sind.
Am schnellsten können Sie Ihre installierten Komponentenversionen erkennen, indem Sie im AWI auf das Mandantenmenü klicken (rechts neben der Hauptsymbolleiste) und Info auswählen. Eine Liste aller installierten Komponenten mit ihrer Version wird angezeigt.
Um die Kompatibilität jeder Komponente zu überprüfen, verwenden Sie die Kompatibilitätsmatrix.
Schritt 3 – Überprüfen Sie, ob der Mandant, den Sie für eine Regel verwenden, derselbe ist wie der Mandant, den Sie angegeben haben, indem Sie einen begrenzten API-Schlüssel erstellt haben.
Um zu überprüfen, ob der Mandant, der für eine Regel verwendet wird, derselbe Mandant ist, der in einem begrenzten Schlüssel angegeben wurde, gehen Sie wie folgt vor.
-
Öffnen Sie die Datei application.properties in einem Editor. Diese Datei befindet sich am folgenden Speicherort:
<AUTOMIC>/Automation.Platform/Analytics/backend/
Setzen Sie im Abschnitt Log-Konfiguration die Protokollierungsebene für die Anwendung auf TRACE.
Beispiel:
#######################
## Log-Konfiguration ##
#######################
#Basisverzeichnis, in dem alle Backend-Logs gespeichert werden
logging.basedir=temp
#Protokollierungsebene für die Anwendung
#Mögliche Werte: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
logging.level.root=TRACE
logging.level.org.apache.kafka=TRACE
-
Die Mandanten-ID ist das generierte analytics_backend.log. Die Log-Datei befindet sich im folgenden Verzeichnis:
<AUTOMIC>/Automation.Platform/Analytics/backend/temp/
Sie finden die Mandanten-ID in der Validierungsausgabe für den API-Schlüssel, indem Sie in der Trace-Datei nach dem Text "ist gültig für Mandanten" suchen. In der Trace-Datei des Kunden habe ich gefunden: "API-Schlüssel '<Kunden-API-Schlüssel>' ist gültig für Mandanten [102]" – das bedeutet, dass der begrenzte API-Schlüssel für den Mandanten 102 generiert wird.
Schritt 4 – Überprüfen Sie, ob Ihre Ereignisse in das Kafka-Ereignisthema geschrieben wurden.
Wenn die HTTP-API Ihres RULE- oder WEBHOOK-Objekts mit dem Statuscode 200 antwortet und Ihre Regeln nicht ausgelöst werden, überprüfen Sie die Ereignisthemen in Kafka.
Kafka ist ein verteilter Message-Broker, der für den Transport von Ereignissen für die Regel-Verarbeitung in Flink verantwortlich ist, ebenso wie für das Zurücksenden von Auslösern für Aktionen an die Automation Engine. Kafka enthält eine Reihe von Kommandozeilen-Tools, mit denen Sie die Konfiguration sowie interne Strukturen anzeigen können. Diese Tools befinden sich hier:
-
Linux
<AUTOMIC>/External.Resources/kafka/kafka_2.11-0.10.2.1/bin
Alle Themen auf Kafka auflisten
Anschließend stellen Sie sicher, dass die für die Ereignisverarbeitung erforderlichen Themen in Kafka vorhanden sind. Dies erfolgt mit dem Tool kafka-topics:
kafka-topics --zookeeper <Host>:<Port> --list
Hinweis: Ein Zookeeper-Verbindungsstring muss das Format Host:Port haben. Der standardmäßige Zookeeper-Port ist 2181.
Der Befehl --list gibt eine Liste der mandantenspezifischen eingehenden Themen an, die von Kafka verwaltet werden. Die Ausgabeliste sollte das folgende Muster aufweisen:
AUTOMIC_<Hash-Wert>_ds-edda_<CLIENTID>-events
Einen Konsolen-Nutzer an das eingehende Thema anfügen, das Sie überwachen möchten
In der nächsten Phase wird überprüft, ob das eingehende Kafka-Thema Ihre Ereignisse erhält.
Fügen Sie dem mandantenspezifischen Thema, das Sie im vorigen Schritt identifiziert haben, einen Konsolen-Nutzer an:
kafka-console-consumer --zookeeper <Zookeeper-Host>:<Zookeeper-Port> --topic AUTOMIC_..._ds-edda<CLIENTID>-events
Ein Ereignis an den REST-Endpunkt /events senden
Um den Ereignistransport zu überprüfen, senden Sie ein Ereignis unter Verwendung der REST-API. Dazu können Sie einen grafischen REST-Client verwenden, wie beispielsweise Postman, oder ein CLI-basiertes Tool wie cURL.
Ein Ereignis unter Verwendung von cURL senden
Speichern Sie zuerst den Ereignisrumpf in einer Datei, z. B. event.json. Anschließend führen Sie den folgenden cURL-Befehl aus:
curl -X POST -w "\nStatus: %{http_code}\n" --header "Inhaltstyp: application/json" --header "Akzeptiert: application/json" --header "Berechtigung: <Ihr begrenzter API-Schlüssel>" -d @event.json "<analytics_hostname>:8090/analytics/api/v1/events"
Die Übertragung neuer Ereignisse überprüfen
Überprüfen Sie in der Eingabeaufforderung bei aktivem Konsolen-Nutzer, ob neue Ereigniseinträge vorhanden sind.
Sie können auch alle bisherigen Ereignisse auflisten:
kafka-console-consumer --zookeeper localhost:2181 --topic AUTOMIC_..._ds-edda_<CLIENTID>-events --from-beginning
Wenn neue Elemente in der Nutzer-Ausgabe der Kafka-Konsole angezeigt werden, bedeutet dies, dass Ihre Ereignisse in das Ereignisthema auf der Streaming-Plattform geschrieben wurden.
Schritt 5 – Überprüfen Sie, ob Flink Ihre Regel ordnungsgemäß verarbeitet.
Apache Flink-Regeln auf Ausnahmen überprüfen
In diesem Schritt werden Sie überprüfen, ob Apache Flink Ihre Regeln ordnungsgemäß verarbeiten kann. Dazu führen Sie die folgenden Schritte aus:
-
Öffnen Sie das Flink Dashboard. Geben Sie dazu die URL http://<Hostname>:8081 in einen Webbrowser ein.
Hinweis: Der standardmäßige web.port ist 8081, definiert in <AUTOMIC>\External.Resources\flink\flink-1.10.1\conf\flink-conf.yaml
- Überprüfen Sie im Dashboard Ihre Regeljobs in der Übersicht-Perspektive. Achten Sie auf FEHLGESCHLAGENE Jobs im Abschnitt Fertiggestellte Jobs.
-
Klicken Sie auf einen FEHLGESCHLAGENEN Job und suchen Sie auf der Seite Ausnahmen nach möglichen Ursachen für den Fehler.
Beispiel für eine Ausnahme: Das folgende Beispiel zeigt einen fehlgeschlagenen Job mit dem Fehler NoResourceAvailableException. Dieser Job ist fehlgeschlagen, weil zu viele Regeln gestartet wurden und nicht genügend freie Slots auf Flink zur Verfügung stehen. Um das Problem zu lösen, können Sie einen größeren Slot-Wert für taskmanager.numberOfTaskSlotsin der Datei <AUTOMIC>\External.Resources\flink\flink-1.10.1\conf\flink-conf.yaml festlegen.
Weiteres Debugging für den Fall, dass die Regel ausgeführt wird
-
Klicken Sie im Apache Flink-Dashboard auf Task Manager, und wählen Sie dann den Taskmanager aus, auf dem Ihr Flink-Job ausgeführt wird:
-
Klicken Sie auf Logs, und suchen Sie nach löst aus mit Variablen
Hinweis: Das Laden der Logs kann einige Minuten dauern.
Wenn Sie eine Log-Zeile wie die folgende für Ihre Regel sehen:
Regel 'PCK.AUTOMIC_RULE_SIMPLE.PUB.SIMPLE.NEW.1' (1181016) löst aus mit Variablen {TEMPERATURE#=32, CITY#=Wien}
können Sie davon ausgehen, dass Ihr "Regel auf Flink"-Cluster ordnungsgemäß funktioniert, eine Regel erfolgreich ausgelöst wurde und die Ereignisdefinitionsvariablen auf die Variablen abgebildet werden, die an der Eingabeaufforderung des AE-Auslösejobs eingegeben wurden.
Hinweis: Wenn die Log-Datei zu groß ist, um sie in den Browser zu laden, können Sie sie in einem Editor öffnen. Die Jobmanager/Taskmanager-Log-Dateien befinden sich im folgenden Verzeichnis:
<AUTOMIC>\External.Resources\flink\flink-1.10.1\log
Schritt 6 – Stellen Sie sicher, dass das Auslöserereignis zurück in das Kafka-Auslöserthema geschrieben wird.
Nachdem Sie in Flink einen Fehler ausgeschlossen haben, sollten Sie sicherstellen, dass das Kafka-Auslöserthema die Meldungen von Flink korrekt transportiert.
Einen Konsolen-Nutzer an das Auslöserthema anfügen
-
Zuerst alle Themen auf Kafka auflisten
kafka-topics --zookeeper <Host>:<Port> --list
Hinweis: Ein Zookeeper-Verbindungsstring muss das Format Host:Port haben. Der standardmäßige Zookeeper-Port ist 2181.
-
Suchen Sie in der ausgegebenen Liste das Auslöserthema, das mit dem folgenden Muster übereinstimmt:
AUTOMIC_<Hash-Wert>_ds-edda_trigger
-
Kopieren Sie den Namen des Auslöserthemas und fügen Sie ihn dann an einen Konsolen-Nutzer an:
kafka-console-consumer --bootstrap-server <Kafka-Host>:<Kafka-Port> --topic AUTOMIC_..._ds-edda_trigger
Hinweis: Der Verbindungsstring für den Kafka-Bootstrap-Server befindet sich in der Analytics Backend-Datei application.properties:
<Automic>\Automation.Platform\Analytics\backend\application.properties
############################
## Einstellungen für die Nachrichten-Queue ##
############################
# Kafka
#######
# Angabe von Kafka-Hosts
kafka.bootstrap_servers=localhost:9092
Ein Auslöserereignis mit Postman oder cURL senden
Ein Auslöserereignis mit der Event Engine REST-API senden. Das folgende Beispiel wurde mit cURL erstellt:
curl -X POST \
http://<backend.endpoint>:<server.port>/analytics/api/v1/events \
-w "\nStatus: %{http_code}\n" \
-H 'Berechtigung: <Ihr begrenzter API-Schlüssel>' \
-H 'Inhaltstyp: application/json' \
-H 'Cache-Steuerung: no-cache' \
-d '{
"type": "EVENTDEF_TEMPERATURE",
"Werte":
{
"Stadt": "Wien",
"Temperatur": 32
}
}
'
Wenn im Auslöserthema neue Elemente angezeigt werden, können Sie sicher sein, dass das Auslöserereignis zurück in das Auslöserthema in Kafka geschrieben wurde.
Beispiel:
Hinweis: Die Daten liegen nicht in einem vom Menschen lesbaren Format vor.