

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

# Solusi untuk memantau aplikasi JVM dengan Amazon Managed Grafana
<a name="solution-jvm"></a>

Aplikasi yang dibangun dengan Java Virtual Machines (JVM) memiliki kebutuhan pemantauan khusus. Halaman ini menjelaskan template yang menyediakan solusi untuk memantau JVM-based aplikasi yang berjalan di klaster Amazon EKS Anda. Solusinya dapat diinstal menggunakan [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

**catatan**  
Solusi ini menyediakan pemantauan untuk aplikasi JVM. Jika aplikasi JVM Anda secara khusus merupakan aplikasi Apache Kafka, Anda dapat memilih untuk menggunakan [solusi pemantauan Kafka, yang mencakup pemantauan](solution-kafka.md) JVM dan Kafka.

Solusi ini mengkonfigurasi:
+ Layanan Terkelola Amazon Anda untuk ruang kerja Prometheus untuk menyimpan metrik Java Virtual Machine (JVM) dari kluster Amazon EKS Anda.
+ Mengumpulkan metrik JVM tertentu menggunakan CloudWatch agen, serta add-on agen. CloudWatch Metrik dikonfigurasi untuk dikirim ke Layanan Terkelola Amazon untuk ruang kerja Prometheus.
+ Ruang kerja Grafana Terkelola Amazon Anda untuk menarik metrik tersebut, dan membuat dasbor untuk membantu Anda memantau klaster Anda.

**catatan**  
Solusi ini menyediakan metrik JVM untuk aplikasi Anda yang berjalan di Amazon EKS, tetapi tidak menyertakan metrik Amazon EKS. Anda juga dapat menggunakan [solusi Observability untuk memantau Amazon EKS](solution-eks.md) guna melihat metrik dan peringatan untuk klaster Amazon EKS Anda.

## Tentang solusi ini
<a name="solution-jvm-about"></a>

Solusi ini mengonfigurasi ruang kerja Grafana Terkelola Amazon untuk menyediakan metrik untuk aplikasi Java Virtual Machine (JVM) Anda. Metrik digunakan untuk menghasilkan dasbor yang membantu Anda mengoperasikan aplikasi secara lebih efektif dengan memberikan wawasan tentang kesehatan dan kinerja aplikasi.

Gambar berikut menunjukkan contoh salah satu dasbor yang dibuat oleh solusi ini.

![Gambar yang menunjukkan contoh folder dasbor Grafana yang dibuat menggunakan solusi ini.](http://docs.aws.amazon.com/id_id/grafana/latest/userguide/images/jvm-solution-overview.png)


Metrik dikikis dengan interval gesekan 1 menit. Dasbor menampilkan metrik yang dikumpulkan menjadi 1 menit, 5 menit, atau lebih, berdasarkan metrik tertentu.

Untuk daftar metrik yang dilacak oleh solusi ini, lihat. [Daftar metrik yang dilacak](#solution-jvm-metrics)

## Biaya
<a name="solution-jvm-costs"></a>

Solusi ini membuat dan menggunakan sumber daya di ruang kerja Anda. Anda akan dikenakan biaya untuk penggunaan standar sumber daya yang dibuat, termasuk:
+ Akses ruang kerja Grafana yang Dikelola Amazon oleh pengguna. Untuk informasi selengkapnya tentang harga, lihat harga [Grafana Terkelola Amazon](https://aws.amazon.com/grafana/pricing/).
+ Layanan Terkelola Amazon untuk konsumsi dan penyimpanan metrik Prometheus, dan analisis metrik (pemrosesan sampel kueri). Jumlah metrik yang digunakan oleh solusi ini bergantung pada konfigurasi dan penggunaan aplikasi Anda.

  *Anda dapat melihat metrik konsumsi dan penyimpanan di Layanan Terkelola Amazon untuk Prometheus menggunakan Untuk informasi CloudWatch selengkapnya, lihat metrik [CloudWatchdi](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) Panduan Pengguna Layanan Terkelola Amazon untuk Prometheus.*

  Anda dapat memperkirakan biaya menggunakan kalkulator harga di halaman harga [Amazon Managed Service untuk Prometheus](https://aws.amazon.com/prometheus/pricing/). Jumlah metrik akan tergantung pada jumlah node di cluster Anda, dan metrik yang dihasilkan aplikasi Anda.
+ Biaya jaringan. Anda mungkin dikenakan biaya AWS jaringan standar untuk lintas zona ketersediaan, Wilayah, atau lalu lintas lainnya.

Kalkulator harga, tersedia dari halaman harga untuk setiap produk, dapat membantu Anda memahami potensi biaya untuk solusi Anda. Informasi berikut dapat membantu mendapatkan biaya dasar, untuk solusi yang berjalan di zona ketersediaan yang sama dengan cluster Amazon EKS.


| Produk | Kalkulator metrik | Nilai | 
| --- | --- | --- | 
| Amazon Managed Service for Prometheus | Seri aktif | 50 (per pod aplikasi) | 
|  | Interval Pengumpulan Rata-Rata | 60 (detik) | 
| Amazon Managed Grafana | Jumlah yang aktif editors/administrators | 1 (atau lebih, berdasarkan pengguna Anda) | 

Angka-angka ini adalah nomor dasar untuk aplikasi JVM yang berjalan di Amazon EKS. Ini akan memberi Anda perkiraan biaya dasar. Saat Anda menambahkan pod ke aplikasi Anda, biayanya akan bertambah, seperti yang ditunjukkan. Biaya ini mengabaikan biaya penggunaan jaringan, yang akan bervariasi berdasarkan apakah ruang kerja Grafana yang Dikelola Amazon, Layanan Terkelola Amazon untuk ruang kerja Prometheus, dan kluster Amazon EKS berada di zona ketersediaan yang sama, dan VPN. Wilayah AWS

## Prasyarat
<a name="solution-jvm-prerequisites"></a>

Solusi ini mengharuskan Anda melakukan hal berikut sebelum menggunakan solusinya.

1. Anda harus memiliki atau **membuat klaster Amazon Elastic Kubernetes Service** yang ingin Anda pantau, dan cluster harus memiliki setidaknya satu node. Cluster harus memiliki akses endpoint server API yang disetel untuk menyertakan akses pribadi (juga dapat mengizinkan akses publik).

   [Mode otentikasi](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam) harus menyertakan akses API (dapat diatur ke salah satu `API` atau`API_AND_CONFIG_MAP`). Hal ini memungkinkan penerapan solusi untuk menggunakan entri akses.

   Berikut ini harus diinstal di cluster (true secara default saat membuat cluster melalui konsol, tetapi harus ditambahkan jika Anda membuat cluster menggunakan AWS API atau AWS CLI): Amazon EKS Pod Identity Agent, AWS CNI, CoreDNS Kube-proxy , dan Amazon EBS CSI AddOns Driver (Driver Amazon EBS AddOn CSI secara teknis tidak diperlukan untuk solusi, tetapi diperlukan untuk beberapa aplikasi JVM).

   *Simpan nama Cluster untuk menentukan nanti*. Ini dapat ditemukan di detail cluster di konsol Amazon EKS.
**catatan**  
Untuk detail tentang cara membuat klaster Amazon EKS, lihat [Memulai Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).

1. Anda harus menjalankan aplikasi di Java Virtual Machines di kluster Amazon EKS Anda.

1. Anda harus **membuat Layanan Terkelola Amazon untuk ruang kerja Prometheus** sama Akun AWS dengan kluster Amazon EKS Anda. Untuk detailnya, lihat [Membuat ruang kerja](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) di *Amazon Managed Service for Prometheus* User Guide.

   *Simpan Layanan Terkelola Amazon untuk ARN ruang kerja Prometheus untuk ditentukan nanti.*

1. Anda harus **membuat ruang kerja Grafana Terkelola Amazon dengan** Grafana versi 9 atau yang lebih baru, sama dengan cluster Amazon EKS Wilayah AWS Anda. Untuk detail tentang membuat ruang kerja baru, lihat[Buat ruang kerja Grafana yang Dikelola Amazon](AMG-create-workspace.md).

   Peran ruang kerja harus memiliki izin untuk mengakses Amazon Managed Service untuk Prometheus dan Amazon API. CloudWatch Cara termudah untuk melakukannya adalah dengan menggunakan [Service-managedizin](AMG-manage-permissions.md) dan memilih Amazon Managed Service untuk Prometheus dan. CloudWatch Anda juga dapat menambahkan [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess)kebijakan [AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess)dan kebijakan secara manual ke peran IAM ruang kerja Anda.

   *Simpan ID ruang kerja Grafana Terkelola Amazon dan titik akhir untuk ditentukan nanti.* ID ada dalam bentuk`g-123example`. ID dan titik akhir dapat ditemukan di konsol Grafana Terkelola Amazon. Endpoint adalah URL untuk ruang kerja, dan menyertakan ID. Misalnya, `https://g-123example.grafana-workspace.<region>.amazonaws.com/`.

**catatan**  
Meskipun tidak sepenuhnya diperlukan untuk menyiapkan solusi, Anda harus menyiapkan autentikasi pengguna di ruang kerja Grafana Terkelola Amazon sebelum pengguna dapat mengakses dasbor yang dibuat. Untuk informasi selengkapnya, lihat [Mengautentikasi pengguna di ruang kerja Grafana Terkelola Amazon](authentication-in-AMG.md).

## Menggunakan solusi ini
<a name="solution-jvm-use"></a>

Solusi ini mengonfigurasi AWS infrastruktur untuk mendukung metrik pelaporan dan pemantauan dari aplikasi Java Virtual Machine (JVM) yang berjalan di klaster Amazon EKS. Anda dapat menginstalnya menggunakan [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

**catatan**  
Langkah-langkah di sini mengasumsikan bahwa Anda memiliki lingkungan dengan AWS CLI, dan AWS CDK, dan keduanya [Node.js](https://nodeja.org/)dan [NPM](https://docs.npmjs.com/) diinstal. Anda akan menggunakan `make` dan `brew` menyederhanakan build dan tindakan umum lainnya.

**Untuk menggunakan solusi ini untuk memantau cluster Amazon EKS dengan AWS CDK**

1. Pastikan Anda telah menyelesaikan semua langkah [prasyarat](#solution-jvm-prerequisites).

1. Unduh semua file untuk solusi dari Amazon S3. File-file tersebut berada di`s3://aws-observability-solutions/JVM_EKS/OSS/CDK/v1.0.0/iac`, dan Anda dapat mengunduhnya dengan perintah Amazon S3 berikut. Jalankan perintah ini dari folder di lingkungan baris perintah Anda.

   ```
   aws s3 sync s3://aws-observability-solutions/JVM_EKS/OSS/CDK/v1.0.0/iac/ .
   ```

   Anda tidak perlu memodifikasi file-file ini.

1. Di lingkungan baris perintah Anda (dari folder tempat Anda mengunduh file solusi), jalankan perintah berikut.

   Siapkan variabel lingkungan yang dibutuhkan. Ganti{{REGION}},{{AMG\_ENDPOINT}},{{EKS\_CLUSTER}}, dan {{AMP\_ARN}} dengan Wilayah AWS, titik akhir ruang kerja Grafana yang Dikelola Amazon (di formulir)`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`, nama klaster Amazon EKS, dan Layanan Terkelola Amazon untuk ARN ruang kerja Prometheus.

   ```
   export AWS_REGION={{REGION}}
   export AMG_ENDPOINT={{AMG_ENDPOINT}}
   export EKS_CLUSTER_NAME={{EKS_CLUSTER}}
   export AMP_WS_ARN={{AMP_ARN}}
   ```

1. Buat anotasi yang dapat digunakan oleh solusi. Anda dapat memilih untuk membuat anotasi namespace, deployment, statefulset, daemonset, atau pod Anda secara langsung. Solusi JSM membutuhkan dua anotasi. Anda akan menggunakan `kubectl` anotasi sumber daya Anda dengan perintah berikut:

   ```
   kubectl annotate {{<resource-type>}} {{<resource-value>}} instrumentation.opentelemetry.io/inject-java=true
   kubectl annotate {{<resource-type>}} {{<resource-value>}} cloudwatch.aws.amazon.com/inject-jmx-jvm=true
   ```

   Ganti {{<resource-type>}} dan {{<resource-value>}} dengan nilai yang benar untuk sistem Anda. Misalnya, untuk membuat anotasi `foo` penerapan Anda, perintah pertama Anda adalah:

   ```
   kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
   ```

1. Buat token akun layanan dengan akses ADMIN untuk memanggil Grafana HTTP API. Lihat perinciannya di [Menggunakan akun layanan](v12-authenticating-grafana-apis.md#v12-service-accounts). Anda dapat menggunakan perintah berikut untuk membuat token. AWS CLI Anda harus mengganti {{GRAFANA\_ID}} dengan ID ruang kerja Grafana Anda (itu akan dalam formulir). `g-123example` Kunci ini akan kedaluwarsa setelah 7.200 detik, atau 2 jam. Anda dapat mengubah waktu (`seconds-to-live`), jika perlu. Penyebaran memakan waktu kurang dari satu jam.

   ```
   # creates a new service account (optional: you can use an existing account)
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id {{GRAFANA_ID}} \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
   
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   Buat API Key tersedia AWS CDK dengan menambahkannya AWS Systems Manager dengan perintah berikut. Ganti {{AWS\_REGION}} dengan Region tempat solusi Anda akan berjalan (dalam formulir`us-east-1`).

   ```
   aws ssm put-parameter --name "/observability-aws-solution-jvm-eks/grafana-api-key" \
     --type "SecureString" \
     --value $AMG_API_KEY \
     --region {{AWS_REGION}} \
     --overwrite
   ```

1. Jalankan `make` perintah berikut, yang akan menginstal dependensi lain untuk proyek.

   ```
   make deps
   ```

1. Akhirnya, jalankan AWS CDK proyek:

   ```
   make build && make pattern aws-observability-solution-jvm-eks-$EKS_CLUSTER_NAME deploy
   ```

1. [Opsional] Setelah pembuatan tumpukan selesai, Anda dapat menggunakan lingkungan yang sama untuk membuat lebih banyak instance tumpukan untuk aplikasi JVM lain yang berjalan di kluster Amazon EKS di wilayah yang sama, selama Anda menyelesaikan prasyarat lain untuk masing-masing (termasuk Grafana Terkelola Amazon terpisah dan Layanan Terkelola Amazon untuk ruang kerja Prometheus). Anda perlu mendefinisikan ulang `export` perintah dengan parameter baru.

Saat pembuatan tumpukan selesai, ruang kerja Grafana Terkelola Amazon Anda akan diisi dengan dasbor yang menampilkan metrik untuk aplikasi Anda dan klaster Amazon EKS. Diperlukan beberapa menit agar metrik ditampilkan, saat metrik dikumpulkan.

## Daftar metrik yang dilacak
<a name="solution-jvm-metrics"></a>

Solusi ini mengumpulkan metrik dari aplikasi Anda JVM-based . Metrik tersebut disimpan di Amazon Managed Service untuk Prometheus, dan kemudian ditampilkan di dasbor Grafana Terkelola Amazon.

Metrik berikut dilacak dengan solusi ini.
+ jvm.classes.loaded
+ jvm.gc.collections.count
+ jvm.gc.collections.berlalu
+ jvm.memory.heap.init
+ jvm.memory.heap.max
+ jvm.memory.heap.used
+ jvm.memory.heap.commit
+ jvm.memory.nonheap.init
+ jvm.memory.nonheap.max
+ jvm.memory.nonheap.used
+ jvm.memory.nonheap.commit
+ jvm.memory.pool.init
+ jvm.memory.pool.max
+ jvm.memory.pool.used
+ jvm.memory.pool.commit
+ jvm.threads.count

## Pemecahan masalah
<a name="solution-jvm-troubleshooting"></a>

Ada beberapa hal yang dapat menyebabkan penyiapan proyek gagal. Pastikan untuk memeriksa yang berikut ini.
+ Anda harus menyelesaikan semua [Prasyarat](#solution-jvm-prerequisites) sebelum menginstal solusi.
+ Cluster harus memiliki setidaknya satu node di dalamnya sebelum mencoba membuat solusi atau mengakses metrik.
+ Cluster Amazon EKS Anda harus menginstal`AWS CNI`, `CoreDNS` dan `kube-proxy` add-on. Jika tidak diinstal, solusinya tidak akan berfungsi dengan benar. Mereka diinstal secara default, saat membuat cluster melalui konsol. Anda mungkin perlu menginstalnya jika cluster dibuat melalui AWS SDK.
+ Waktu penginstalan pod Amazon EKS habis. Ini bisa terjadi jika tidak ada kapasitas node yang cukup tersedia. Ada beberapa penyebab masalah ini, termasuk:
  + Cluster Amazon EKS diinisialisasi dengan Fargate, bukan Amazon EC2. Proyek ini membutuhkan Amazon EC2.
  + Node [tercemar](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) dan karena itu tidak tersedia.

    Anda dapat menggunakan `kubectl describe node {{NODENAME}} | grep Taints` untuk memeriksa noda. Kemudian `kubectl taint node {{NODENAME}} {{TAINT_NAME}}-` untuk menghapus noda. Pastikan untuk menyertakan nama `-` setelah noda.
  + Node telah mencapai batas kapasitas. Dalam hal ini Anda dapat membuat node baru atau meningkatkan kapasitas.
+ Anda tidak melihat dasbor apa pun di Grafana: menggunakan ID ruang kerja Grafana yang salah.

  Jalankan perintah berikut untuk mendapatkan informasi tentang Grafana:

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  Anda dapat memeriksa hasil untuk URL ruang kerja yang benar. Jika bukan yang Anda harapkan, gunakan kembali dengan ID ruang kerja yang benar.

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://{{g-123example}}.grafana-workspace.{{aws-region}}.amazonaws.com
  Status:
    Admin URL:  https://{{g-123example}}.grafana-workspace.{{aws-region}}.amazonaws.com
    Dashboards:
      ...
  ```
+ Anda tidak melihat dasbor apa pun di Grafana: Anda menggunakan kunci API yang kedaluwarsa.

  Untuk mencari kasus ini, Anda harus mendapatkan operator grafana dan memeriksa log untuk kesalahan. Dapatkan nama operator Grafana dengan perintah ini:

  ```
  kubectl get pods -n grafana-operator
  ```

  Ini akan mengembalikan nama operator, misalnya:

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  {{grafana-operator-1234abcd5678ef90}}   1/1     Running   0          1h2m
  ```

  Gunakan nama operator dalam perintah berikut:

  ```
  kubectl logs {{grafana-operator-1234abcd5678ef90}} -n grafana-operator
  ```

  Pesan galat seperti berikut ini menunjukkan kunci API yang kedaluwarsa:

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  Dalam hal ini, buat kunci API baru dan terapkan solusinya lagi. Jika masalah berlanjut, Anda dapat memaksa sinkronisasi dengan menggunakan perintah berikut sebelum menerapkan kembali:

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ Parameter SSM tidak ada. Jika Anda melihat kesalahan seperti berikut ini, jalankan `cdk bootstrap` dan coba lagi.

  ```
  Deployment failed: Error: aws-observability-solution-jvm-eks-{{$EKS_CLUSTER_NAME}}: SSM 
  parameter /cdk-bootstrap/{{xxxxxxx}}/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```