Safe FME Server Monitoring (API v3)

Mögliche Überprüfungen

  • FME Server Health Check

  • FME Server Engines am Server verfügbar

  • FME Server Engines für Jobausführung nutzbar

  • Prüfung auf verspätete FME Server Jobausführung

  • Job-Ausführung-Erfolgscheck von FME Server Schedules

Durchführung

Fast sämtliche FME Server Prüfungen sind eine Kombination aus einem bestimmten Request und der Formulierung von spezifischen Erwartungen, die an den FME Server gemacht werden. Wird zum Beispiel die Verfügbarkeit von FME Server Engines geprüft, so muss der Anwender über eine expectation definieren, wieviele Engines am Server erwartet werden.

FME Server Health Check

Erzeugen Sie einen Monitoring-Dienst, geben diesem einen Namen, wählen als Typ Safe FME Server (API v3) und definieren die Http-Adresse des FME Servers (z.B. https://fmeserver.<myhost>.org). Üblicherweise muss auch vorher ein Credential-Template zur Speicherung von Nutzer und Passwort angelegt werden, da FME Server zugriffsgeschützt ist. In den Standardanfragen befindet sich ein Eintrag Health Check, der den richtigen Request definiert.

FME Server Engines am Server verfügbar

Um bei einem Ausfall von am Server registrierten Engines benachrichtigt zu werden, muss die Definition einer Expectation erfolgen. Die folgende Expectation erwartet zwei Engine-Instanzen am FME Server:

{"type" : "FmeEngineCountExpectation", "content":[2]}
fme engine count

In der Definition des Monitoring Services kann nun ein weiterer Job angelegt und mit der Standardanfrage Engine Check den korrekten Request zugewiesen bekommen. Um die zuvor angelegte Expectation für diese Job zu aktivieren, muss auf dem Tab Dienstgüte dieses Jobs der entsprechende Eintrag selektiert werden.

350

FME Server Engines für Jobausführung nutzbar

Die verfügbare Kapazität von für die Jobausführung freien Server Engines kann über den selben Monitoring Job und über eine zusätzliche Expectation definiert werden. Im unteren Beispiel wird erwartet, dass zum Prüfzeitpunkt eine Engine keinen Job ausführt.

{"type" : "FmeEngineAvailableExpectation", "content":[1]}

Prüfung auf verspätete FME Server Jobausführung

Für die Prüfung von verspäteten Jobs (in Ausführung oder in der Warteschlange) wird die FmeJobTimeShiftExpectation verwendet. Diese erlaubt die Prüfung von beliebigen Zeitinformationen innerhalb eines FME Job-Items in Relation zum aktuellen Zeitpunkt und einer Nutzer definierten Dauer. Im Abschnitt unten ist ein FME Job Item aus der Warteschlange dargestellt.

{
	"request": {
		"publishedParameters": [
			{
				"name": "FME_SECURITY_ROLES",
				"raw": "fmeadmin fmesuperuser user:admin"
			},
			{
				"name": "FME_SECURITY_USER",
				"raw": "admin"
			}
		],
		"workspacePath": "\"admin_test/test_workspace_1/test_workspace_1.fmw\"",
		"TMDirectives": {
			"rtc": false,
			"ttc": -1,
			"description": "",
			"tag": "admin_test",
			"priority": -1,
			"ttl": -1
		},
		"NMDirectives": {
			"directives": [],
			"successTopics": [],
			"failureTopics": []
		}
	},
	"workspace": "test_workspace_1.fmw",
	"engineHost": "",
	"timeQueued": "2021-02-18T14:00:00+01:00",
	"description": "",
	"repository": "admin_test",
	"userName": "admin",
	"sourceType": "SCHEDULES",
	"id": 80959,
	"sourceName": "admin_test/create_test_log_2",
	"engineName": "",
	"timeSubmitted": "2021-02-18T14:00:00+01:00",
	"status": "QUEUED"
}

Wird nun eine Expecation wie unten dargestellt definiert, so evaluiert service.monitor für jedes FME Job Item den Zeitwert des Feldes timeSubmitted in Bezug zum Zeitwert der Evaluation subtrahiert mit der Zeitdauer aus duration (hier: eine Stunde). Ist current Time - duration > timeSubmitted so wird ein Fehler im Sinne von service.monitor ausgelöst.

{"type" : "FmeJobTimeShiftExpectation", "content":[{"duration":"PT1H","attribute":"timeSubmitted"}]}

Im konkreten Fall bedeutet dies: Ist der Job seit länger als einer Stunde in der Warteschlange, dann sendet service.monitor eine Benachrichtigung über diesen FME Job.

Verwenden Sie timeSubmitted, timeStarted oder timeQueued in Verbindung mit den Standardanfragen Jobs queued und Jobs running, um die gewünschten fachlichen Prüfungen durchzuführen.

Job-Ausführung-Erfolgscheck von FME Server Schedules

Für die kontinuierliche Überwachung von FME Server Schedules bietet sich die FmeScheduleJobExecutionExpectation an. Damit lässt sich der Erfolg von unternehmenskritischen FME Schedules überprüfen.

  1. Zunächst wird die category und der name des Schedules identifiziert

  2. In einem neuen Monitoring Job die Beispielanfrage Schedule check wählen und Kategorie und Namen für den Request ergänzen

  3. Test-Request ausführen und die Periodizität des Schedules identifizieren (z.B. Cron String oder tagesbasierte Ausführung zu definierter Uhrzeit)

  4. Auf Basis der Periodizität des Schedules eine "analoge" Monitoringvorlage entwerfen, in dessen Rhythmus service.monitor ausgeführt werden soll und für dessen Zeitpunkt erwartet wird, dass eine erfolgreiche FME Jobausführung stattgefunden hat.

  5. Eine FmeScheduleJobExecutionExpectation definieren, die zusätzlich eine Zeitdauer definiert, in dessen Zeitrahmen eine erfolgreiche Ausführung stattgefunden haben muss.

Die unten stehende Abbildung zeigt die erfolgreiche (erwartungsgemäße) Prüfung eines FME Jobs, denn die auf Basis der monitoring Job-Ausführung und dem in der Expectation hinterlegtem Zeitwert berechnete Referenzzeit liegt vor dem Startzeitpunkt der letzten FME Jobausführung.

fme schedule expectation de
{"type" : "FmeScheduleJobExecutionExpectation", "content":[{"duration":"PT10M"}]}

Zur konkreten Ausführungszeit des Monitoring-Jobs wird der Schedule von FME Server abgefragt. service.monitor wird dann auf Basis der Schedule-Informationen einen Request an FME Server erzeugen, der die letzte erfolgreiche Jobausführung dieses Jobs (und dessen Startzeit) abfragt. Aufgrund dieser Information kann entschieden werden, ob ein Erwartungsfehler vorliegt oder nicht.

Also: Ist now - duration > timeStarted so wird ein Fehler im Sinne von service.monitor ausgelöst.

Duration-Notation: Diese folgt ISO 8601 "duration format". PT10M bedeutet zum Beispiel eine Zeitdauer von 10 Minuten, PT12H30M5S bedeutet 12 Stunden, 20 Minuten und 5 Sekunden.