Configurazione del carico di lavoro di esempio Java/JMX 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, vedere 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'agente CloudWatch con supporto Prometheus recupera i parametri Java/JMX Prometheus da http://CLUSTER_IP:9404/metrics su ogni pod in un cluster Amazon EKS o Kubernetes. 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
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:/metricskubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__address__] action: keepregex: '.*:9404$'- action: replace regex: (.+) source_labels:
Altra configurazione di scraping di Prometheus
Se esponi la tua applicazione in esecuzione su un set di pod con esportatori Java/JMX Prometheus da un servizio Kubernetes, puoi anche passare all'uso dell'individuazione di role: service o all'individuazione di role: endpoint di kubernetes_sd_config Prometheus. Per ulteriori informazioni su questi metodi di individuazione, consulta service
Altre meta etichette sono fornite da queste due modalità di individuazione dei servizi che potrebbero essere utili per creare le dimensioni deli parametri CloudWatch. Ad esempio, puoi rietichettare __meta_kubernetes_service_name con Service e includerlo nella dimensione dei tuoi parametri. Per ulteriori informazioni sulla personalizzazione dei parametri CloudWatch e delle relative dimensioni, consulta Configurazione dell'agente CloudWatch 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. Sostituire $JAR_SAMPLE_TRAFFIC_POD con il nome del pod in esecuzione e sostituire $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 tuo cluster.
eksctl create fargateprofile --clusterMyCluster\ --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 COPYyour 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.
-
Scaricare l'ultimo file jar JMX Exporter da https://github.com/prometheus/jmx_exporter
. -
config.yamlè il file di configurazione JMX Exporter. Per ulteriori informazioni, visitare il sito Web all'indirizzo 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 fileconfig.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
wardell'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.
-
Scaricare l'ultimo file jar JMX Exporter da https://github.com/prometheus/jmx_exporter
. -
config.yamlè il file di configurazione JMX Exporter. Per ulteriori informazioni, visitare il sito Web all'indirizzo 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 fileconfig.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 dell'applicazione Java di esempio. Sostituirlo con l'applicazione Java che si desidera monitorare.
Crea un'immagine docker con questa configurazione e caricala in un repository di immagini.