Amazon Managed Service für Apache Flink war zuvor als Amazon Kinesis Data Analytics für Apache Flink bekannt.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Managed Service für Apache Flink stellt 19 Metriken zur Verfügung CloudWatch, darunter Metriken für Ressourcennutzung und Durchsatz. Darüber hinaus können Sie Ihre eigenen Metriken erstellen, um anwendungsspezifische Daten zu verfolgen, z. B. Verarbeitungsereignisse oder den Zugriff auf externe Ressourcen.
Dieses Thema enthält die folgenden Abschnitte:
Funktionsweise
Benutzerdefinierte Metriken in Managed Service für Apache Flink verwenden das Apache Flink-Metriksystem. Apache Flink-Metriken haben die folgenden Attribute:
Typ: Der Typ einer Metrik beschreibt, wie Daten gemessen und gemeldet werden. Zu den verfügbaren Apache Flink-Metriktypen gehören Anzahl, Diagramm, Histogramm und Messung. Weitere Informationen zu den Metriktypen von Apache Flink finden Sie unter Metriktypen.
Anmerkung
AWS CloudWatch Metrics unterstützt den Metriktyp Histogramm Apache Flink nicht. CloudWatch kann nur Apache Flink-Metriken der Typen Count, Gauge und Meter anzeigen.
Umfang: Der Geltungsbereich einer Metrik besteht aus ihrer Kennung und einer Reihe von Schlüssel-Wert-Paaren, die angeben, wie die Metrik gemeldet werden soll. CloudWatch Die Kennung einer Metrik enthält die folgenden Elemente:
Einen Systembereich, der die Ebene angibt, auf der die Metrik gemeldet wird (z. B. Operator).
Einen Benutzerbereich, der Attribute wie Benutzervariablen oder Metrikgruppennamen definiert. Diese Attribute werden mit
MetricGroup.addGroup(key, value)
oder MetricGroup.addGroup(name)
definiert.
Weitere Informationen zu Metrikbereichen finden Sie unter Bereich
.
Weitere Informationen zu Apache Flink-Metriken finden Sie unter Metriken
Um eine benutzerdefinierte Metrik in Ihrem Managed Service für Apache Flink zu erstellen, können Sie von jeder Benutzerfunktion aus, die RichFunction
erweitert, durch Aufrufen von GetMetricGroup
KinesisAnalytics
für erstellt wurden. CloudWatch Benutzerdefinierte Metriken, die Sie definieren, weisen folgende Merkmale auf:
Ihre benutzerdefinierte Metrik hat einen Metriknamen und einen Gruppennamen. Diese Namen müssen gemäß den Benennungsregeln von Prometheus
aus alphanumerischen Zeichen bestehen. Attribute, die Sie im Benutzerbereich definieren (mit Ausnahme der
KinesisAnalytics
Metrikgruppe), werden als Dimensionen veröffentlicht. CloudWatchBenutzerdefinierte Metriken werden standardmäßig auf der
Application
-Ebene veröffentlicht.Dimensionen (Aufgabe/Operator/Parallelismus) werden der Metrik auf der Grundlage der Überwachungsebene der Anwendung hinzugefügt. Sie legen die Überwachungsebene der Anwendung mithilfe des MonitoringConfigurationAktionsparameters oder des CreateApplicationMonitoringConfigurationUpdateAktionsparameters oder der UpdateApplicationAktion fest.
Sehen Sie sich Beispiele für die Erstellung einer Mapping-Klasse an
Die folgenden Codebeispiele zeigen, wie Sie eine Mapping-Klasse erstellen, die eine benutzerdefinierte Metrik erstellt und inkrementiert, und wie Sie die Mapping-Klasse in Ihrer Anwendung implementieren, indem Sie sie einem DataStream
Objekt hinzufügen.
Benutzerdefinierte Metrik für die Anzahl der Datensätze
Das folgende Codebeispiel zeigt, wie eine Mapping-Klasse erstellt wird, die eine Metrik erstellt, die Datensätze in einem Datenstrom zählt (dieselbe Funktionalität wie die numRecordsIn
-Metrik):
private static class NoOpMapperFunction extends RichMapFunction<String, String> {
private transient int valueToExpose = 0;
private final String customMetricName;
public NoOpMapperFunction(final String customMetricName) {
this.customMetricName = customMetricName;
}
@Override
public void open(Configuration config) {
getRuntimeContext().getMetricGroup()
.addGroup("KinesisAnalytics")
.addGroup("Program", "RecordCountApplication")
.addGroup("NoOpMapperFunction")
.gauge(customMetricName, (Gauge<Integer>) () -> valueToExpose);
}
@Override
public String map(String value) throws Exception {
valueToExpose++;
return value;
}
}
Im vorherigen Beispiel wird die valueToExpose
-Variable für jeden Datensatz, den die Anwendung verarbeitet, inkrementiert.
Nachdem Sie Ihre Mapping-Klasse definiert haben, erstellen Sie einen anwendungsinternen Stream, der die Map implementiert:
DataStream<String> noopMapperFunctionAfterFilter =
kinesisProcessed.map(new NoOpMapperFunction("FilteredRecords"));
Den vollständigen Code für diese Anwendung finden Sie unter Datensatzanzahl benutzerdefinierte Metrikanwendung
Benutzerdefinierte Metrik für die Anzahl der Wörter
Das folgende Codebeispiel zeigt, wie eine Mapping-Klasse erstellt wird, die eine Metrik erstellt, die Wörter in einem Datenstrom zählt:
private static final class Tokenizer extends RichFlatMapFunction<String, Tuple2<String, Integer>> {
private transient Counter counter;
@Override
public void open(Configuration config) {
this.counter = getRuntimeContext().getMetricGroup()
.addGroup("KinesisAnalytics")
.addGroup("Service", "WordCountApplication")
.addGroup("Tokenizer")
.counter("TotalWords");
}
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>>out) {
// normalize and split the line
String[] tokens = value.toLowerCase().split("\\W+");
// emit the pairs
for (String token : tokens) {
if (token.length() > 0) {
counter.inc();
out.collect(new Tuple2<>(token, 1));
}
}
}
}
Im vorherigen Beispiel wird die counter
-Variable für jedes Wort, das die Anwendung verarbeitet, inkrementiert.
Nachdem Sie Ihre Mapping-Klasse definiert haben, erstellen Sie einen anwendungsinternen Stream, der die Map implementiert:
// Split up the lines in pairs (2-tuples) containing: (word,1), and
// group by the tuple field "0" and sum up tuple field "1"
DataStream<Tuple2<String, Integer>> wordCountStream = input.flatMap(new Tokenizer()).keyBy(0).sum(1);
// Serialize the tuple to string format, and publish the output to kinesis sink
wordCountStream.map(tuple -> tuple.toString()).addSink(createSinkFromStaticConfig());
Den vollständigen Code für diese Anwendung finden Sie unter Wortanzahl benutzerdefinierte Metrikanwendung
Benutzerdefinierte Metriken anzeigen
Benutzerdefinierte Metriken für Ihre Anwendung werden in der CloudWatch Metrics-Konsole im AWS/KinesisAnalyticsDashboard unter der Metrikgruppe „Anwendung“.