Configuration de la charge de travail JMX Java/Sample sur Amazon EKS et Kubernetes - Amazon CloudWatch

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration de la charge de travail JMX Java/Sample sur Amazon EKS et Kubernetes

JMXL'exportateur est un exportateur officiel de Prometheus qui peut extraire et exposer JMX mBeans sous forme de métriques Prometheus. Pour plus d'informations, consultez prometheus/jmx_exporter.

Container Insights peut collecter des métriques Prometheus prédéfinies à partir de Java Virtual Machine JVM (), Java et Tomcat (Catalina) à l'aide de l'Exporter. JMX

Configuration de récupération Prometheus par défaut

Par défaut, l' CloudWatch agent compatible avec Prometheus supprime les http://CLUSTER_IP:9404/metrics métriques JMX Java/Prometheus présentes sur chaque pod d'un cluster Amazon ou Kubernetes. EKS Cela se fait par la role: pod découverte de kubernetes_sd_config Prometheus. 9404 est le port par défaut alloué à Exporter par Prometheus. JMX Pour plus d'informations sur la découverte role: pod, consultez pod. Vous pouvez configurer l'JMXexportateur pour exposer les métriques sur un port ou un chemin metrics_métrique différent. Si vous modifiez le port ou le chemin, mettez à jour le jmx scrape_config par défaut dans la carte de configuration de l' CloudWatch agent. Exécutez la commande suivante pour obtenir la configuration actuelle de l' CloudWatch agent Prometheus :

kubectl describe cm prometheus-config -n amazon-cloudwatch

Les champs à modifier sont les champs /metrics et regex: '.*:9404$', comme mis en évidence dans l'exemple suivant.

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:

Autre configuration de récupération Prometheus

Si vous exposez votre application exécutée sur un ensemble de pods avec des exportateurs Java/Prometheus par un service Kubernetes, vous pouvez également passer à l'utilisation de la découverte ou de la découverte de JMX Prometheus. role: service role: endpoint kubernetes_sd_config Pour plus d'informations sur ces méthodes de découverte, consultez service, endpoints (points de terminaison), et <kubernetes_sd_config>.

D'autres méta-étiquettes sont fournies par ces deux modes de découverte de services, ce qui peut vous être utile pour créer les dimensions CloudWatch des métriques. Par exemple, vous pouvez réétiqueter __meta_kubernetes_service_name sur Service et l'inclure dans la dimension de vos métriques. Pour plus d'informations sur la personnalisation de vos CloudWatch indicateurs et de leurs dimensions, consultez. CloudWatch configuration de l'agent pour Prometheus

Image Docker avec exportateur JMX

Ensuite, créez une image Docker. Les sections suivantes fournissent deux exemples de fichiers Docker.

Lorsque vous avez créé l'image, chargez-la dans Amazon EKS ou Kubernetes, puis exécutez la commande suivante pour vérifier que les métriques de Prometheus sont exposées sur le port 9404. JMX_EXPORTER Remplacez $JAR_SAMPLE_TRAFFIC_POD par le nom du pod en cours d'exécution et remplacez $JAR_SAMPLE_TRAFFIC_NAMESPACE par l'espace de noms de votre application.

Si vous exécutez JMX Exporter sur un cluster avec le type de lancement Fargate, vous devez également configurer un profil Fargate avant de suivre les étapes de cette procédure. Pour configurer le profil, saisissez la commande suivante. Remplacez MyCluster par le nom de votre 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

Exemple : image Apache Tomcat Docker avec métriques Prometheus

Le serveur Apache Tomcat s'expose JMX mBeans par défaut. Vous pouvez intégrer JMX Exporter à Tomcat pour les exposer JMX mBeans sous forme de métriques Prometheus. L'exemple de fichier Docker suivant montre les étapes à suivre pour créer une image de test :

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

La liste suivante explique les quatre lignes COPY de ce fichier Docker.

  • Téléchargez le dernier fichier jar JMX Exporter depuis https://github.com/prometheus/jmx_exporter.

  • config.yamlest le fichier de configuration de l'JMXexportateur. Pour plus d'informations, consultez https://github.com/prometheus/jmx_exporter #Configuration.

    Voici un exemple de fichier de configuration pour Java et 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.shest un script de démarrage Tomcat permettant de démarrer l'JMXexportateur avec Tomcat et d'exposer les métriques Prometheus sur le port 9404 du localhost. Il fournit également à l'JMXexportateur le chemin config.yaml du fichier.

    $ 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"
  • Votre application web .war est le fichier war de votre application web à charger par Tomcat.

Créez une image Docker avec cette configuration et téléchargez-la dans un référentiel d'images.

Exemple : image Docker d'application Java Jar avec métriques Prometheus

L'exemple de fichier Docker suivant montre les étapes à suivre pour créer une image de test :

# 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

La liste suivante explique les quatre lignes COPY de ce fichier Docker.

  • Téléchargez le dernier fichier jar JMX Exporter depuis https://github.com/prometheus/jmx_exporter.

  • config.yamlest le fichier de configuration de l'JMXexportateur. Pour plus d'informations, consultez https://github.com/prometheus/jmx_exporter #Configuration.

    Voici un exemple de fichier de configuration pour Java et 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.shest le script permettant de démarrer l'JARapplication avec les métriques Prometheus exportées. Il fournit également à l'JMXexportateur le chemin config.yaml du fichier.

    $ 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 est l'exemple de fichier jar de l'application Java. Remplacez-le par l'application Java que vous souhaitez surveiller.

Créez une image Docker avec cette configuration et téléchargez-la dans un référentiel d'images.