

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

# (Opsional) Menyiapkan sampel beban kerja Amazon EKS terkontainer untuk pengujian metrik Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads"></a>

Untuk menguji dukungan metrik Prometheus CloudWatch di Container Insights, Anda dapat menyiapkan satu atau beberapa beban kerja kontainer berikut. CloudWatch Agen dengan dukungan Prometheus secara otomatis mengumpulkan metrik dari masing-masing beban kerja ini. Untuk melihat metrik-metrik yang dikumpulkan secara bawaan, silakan lihat [Metrik Prometheus dikumpulkan oleh agen CloudWatch](ContainerInsights-Prometheus-metrics.md).

Sebelum Anda dapat melakukan instalasi salah satu beban kerja ini, Anda harus melakukan instalasi Helm 3.x dengan memasukkan perintah-perintah berikut:

```
brew install helm
```

Untuk informasi selengkapnya, silakan lihat [Helm](https://helm.sh).

**Topics**
+ [Siapkan AWS App Mesh contoh beban kerja untuk Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-appmesh.md)
+ [Siapkan NGINX dengan lalu lintas sampel di Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-nginx.md)
+ [Siapkan memcached dengan sebuah pengekspor metrik di Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-memcached.md)
+ [Siapkan Java/JMX contoh beban kerja di Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-javajmx.md)
+ [Siapkan HAProxy dengan eksportir metrik di Amazon EKS dan Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-haproxy.md)
+ [Tutorial untuk menambahkan target scrape Prometheus baru: Redis OSS di Amazon EKS dan Kubernetes cluster](ContainerInsights-Prometheus-Setup-redis-eks.md)

# Siapkan AWS App Mesh contoh beban kerja untuk Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh"></a>

Dukungan Prometheus dalam dukungan Container Insights. CloudWatch AWS App Mesh Bagian-bagian berikut akan menjelaskan cara menyiapkan App Mesh.

**Topics**
+ [Siapkan AWS App Mesh contoh beban kerja di klaster Amazon EKS dengan tipe peluncuran EC2 atau klaster Kubernetes](ContainerInsights-Prometheus-Sample-Workloads-appmesh-EKS.md)
+ [Siapkan AWS App Mesh contoh beban kerja di klaster Amazon EKS dengan tipe peluncuran Fargate](ContainerInsights-Prometheus-Sample-Workloads-appmesh-Fargate.md)

# Siapkan AWS App Mesh contoh beban kerja di klaster Amazon EKS dengan tipe peluncuran EC2 atau klaster Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-EKS"></a>

Gunakan petunjuk ini jika Anda menyiapkan App Mesh pada sebuah klaster yang menjalankan Amazon EKS dengan tipe peluncuran EC2, atau sebuah klaster Kubernetes.

## Mengonfigurasi izin IAM
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-iam"></a>

Anda harus menambahkan **AWSAppMeshFullAccess** kebijakan peran IAM untuk grup simpul Amazon EKS atau Kubernetes Anda. Pada Amazon EKS, nama grup simpul ini terlihat mirip dengan `eksctl-integ-test-eks-prometheus-NodeInstanceRole-ABCDEFHIJKL`. Di Kubernetes, mungkin terlihat mirip dengan `nodes.integ-test-kops-prometheus.k8s.local`.

## Melakukan instalasi App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-install"></a>

Untuk melakukan instalasi pengendali App Mesh Kubernetes, ikuti petunjuk-petunjuk yang diuraikan di [Kontroler App Mesh](https://github.com/aws/eks-charts/tree/master/stable/appmesh-controller#app-mesh-controller).

## Melakukan instalasi aplikasi sampel
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-application"></a>

[aws-app-mesh-examples](https://github.com/aws/aws-app-mesh-examples)berisi beberapa penelusuran App Mesh Kubernetes. Untuk tutorial ini, Anda melakukan instalasi untuk sebuah aplikasi warna sampel yang menunjukkan bagaimana rute http dapat menggunakan header untuk mencocokkan permintaan masuk.

**Cara menggunakan sebuah aplikasi App Mesh sampel untuk menguji Wawasan Kontainer**

1. Instal aplikasi dengan menggunakan petunjuk ini: [https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-http-headers](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-http-headers). 

1. Luncurkan sebuah pod curler untuk menghasilkan lalu lintas:

   ```
   kubectl -n default run -it curler --image=tutum/curl /bin/bash
   ```

1. Lakukan curling pada titik akhir yang berbeda dengan mengubah header HTTP. Jalankan perintah curl beberapa kali, sebagaimana yang ditunjukkan:

   ```
   curl -H "color_header: blue" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   
   curl -H "color_header: red" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   
   curl -H "color_header: yellow" front.howto-k8s-http-headers.svc.cluster.local:8080/; echo;
   ```

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di AWS Wilayah tempat klaster Anda berjalan, pilih **Metrik** di panel navigasi. Metrik berada di **ContainerInsights/Prometheus** ruangnama.

1. Untuk melihat peristiwa CloudWatch Log, pilih **Grup log** di panel navigasi. Peristiwa-peristiwa berada dalam grup log ` /aws/containerinsights/your_cluster_name/prometheus ` di dalam log stream `kubernetes-pod-appmesh-envoy`.

## Menghapus lingkungan pengujian App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-delete"></a>

Setelah selesai menggunakan App Mesh dan aplikasi sampel, gunakan perintah berikut untuk menghapus sumber daya yang tidak diperlukan. Menghapus aplikasi sampel dengan memasukkan perintah berikut:

```
cd aws-app-mesh-examples/walkthroughs/howto-k8s-http-headers/
kubectl delete -f _output/manifest.yaml
```

Menghapus pengendali App Mesh dengan memasukkan perintah berikut:

```
helm delete appmesh-controller -n appmesh-system
```

# Siapkan AWS App Mesh contoh beban kerja di klaster Amazon EKS dengan tipe peluncuran Fargate
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-Fargate"></a>

Gunakan petunjuk-petunjuk ini jika Anda hendak menyiapkan App Mesh pada sebuah klaster yang menjalankan Amazon EKS dengan tipe peluncuran Fargate.

## Mengonfigurasi izin IAM
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh--fargate-iam"></a>

Untuk menyiapkan izin IAM, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

```
eksctl create iamserviceaccount --cluster MyCluster \
 --namespace howto-k8s-fargate \
 --name appmesh-pod \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapDiscoverInstanceAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshFullAccess \
 --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapFullAccess \
 --override-existing-serviceaccounts \
 --approve
```

## Melakukan instalasi App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-install"></a>

Untuk melakukan instalasi pengendali App Mesh Kubernetes, ikuti petunjuk-petunjuk yang diuraikan di [Kontroler App Mesh](https://github.com/aws/eks-charts/tree/master/stable/appmesh-controller#app-mesh-controller). Pastikan untuk mengikuti petunjuk-petunjuk untuk Amazon EKS dengan tipe peluncuran Fargate.

## Melakukan instalasi aplikasi sampel
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-application"></a>

[aws-app-mesh-examples](https://github.com/aws/aws-app-mesh-examples)berisi beberapa penelusuran App Mesh Kubernetes. Untuk tutorial ini, Anda melakukan instalasi aplikasi warna sampel yang bekerja untuk klaster Amazon EKS dengan tipe peluncuran Fargate.

**Cara menggunakan sebuah aplikasi App Mesh sampel untuk menguji Wawasan Kontainer**

1. Instal aplikasi dengan menggunakan petunjuk ini: [https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-fargate](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-fargate). 

   Instruksi-instruksi tersebut mengasumsikan bahwa Anda membuat sebuah klaster baru dengan profil Fargate yang benar. Jika Anda ingin menggunakan sebuah klaster Amazon EKS yang telah Anda siapkan, maka Anda dapat menggunakan perintah-perintah berikut untuk menyiapkan klaster tersebut untuk demonstrasi ini. Ganti *MyCluster* dengan nama klaster Anda.

   ```
   eksctl create iamserviceaccount --cluster MyCluster \
    --namespace howto-k8s-fargate \
    --name appmesh-pod \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshEnvoyAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapDiscoverInstanceAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSAppMeshFullAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapFullAccess \
    --override-existing-serviceaccounts \
    --approve
   ```

   ```
   eksctl create fargateprofile --cluster MyCluster \
   --namespace howto-k8s-fargate --name howto-k8s-fargate
   ```

1. Port meneruskan deployment aplikasi depan:

   ```
   kubectl -n howto-k8s-fargate port-forward deployment/front 8080:8080
   ```

1. Lakukan curling pada aplikasi depan:

   ```
   while true; do  curl -s http://localhost:8080/color; sleep 0.1; echo ; done
   ```

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di AWS Wilayah tempat klaster Anda berjalan, pilih **Metrik** di panel navigasi. Metrik berada di **ContainerInsights/Prometheus** ruangnama.

1. Untuk melihat peristiwa CloudWatch Log, pilih **Grup log** di panel navigasi. Peristiwa-peristiwa berada dalam grup log ` /aws/containerinsights/your_cluster_name/prometheus ` di dalam log stream `kubernetes-pod-appmesh-envoy`.

## Menghapus lingkungan pengujian App Mesh
<a name="ContainerInsights-Prometheus-Sample-Workloads-appmesh-fargate-delete"></a>

Setelah selesai menggunakan App Mesh dan aplikasi sampel, gunakan perintah berikut untuk menghapus sumber daya yang tidak diperlukan. Menghapus aplikasi sampel dengan memasukkan perintah berikut:

```
cd aws-app-mesh-examples/walkthroughs/howto-k8s-fargate/
kubectl delete -f _output/manifest.yaml
```

Menghapus pengendali App Mesh dengan memasukkan perintah berikut:

```
helm delete appmesh-controller -n appmesh-system
```

# Siapkan NGINX dengan lalu lintas sampel di Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-nginx"></a>

NGINX adalah sebuah server web yang juga dapat digunakan sebagai penyeimbang beban dan proksi balik. Untuk informasi selengkapnya tentang bagaimana Kubernetes menggunakan NGINX untuk ingress, silakan lihat [kubernetes/ingress-nginx.](https://github.com/kubernetes/ingress-nginx)

**Untuk melakukan instalasi Ingress-NGINX dengan layanan lalu lintas sampel untuk menguji dukungan Prometheus Wawasan Kontainer**

1. Masukkan perintah berikut untuk menambahkan repo ingress-nginx Helm:

   ```
   helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
   ```

1. Masukkan perintah-perintah berikut.

   ```
   kubectl create namespace nginx-ingress-sample
   
   helm install my-nginx ingress-nginx/ingress-nginx \
   --namespace nginx-ingress-sample \
   --set controller.metrics.enabled=true \
   --set-string controller.metrics.service.annotations."prometheus\.io/port"="10254" \
   --set-string controller.metrics.service.annotations."prometheus\.io/scrape"="true"
   ```

1. Periksa apakah layanan-layanan dimulai dengan benar dengan memasukkan perintah berikut:

   ```
   kubectl get service -n nginx-ingress-sample
   ```

   Output dari perintah ini akan menampilkan beberapa kolom, termasuk sebuah kolom `EXTERNAL-IP`.

1. Mengatur variabel `EXTERNAL-IP` terhadap nilai kolom `EXTERNAL-IP` dalam baris pengendali ingress NGINX.

   ```
   EXTERNAL_IP=your-nginx-controller-external-ip
   ```

1. Mulai beberapa lalu lintas NGINX sampel dengan memasukkan perintah berikut. 

   ```
   SAMPLE_TRAFFIC_NAMESPACE=nginx-sample-traffic
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_traffic/nginx-traffic/nginx-traffic-sample.yaml | 
   sed "s/{{external_ip}}/$EXTERNAL_IP/g" | 
   sed "s/{{namespace}}/$SAMPLE_TRAFFIC_NAMESPACE/g" | 
   kubectl apply -f -
   ```

1. Masukkan perintah berikut untuk mengonfirmasi bahwa ketiga pod berada dalam status `Running`.

   ```
   kubectl get pod -n $SAMPLE_TRAFFIC_NAMESPACE
   ```

   Jika mereka berjalan, Anda akan segera melihat metrik di **ContainerInsights/Prometheus** ruangnama.

**Cara menghapus NGINX dan aplikasi lalu lintas sampel**

1. Hapus layanan lalu lintas sampel dengan memasukkan perintah berikut:

   ```
   kubectl delete namespace $SAMPLE_TRAFFIC_NAMESPACE
   ```

1. Hapus egress NGINX dengan nama rilis Helm. 

   ```
   helm uninstall my-nginx --namespace nginx-ingress-sample
   kubectl delete namespace nginx-ingress-sample
   ```

# Siapkan memcached dengan sebuah pengekspor metrik di Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-memcached"></a>

Memcached adalah sebuah sistem caching objek memori sumber terbuka. Untuk informasi selengkapnya, silakan lihat [ Apa itu Memcached?](https://www.memcached.org)

Jika Anda menjalankan memcached pada sebuah klaster dengan tipe peluncuran Fargate, maka Anda perlu meyiapkan profil Fargate sebelum melakukan langkah-langkah dalam prosedur ini. Untuk menyiapkan profilnya, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace memcached-sample --name memcached-sample
```

**Cara melakukan instalasi dengan pengekspor metrik untuk menguji dukungan Wawasan Kontainer Prometheus**

1. Masukkan perintah berikut untuk menambahkan repo:

   ```
   helm repo add bitnami https://charts.bitnami.com/bitnami
   ```

1. Masukkan perintah berikut untuk membuat sebuah namespace baru:

   ```
   kubectl create namespace memcached-sample
   ```

1. Masukkan perintah berikut untuk melakukan instalasi Memcached

   ```
   helm install my-memcached bitnami/memcached --namespace memcached-sample \
   --set metrics.enabled=true \
   --set-string serviceAnnotations.prometheus\\.io/port="9150" \
   --set-string serviceAnnotations.prometheus\\.io/scrape="true"
   ```

1. Masukkan perintah berikut untuk mengonfirmasi keterangan dari layanan yang berjalan:

   ```
   kubectl describe service my-memcached-metrics -n memcached-sample
   ```

   Anda seharusnya melihat dua keterangan berikut:

   ```
   Annotations:   prometheus.io/port: 9150
                  prometheus.io/scrape: true
   ```

**Cara menghapus instalasi memcached**
+ Masukkan perintah-perintah berikut.

  ```
  helm uninstall my-memcached --namespace memcached-sample
  kubectl delete namespace memcached-sample
  ```

# Siapkan Java/JMX contoh beban kerja di Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx"></a>

JMX Exporter adalah sebuah pengekspor Prometheus resmi yang dapat melakukan scraping dan mengekspos JMX mBeans sebagai metrik-metrik Prometheus. Untuk informasi selengkapnya, silakan lihat [prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter).

Wawasan Kontainer dapat mengumpulkan metrik-metrik Prometheus yang telah ditentukan sebelumnya dari Java Virtual Machine (JVM), Java, dan Tomcat (Catalina) dengan menggunakan JMX Exporter.

## Konfigurasi scraping Prometheus bawaan
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-default"></a>

Secara default, CloudWatch agen dengan dukungan Prometheus akan mengikis metrik Java/JMX Prometheus dari setiap pod di kluster Amazon EKS atau Kubernetes. `http://CLUSTER_IP:9404/metrics` Hal ini dilakukan oleh penemuan `role: pod` Prometheus `kubernetes_sd_config`. 9404 adalah port bawaan yang dialokasikan untuk JMX Exporter oleh Prometheus. Untuk informasi selengkapnya tentang penemuan `role: pod`, silakan lihat [ pod](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#pod). Anda dapat mengonfigurasi JMX Exporter untuk mengekspos metrik-metrik sebuah pada port atau metrik\$1path yang berbeda. Jika Anda mengubah port atau jalur, perbarui jmx scrape\$1config default di peta konfigurasi agen. CloudWatch Jalankan perintah berikut untuk mendapatkan konfigurasi Prometheus CloudWatch agen saat ini:

```
kubectl describe cm prometheus-config -n amazon-cloudwatch
```

Bidang yang harus diubah adalah bidang `/metrics` dan `regex: '.*:9404$'`, seperti yang disorot dalam contoh berikut.

```
job_name: 'kubernetes-jmx-pod'
sample_limit: 10000
metrics_path: /metrics
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__address__]
  action: keep
  regex: '.*:9404$'
- action: replace
  regex: (.+)
  source_labels:
```

## Konfigurasi scraping Prometheus lainnya
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-other"></a>

Jika Anda mengekspos aplikasi yang berjalan pada sekumpulan pod dengan pengekspor Java/JMX Prometheus oleh Layanan Kubernetes, maka Anda juga dapat beralih untuk menggunakan penemuan `role: service` atau penemuan `role: endpoint` dari Prometheus `kubernetes_sd_config`. Untuk informasi selengkapnya tentang metode penemuan ini, silakan lihat [ layanan](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#service), [titik akhir](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#endpoints), dan [ <kubernetes\$1sd\$1config>.](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config). 

Lebih banyak label meta disediakan oleh dua mode penemuan layanan ini yang dapat berguna bagi Anda untuk membangun dimensi CloudWatch metrik. Sebagai contoh, Anda dapat mengubah label `__meta_kubernetes_service_name` menjadi `Service` dan memasukkannya ke dalam dimensi metrik Anda. Untuk informasi selengkapnya tentang menyesuaikan CloudWatch metrik dan dimensinya, lihat. [CloudWatch konfigurasi agen untuk Prometheus](ContainerInsights-Prometheus-Setup-configure-ECS.md#ContainerInsights-Prometheus-Setup-cw-agent-config)

## Citra Docker dengan JMX Exporter
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-docker"></a>

Berikutnya, buat sebuah citra Docker. Bagian-bagian berikut memberikan dua contoh Dockerfile.

Setelah membangun citra tersebut, muatkan citra itu ke Amazon EKS atau Kubernetes, dan kemudian jalankan perintah berikut untuk memverifikasi bahwa metrik-metrik Prometheus diekspos oleh `JMX_EXPORTER` di port 9404. Ganti *\$1JAR\$1SAMPLE\$1TRAFFIC\$1POD* dengan nama pod yang sedang berjalan dan ganti *\$1JAR\$1SAMPLE\$1TRAFFIC\$1NAMESPACE* dengan namespace aplikasi Anda. 

Jika Anda menjalankan JMX Exporter pada sebuah klaster dengan tipe peluncuran Fargate, maka Anda juga perlu meyiapkan sebuah profil Fargate sebelum melakukan langkah-langkah dalam prosedur ini. Untuk menyiapkan profilnya, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace $JAR_SAMPLE_TRAFFIC_NAMESPACE\
 --name $JAR_SAMPLE_TRAFFIC_NAMESPACE
```

```
kubectl exec $JAR_SAMPLE_TRAFFIC_POD -n $JARCAT_SAMPLE_TRAFFIC_NAMESPACE -- curl http://localhost:9404
```

## Contoh: Citra Docker Apache Tomcat dengan metrik-metrik Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-tomcat"></a>

Server Apache Tomcat membuka JMX mBeans secara bawaan. Anda dapat mengintegrasikan JMX Exporter dengan Tomcat untuk mengekspos JMX mBeans sebagai metrik-metrik Prometheus. Contoh Dockerfile berikut menunjukkan langkah-langkah untuk membangun sebuah citra pengujian: 

```
# From Tomcat 9.0 JDK8 OpenJDK 
FROM tomcat:9.0-jdk8-openjdk 

RUN mkdir -p /opt/jmx_exporter

COPY ./jmx_prometheus_javaagent-0.12.0.jar /opt/jmx_exporter
COPY ./config.yaml /opt/jmx_exporter
COPY ./setenv.sh /usr/local/tomcat/bin 
COPY your web application.war /usr/local/tomcat/webapps/

RUN chmod  o+x /usr/local/tomcat/bin/setenv.sh

ENTRYPOINT ["catalina.sh", "run"]
```

Daftar berikut menjelaskan empat baris `COPY` dalam Dockerfile ini.
+ [Unduh file jar JMX Exporter terbaru dari jmx\$1exporter. https://github.com/prometheus/](https://github.com/prometheus/jmx_exporter)
+ `config.yaml` adalah file konfigurasi JMX Exporter. Untuk informasi selengkapnya, lihat [https://github.com/prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter#Configuration ) \$1Configuration.

  Berikut ini adalah sebuah file konfigurasi sampel untuk Java dan Tomcat:

  ```
  lowercaseOutputName: true
  lowercaseOutputLabelNames: true
  
  rules:
  - pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)'
    name: java_lang_OperatingSystem_$1
    type: GAUGE
  
  - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)'
    name: java_lang_threading_$1
    type: GAUGE
  
  - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)'
    name: catalina_globalrequestprocessor_$3_total
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina global $3
    type: COUNTER
  
  - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)'
    name: catalina_servlet_$3_total
    labels:
      module: "$1"
      servlet: "$2"
    help: Catalina servlet $3 total
    type: COUNTER
  
  - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)'
    name: catalina_threadpool_$3
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina threadpool $3
    type: GAUGE
  
  - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)'
    name: catalina_session_$3_total
    labels:
      context: "$2"
      host: "$1"
    help: Catalina session $3 total
    type: COUNTER
  
  - pattern: ".*"
  ```
+ `setenv.sh` adalah sebuah skrip perusahaan rintisan Tomcat untuk memulai JMX exporter bersama dengan Tomcat dan mengekspos metrik-metrik Prometheus di port 9404 dari host lokal. Ia juga menyediakan JMX Exporter dengan jalur file `config.yaml`.

  ```
  $ cat setenv.sh 
  export JAVA_OPTS="-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.12.0.jar=9404:/opt/jmx_exporter/config.yaml $JAVA_OPTS"
  ```
+ Web application.war Anda adalah file `war` aplikasi web Anda yang akan dimuat oleh Tomcat.

Bangun sebuah citra docker dengan konfigurasi ini dan unggah citra tersebut ke sebuah repositori citra.

## Contoh: Citra Docker Aplikasi Jar Java dengan metrik-metrik Prometheus
<a name="ContainerInsights-Prometheus-Sample-Workloads-javajmx-jar"></a>

Contoh Dockerfile berikut menunjukkan langkah-langkah untuk membangun sebuah citra pengujian: 

```
# Alpine Linux with OpenJDK JRE
FROM openjdk:8-jre-alpine

RUN mkdir -p /opt/jmx_exporter

COPY ./jmx_prometheus_javaagent-0.12.0.jar /opt/jmx_exporter
COPY ./SampleJavaApplication-1.0-SNAPSHOT.jar /opt/jmx_exporter
COPY ./start_exporter_example.sh /opt/jmx_exporter
COPY ./config.yaml /opt/jmx_exporter

RUN chmod -R o+x /opt/jmx_exporter
RUN apk add curl

ENTRYPOINT exec /opt/jmx_exporter/start_exporter_example.sh
```

Daftar berikut menjelaskan empat baris `COPY` dalam Dockerfile ini.
+ [Unduh file jar JMX Exporter terbaru dari jmx\$1exporter. https://github.com/prometheus/](https://github.com/prometheus/jmx_exporter)
+ `config.yaml` adalah file konfigurasi JMX Exporter. Untuk informasi selengkapnya, lihat [https://github.com/prometheus/jmx\$1exporter](https://github.com/prometheus/jmx_exporter#Configuration ) \$1Configuration.

  Berikut ini adalah sebuah file konfigurasi sampel untuk Java dan Tomcat:

  ```
  lowercaseOutputName: true
  lowercaseOutputLabelNames: true
  
  rules:
  - pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)'
    name: java_lang_OperatingSystem_$1
    type: GAUGE
  
  - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)'
    name: java_lang_threading_$1
    type: GAUGE
  
  - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)'
    name: catalina_globalrequestprocessor_$3_total
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina global $3
    type: COUNTER
  
  - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)'
    name: catalina_servlet_$3_total
    labels:
      module: "$1"
      servlet: "$2"
    help: Catalina servlet $3 total
    type: COUNTER
  
  - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)'
    name: catalina_threadpool_$3
    labels:
      port: "$2"
      protocol: "$1"
    help: Catalina threadpool $3
    type: GAUGE
  
  - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)'
    name: catalina_session_$3_total
    labels:
      context: "$2"
      host: "$1"
    help: Catalina session $3 total
    type: COUNTER
  
  - pattern: ".*"
  ```
+ `start_exporter_example.sh` adalah skrip untuk memulai aplikasi JAR dengan metrik-metrik Prometheus yang diekspor. Ia juga menyediakan JMX Exporter dengan jalur file `config.yaml`.

  ```
  $ cat start_exporter_example.sh 
  java -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.12.0.jar=9404:/opt/jmx_exporter/config.yaml -cp  /opt/jmx_exporter/SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App
  ```
+ SampleJavaApplication-1.0-snapshot.jar adalah contoh file jar aplikasi Java. Ganti file tersebut dengan aplikasi Java yang ingin Anda pantau.

Bangun sebuah citra docker dengan konfigurasi ini dan unggah citra tersebut ke sebuah repositori citra.

# Siapkan HAProxy dengan eksportir metrik di Amazon EKS dan Kubernetes
<a name="ContainerInsights-Prometheus-Sample-Workloads-haproxy"></a>

HAProxy adalah aplikasi proxy sumber terbuka. Untuk informasi selengkapnya, lihat [HAProxy](https://www.haproxy.org).

Jika Anda menjalankan HAProxy cluster dengan tipe peluncuran Fargate, Anda perlu mengatur profil Fargate sebelum melakukan langkah-langkah dalam prosedur ini. Untuk menyiapkan profilnya, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

```
eksctl create fargateprofile --cluster MyCluster \
--namespace haproxy-ingress-sample --name haproxy-ingress-sample
```

**Untuk menginstal HAProxy dengan eksportir metrik untuk menguji dukungan Container Insights Prometheus**

1. Masukkan perintah berikut untuk menambahkan repo inkubator Helm:

   ```
   helm repo add haproxy-ingress https://haproxy-ingress.github.io/charts
   ```

1. Masukkan perintah berikut untuk membuat sebuah namespace baru:

   ```
   kubectl create namespace haproxy-ingress-sample
   ```

1. Masukkan perintah berikut untuk menginstal HAProxy:

   ```
   helm install haproxy haproxy-ingress/haproxy-ingress \
   --namespace haproxy-ingress-sample \
   --set defaultBackend.enabled=true \
   --set controller.stats.enabled=true \
   --set controller.metrics.enabled=true \
   --set-string controller.metrics.service.annotations."prometheus\.io/port"="9101" \
   --set-string controller.metrics.service.annotations."prometheus\.io/scrape"="true"
   ```

1. Masukkan perintah berikut untuk mengonfirmasi keterangan dari layanan:

   ```
   kubectl describe service haproxy-haproxy-ingress-metrics -n haproxy-ingress-sample
   ```

   Anda seharusnya melihat dua keterangan berikut.

   ```
   Annotations:   prometheus.io/port: 9101
                  prometheus.io/scrape: true
   ```

**Untuk menghapus instalasi HAProxy**
+ Masukkan perintah-perintah berikut.

  ```
  helm uninstall haproxy --namespace haproxy-ingress-sample
  kubectl delete namespace haproxy-ingress-sample
  ```

# Tutorial untuk menambahkan target scrape Prometheus baru: Redis OSS di Amazon EKS dan Kubernetes cluster
<a name="ContainerInsights-Prometheus-Setup-redis-eks"></a>

Tutorial ini memberikan pengantar langsung untuk mengikis metrik Prometheus dari contoh aplikasi Redis OSS di Amazon EKS dan Kubernetes. Redis OSS (https://redis.io/) adalah sumber terbuka (berlisensi BSD), penyimpanan struktur data dalam memori, digunakan sebagai database, cache, dan broker pesan. Untuk informasi selengkapnya, silakan lihat [ redis](https://redis.io/).

redis\$1exporter (Lisensi MIT berlisensi) digunakan untuk mengekspos metrik Redis OSS Prometheus pada port yang ditentukan (default: 0.0.0. 0:9121). Untuk informasi selengkapnya, silakan lihat [ redis\$1exporter](https://github.com/oliver006/redis_exporter).

Citra Docker dalam dua repositori Docker Hub berikut digunakan dalam tutorial ini: 
+ [ redis](https://hub.docker.com/_/redis?tab=description)
+ [ redis\$1exporter](https://hub.docker.com/r/oliver006/redis_exporter)

**Untuk menginstal sampel beban kerja Redis OSS yang mengekspos metrik Prometheus**

1. Mengatur namespace untuk sampel beban kerja Redis OSS.

   ```
   REDIS_NAMESPACE=redis-sample
   ```

1. Jika Anda menjalankan Redis OSS pada cluster dengan tipe peluncuran Fargate, Anda perlu mengatur profil Fargate. Untuk menyiapkan profilnya, masukkan perintah berikut. Ganti *MyCluster* dengan nama klaster Anda.

   ```
   eksctl create fargateprofile --cluster MyCluster \
   --namespace $REDIS_NAMESPACE --name $REDIS_NAMESPACE
   ```

1. Masukkan perintah berikut untuk menginstal sampel beban kerja Redis OSS.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_traffic/redis/redis-traffic-sample.yaml \
   | sed "s/{{namespace}}/$REDIS_NAMESPACE/g" \
   | kubectl apply -f -
   ```

1. Instalasi termasuk layanan bernama `my-redis-metrics` yang mengekspos metrik Redis OSS Prometheus pada port 9121 Masukkan perintah berikut untuk mendapatkan rincian layanan: 

   ```
   kubectl describe service/my-redis-metrics  -n $REDIS_NAMESPACE
   ```

   Di `Annotations` bagian hasil, Anda akan melihat dua anotasi yang cocok dengan konfigurasi scrape Prometheus agen, sehingga dapat menemukan beban kerja CloudWatch secara otomatis:

   ```
   prometheus.io/port: 9121
   prometheus.io/scrape: true
   ```

   Konfigurasi scraping Prometheus terkait dapat ditemukan di bagian `- job_name: kubernetes-service-endpoints` dari `kubernetes-eks.yaml` atau `kubernetes-k8s.yaml`.

**Untuk mulai mengumpulkan metrik Redis OSS Prometheus di CloudWatch**

1. Unduh versi terbaru dari file `kubernetes-eks.yaml` atau `kubernetes-k8s.yaml` dengan memasukkan salah satu perintah dari perintah-perintah berikut. Untuk sebuah klaster Amazon EKS dengan tipe peluncuran EC2, masukkan perintah ini:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
   ```

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran Fargate, masukkan perintah ini:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml
   ```

   Untuk sebuah klaster Kubernetes yang berjalan di sebuah instans Amazon EC2, masukkan perintah ini:

   ```
   curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
   ```

1. Buka file dengan editor teks, dan temukan bagian `cwagentconfig.json`. Tambahkan subbagian berikut dan simpan perubahannya. Pastikan bahwa indentasi mengikuti pola yang ada saat itu.

   ```
   {
     "source_labels": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName"]],
     "metric_selectors": [
       "^redis_net_(in|out)put_bytes_total$",
       "^redis_(expired|evicted)_keys_total$",
       "^redis_keyspace_(hits|misses)_total$",
       "^redis_memory_used_bytes$",
       "^redis_connected_clients$"
     ]
   },
   {
     "source_labels": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName","cmd"]],
     "metric_selectors": [
       "^redis_commands_total$"
     ]
   },
   {
     "source_labels": ["pod_name"],
     "label_matcher": "^redis-instance$",
     "dimensions": [["Namespace","ClusterName","db"]],
     "metric_selectors": [
       "^redis_db_keys$"
     ]
   },
   ```

   Bagian yang Anda tambahkan menempatkan metrik Redis OSS ke daftar izin CloudWatch agen. Untuk daftar metrik ini, silakan lihat bagian berikut.

1. Jika Anda sudah memiliki CloudWatch agen dengan dukungan Prometheus yang diterapkan di cluster ini, Anda harus menghapusnya dengan memasukkan perintah berikut.

   ```
   kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
   ```

1. Terapkan CloudWatch agen dengan konfigurasi Anda yang diperbarui dengan memasukkan salah satu perintah berikut. Ganti *MyCluster* dan *region* untuk mencocokkan pengaturan Anda.

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran EC2, masukkan perintah ini:

   ```
   kubectl apply -f prometheus-eks.yaml
   ```

   Untuk sebuah klaster Amazon EKS dengan tipe peluncuran Fargate, masukkan perintah ini:

   ```
   cat prometheus-eks-fargate.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

   Untuk sebuah klaster Kubernetes, masukkan perintah ini.

   ```
   cat prometheus-k8s.yaml \
   | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \
   | kubectl apply -f -
   ```

## Melihat metrik Prometheus Redis OSS Anda
<a name="ContainerInsights-Prometheus-Setup-redis-eks-view"></a>

Tutorial ini mengirimkan metrik berikut ke namespace **ContainerInsights/Prometheus** di. CloudWatch Anda dapat menggunakan CloudWatch konsol untuk melihat metrik di namespace tersebut.


| Nama metrik | Dimensi | 
| --- | --- | 
|  `redis_net_input_bytes_total` |  ClusterName, `Namespace`  | 
|  `redis_net_output_bytes_total` |  ClusterName, `Namespace`  | 
|  `redis_expired_keys_total` |  ClusterName, `Namespace`  | 
|  `redis_evicted_keys_total` |  ClusterName, `Namespace`  | 
|  `redis_keyspace_hits_total` |  ClusterName, `Namespace`  | 
|  `redis_keyspace_misses_total` |  ClusterName, `Namespace`  | 
|  `redis_memory_used_bytes` |  ClusterName, `Namespace`  | 
|  `redis_connected_clients` |  ClusterName, `Namespace`  | 
|  `redis_commands_total` |  ClusterName, `Namespace`, cmd  | 
|  `redis_db_keys` |  ClusterName, `Namespace`, db  | 

**catatan**  
Nilai dari dimensi **cmd** bisa berupa: `append`, `client`, `command`, `config`, `dbsize`, `flushall`, `get`, `incr`, `info`, `latency`, atau `slowlog`.  
Nilai dari dimensi **db** bisa `db0` hingga `db15`. 

Anda juga dapat membuat CloudWatch dasbor untuk metrik Prometheus Redis OSS Anda.

**Untuk membuat dasbor untuk metrik Redis OSS Prometheus**

1. Buat variabel lingkungan, yang menggantikan nilai di bawah ini untuk menyesuaikan dengan deployment Anda.

   ```
   DASHBOARD_NAME=your_cw_dashboard_name
   REGION_NAME=your_metric_region_such_as_us-east-1
   CLUSTER_NAME=your_k8s_cluster_name_here
   NAMESPACE=your_redis_service_namespace_here
   ```

1. Masukkan perintah berikut untuk membuat dasbor tersebut.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/redis/cw_dashboard_redis.json \
   | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \
   | sed "s/{{YOUR_NAMESPACE}}/${NAMESPACE}/g" \
   ```