Ich möchte wissen, wie man die gesamte Ausführungszeit für jeden Fluss in Apache Nifi herausfinden/erfassen kann. Gibt es eine Möglichkeit, dies zu tun und sie der Liste der Attribute hinzuzufügen, damit sie über die PutEmail verteilt werden können?Apache Nifi Gesamtausführungszeit
Antwort
Ich glaube, Sie müssten eine benutzerdefinierte Timestamp-Eigenschaft hinzufügen, wenn die Flowdatei empfangen wird, machen Sie den Großteil Ihrer Verarbeitung, dann berechnen Sie eine verstrichene Zeit-Attribut in der E-Mail enthalten. Sie können dies mit zwei UpdateAttribute-Prozessoren tun.
UpdateAttribute, erhielt =
${now():toNumber()}
(tun Verarbeitung)
UpdateAttribute, verstrichene =
${now():toNumber():minus(${received}):format("HH:mm:ss")}
Dies wird die verstrichene Zeit-Format wie " 00: 04: 1 6 "(4 Minuten, 16 Sekunden). Sie können dies in Ihrem PutEmail-Nachrichteninhalt als ${elapsed}
verwenden.
Aber das ist ein bisschen hässlich und gibt nur eine Annäherung an die Bearbeitungszeit. Das NiFi-Provenance-System behält die "Lineage Duration" bei, die die seit der Eingabe der NiFi-Datei vergangene Zeit beschreibt. Dies ist eine weitaus autoritativere Zahl. Aber ich glaube nicht, dass Sie die Dauer der Abstammung von der Ausdruckssprache abfragen können. Sie müssten die Provenance-Daten separat abfragen und analysieren.
James bereitgestellt oben eine hervorragende Erklärung. Eine weitere Anmerkung ist jedoch, dass, anstatt das Hinzufügen eines Attributs für den Zeitstempel, wann die Daten empfangen wurden, können Sie einfach verweisen auf das lineageStartDate
Attribut:
${now():toNumber():minus(${lineageStartDate}):format("HH:mm:ss")}
Dies ist der gleiche Wert, der verwendet wird, um die Linie zu bestimmen, Dauer in der Provenienz.
Nur um klar zu sein, Sie wollen sagen, dass anstatt zu tun: (aktuelle Zeit - Startzeit) wie von @James oben vorgeschlagen, ich direkt LineageStartDate Attribut verwenden könnte, die mir die Dauer des Prozesses geben würde? –
Sollte das '$ {now(): toNumber(): minus ($ {lineageStartDate}) sein: format ("HH: mm: ss")} '? Super, ich wusste nicht, dass das zugänglich war, +1! – James
Wow sorry - ja, das hätte sein sollen: $ {now(): toNumber(): minus ($ {lineageStartDate}): format ("HH: mm: ss")} '. Guter Fang bei meinem Tippfehler :) –
Danke. Ich habe es versucht und es hat funktioniert. Ich konnte damit die Ausführungszeit erfassen. –