

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

# 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\_exporter](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\_path yang berbeda. Jika Anda mengubah port atau jalur, perbarui jmx scrape\_config 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\_sd\_config>.](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 {{$JAR\_SAMPLE\_TRAFFIC\_POD}} dengan nama pod yang sedang berjalan dan ganti {{$JAR\_SAMPLE\_TRAFFIC\_NAMESPACE}} 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\_exporter. 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\_exporter](https://github.com/prometheus/jmx_exporter#Configuration ) \#Configuration.

  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\_exporter. 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\_exporter](https://github.com/prometheus/jmx_exporter#Configuration ) \#Configuration.

  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.