View a markdown version of this page

Configura un carico di lavoro Java/JMX di esempio su Amazon EKS e Kubernetes - Amazon CloudWatch

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura un carico di lavoro Java/JMX di esempio su Amazon EKS e Kubernetes

JMX Exporter è un esportatore ufficiale di Prometheus che può recuperare ed esporre JMX mBeans JMX come metriche Prometheus. Per ulteriori informazioni, consulta prometheus/jmx_exporter.

Container Insights può raccogliere metriche Prometheus predefinite da Java Virtual Machine (JVM), Java e Tomcat (Catalina) utilizzando JMX Exporter.

Configurazione predefinita dello scraping di Prometheus

Per impostazione predefinita, l' CloudWatch agente con supporto Prometheus estrae le metriche Prometheus da ogni pod in un Java/JMX cluster Amazon EKS o Kubernetes. http://CLUSTER_IP:9404/metrics Questo avviene mediante l'individuazione di role: pod di kubernetes_sd_config Prometheus. 9404 è la porta predefinita allocata per JMX Exporter da Prometheus. Per ulteriori informazioni sull'individuazione di role: pod, consulta pod. È possibile configurare JMX Exporter per esporre le metriche su una porta o metrics_path diverso. Se modifichi la porta o il percorso, aggiorna il jmx scrape_config predefinito nella mappa di configurazione dell'agente. CloudWatch Esegui il comando seguente per ottenere la configurazione corrente dell'agente Prometheus: CloudWatch

kubectl describe cm prometheus-config -n amazon-cloudwatch

I campi da modificare sono i campi /metrics e regex: '.*:9404$', come evidenziato nell'esempio seguente.

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:

Altra configurazione di scraping di Prometheus

Se esponi l'applicazione in esecuzione su un set di pod con gli esportatori Java/JMX Prometheus di un servizio Kubernetes, puoi anche passare a use discovery o discovery of Prometheus. role: service role: endpoint kubernetes_sd_config Per ulteriori informazioni su questi metodi di individuazione, consulta service (servizio), endpoints (endpoint) e <kubernetes_sd_config>..

Queste due modalità di rilevamento dei servizi forniscono altre meta etichette che potrebbero essere utili per creare le dimensioni delle metriche. CloudWatch Ad esempio, puoi __meta_kubernetes_service_name rietichettarlo Service e includerlo nella dimensione delle tue metriche. Per ulteriori informazioni sulla personalizzazione delle CloudWatch metriche e delle relative dimensioni, consulta. CloudWatch configurazione dell'agente per Prometheus

Immagine Docker con JMX Exporter

Successivamente, crea un'immagine Docker. Le sezioni seguenti forniscono due file Docker di esempio.

Dopo aver creato l'immagine, caricarla in Amazon EKS o Kubernetes, quindi eseguire il comando seguente per verificare che i parametri Prometheus siano esposte da JMX_EXPORTER sulla porta 9404. Sostituiscilo $JAR_SAMPLE_TRAFFIC_POD con il nome del pod in esecuzione e sostituiscilo $JAR_SAMPLE_TRAFFIC_NAMESPACE con lo spazio dei nomi dell'applicazione.

Se esegui JMX Exporter in un cluster con il tipo di avvio Fargate, devi anche impostare un profilo Fargate prima di eseguire la procedura descritta. Per impostare il profilo, inserisci il comando seguente. Sostituisci MyCluster con il nome del cluster.

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

Esempio: immagine Docker Apache Tomcat con parametri Prometheus

Il server Apache Tomcat espone JMX mBeans per impostazione predefinita. È possibile integrare JMX Exporter con Tomcat per esporre JMX mBeans come metriche Prometheus. L'esempio seguente di file Docker mostra i passaggi per creare un'immagine di prova:

# 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"]

Nell'elenco seguente vengono illustrate le quattro righe COPY di questo file Docker.

  • Scarica l'ultimo file jar di JMX Exporter da. https://github.com/prometheus/jmx_exporter

  • config.yaml è il file di configurazione JMX Exporter. Per ulteriori informazioni, vedere https://github.com/prometheus/jmx_exporter #Configuration.

    Ecco un file di configurazione di esempio per Java e 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 è uno script di startup Tomcat per avviare JMX exporter insieme a Tomcat ed esporre le metriche di Prometheus sulla porta 9404 del localhost. Fornisce inoltre al JMX Exporter il percorso del 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"
  • il tuo web application .war è il tuo file war dell'applicazione web che Tomcat deve caricare.

Crea un'immagine docker con questa configurazione e caricala in un repository di immagini.

Esempio: immagine Docker dell'applicazione Java Jar con parametri Prometheus

L'esempio seguente di file Docker mostra i passaggi per creare un'immagine di prova:

# 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

Nell'elenco seguente vengono illustrate le quattro righe COPY di questo file Docker.

  • Scarica l'ultimo file jar di JMX Exporter da. https://github.com/prometheus/jmx_exporter

  • config.yaml è il file di configurazione JMX Exporter. Per ulteriori informazioni, vedere https://github.com/prometheus/jmx_exporter #Configuration.

    Ecco un file di configurazione di esempio per Java e 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 è lo script per avviare l'applicazione JAR con le metriche Prometheus esportate. Fornisce inoltre al JMX Exporter il percorso del 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 è il file jar di esempio dell'applicazione Java. Sostituirlo con l'applicazione Java che si desidera monitorare.

Crea un'immagine docker con questa configurazione e caricala in un repository di immagini.