

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan metrik kustom dengan Amazon Managed Service untuk Apache Flink
<a name="monitoring-metrics-custom"></a>

Layanan Terkelola untuk Apache Flink memaparkan 19 metrik CloudWatch, termasuk metrik untuk penggunaan dan throughput sumber daya. Selain itu, Anda dapat membuat metrik sendiri untuk melacak data khusus aplikasi, seperti memproses peristiwa atau mengakses sumber daya eksternal.

**Topics**
+ [Cara kerjanya](#monitoring-metrics-custom-howitworks)
+ [Lihat contoh untuk membuat kelas pemetaan](#monitoring-metrics-custom-examples)
+ [Lihat metrik khusus](#monitoring-metrics-custom-examples-viewing)

## Cara kerjanya
<a name="monitoring-metrics-custom-howitworks"></a>

Metrik kustom dalam Layanan Terkelola untuk Apache Flink menggunakan sistem metrik Apache Flink. Metrik Apache Flink memiliki atribut berikut:
+ **Type** (Tipe): Tipe metrik menjelaskan cara mengukur dan melaporkan data. Tipe metrik Apache Flink yang tersedia termasuk Count, Gauge, Histogram, dan Meter. Untuk informasi selengkapnya tentang tipe metrik Apache Flink, lihat [Tipe Metrik](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html#metric-types).
**catatan**  
AWS CloudWatch Metrik tidak mendukung jenis metrik Histogram Apache Flink. CloudWatch hanya dapat menampilkan metrik Apache Flink dari tipe Count, Gauge, dan Meter.
+ **Lingkup:** Ruang lingkup metrik terdiri dari pengenal dan satu set pasangan nilai kunci yang menunjukkan bagaimana metrik akan dilaporkan. CloudWatch Pengidentifikasi metrik terdiri dari hal berikut:
  + Cakupan sistem, yang menunjukkan tingkat tempat metrik dilaporkan (misalnya Operator).
  + Cakupan pengguna, yang menentukan atribut seperti variabel pengguna atau nama grup metrik. Atribut ini didefinisikan menggunakan [https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-java.lang.String-](https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-java.lang.String-)atau [https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-](https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-).

  Untuk informasi selengkapnya tentang cakupan metrik, lihat [Cakupan](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html#scope).

Untuk informasi selengkapnya tentang metrik Apache Flink, lihat [Metrik](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html) di [Dokumentasi Apache Flink](https://nightlies.apache.org/flink/flink-docs-release-1.15/).

Untuk membuat metrik kustom di Managed Service for Apache Flink, Anda dapat mengakses sistem metrik Apache Flink dari fungsi pengguna apa pun yang diperluas dengan menelepon. `RichFunction` [https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/api/common/functions/RuntimeContext.html#getMetricGroup--](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/api/common/functions/RuntimeContext.html#getMetricGroup--) Metode ini mengembalikan [MetricGroup](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/metrics/MetricGroup.html)objek yang dapat Anda gunakan untuk membuat dan mendaftarkan metrik kustom. Layanan Terkelola untuk Apache Flink melaporkan semua metrik yang dibuat dengan kunci grup. `KinesisAnalytics` CloudWatch Metrik kustom yang Anda tentukan memiliki karakteristik sebagai berikut:
+ Metrik kustom Anda memiliki nama metrik dan nama grup. [Nama-nama ini harus terdiri dari karakter alfanumerik menurut aturan penamaan Prometheus.](https://prometheus.io/docs/instrumenting/writing_exporters/#naming)
+ Atribut yang Anda tentukan dalam lingkup pengguna (kecuali untuk grup `KinesisAnalytics` metrik) diterbitkan sebagai CloudWatch dimensi.
+ Metrik kustom dipublikasikan di tingkat `Application` secara default.
+ Dimensi (Task/ Operator /Paralelism) ditambahkan ke metrik berdasarkan tingkat pemantauan aplikasi. Anda mengatur tingkat pemantauan aplikasi menggunakan [MonitoringConfiguration](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_MonitoringConfiguration.html)parameter [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html)tindakan, atau [MonitoringConfigurationUpdate](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html)parameter [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)tindakan.

## Lihat contoh untuk membuat kelas pemetaan
<a name="monitoring-metrics-custom-examples"></a>

Contoh kode berikut menunjukkan cara membuat kelas pemetaan yang membuat dan menambah metrik kustom, dan bagaimana menerapkan kelas pemetaan dalam aplikasi Anda dengan menambahkannya ke objek. `DataStream`

### Rekam hitungan metrik kustom
<a name="monitoring-metrics-custom-examples-recordcount"></a>

Contoh kode berikut menunjukkan cara membuat kelas pemetaan yang membuat metrik yang menghitung catatan dalam aliran data (fungsionalitas yang sama seperti metrik `numRecordsIn`):

```
    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;
        }
    }
```

Dalam contoh sebelumnya, variabel `valueToExpose` ditingkatkan untuk setiap catatan yang diproses aplikasi. 

Setelah menentukan kelas pemetaan, Anda selanjutnya membuat aliran dalam aplikasi yang mengimplementasikan peta:

```
DataStream<String> noopMapperFunctionAfterFilter =
    kinesisProcessed.map(new NoOpMapperFunction("FilteredRecords"));
```

Untuk kode lengkap aplikasi ini, lihat [Aplikasi Metrik Kustom Hitungan Catatan](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/CustomMetrics/RecordCount).

### Metrik kustom hitungan kata
<a name="monitoring-metrics-custom-examples-wordcount"></a>

Contoh kode berikut menunjukkan cara membuat kelas pemetaan yang membuat metrik yang menghitung kata dalam aliran data:

```
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));
                    }
                }
            }
        }
```

Dalam contoh sebelumnya, variabel `counter` ditingkatkan untuk setiap kata yang diproses aplikasi. 

Setelah menentukan kelas pemetaan, Anda selanjutnya membuat aliran dalam aplikasi yang mengimplementasikan peta:

```
// 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());
```

Untuk kode lengkap aplikasi ini, lihat [Aplikasi Metrik Kustom Hitungan Kata](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/CustomMetrics/WordCount).

## Lihat metrik khusus
<a name="monitoring-metrics-custom-examples-viewing"></a>

Metrik khusus untuk aplikasi Anda muncul di konsol CloudWatch Metrik di **AWS/KinesisAnalytics**dasbor, di bawah grup metrik **Aplikasi**. 