JMXJava/Sample Workload auf Amazon EKS und Kubernetes einrichten - Amazon CloudWatch

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

JMXJava/Sample Workload auf Amazon EKS und Kubernetes einrichten

JMXExporter ist ein offizieller Prometheus-Exporteur, der Metriken auslesen und als Prometheus-Metriken veröffentlichen kann. JMX mBeans Weitere Informationen finden Sie unter prometheus/jmx_exporter.

Container Insights kann mit dem Exporter vordefinierte Prometheus-Metriken von Java Virtual Machine (JVM), Java und Tomcat (Catalina) sammeln. JMX

Standard-Prometheus-Scrape-Konfiguration

Standardmäßig scannt der CloudWatch Agent mit Prometheus-Unterstützung die JMX Java/Prometheus-Metriken von jedem Pod in einem Amazon- oder http://CLUSTER_IP:9404/metrics Kubernetes-Cluster. EKS Dies geschieht durch die role: pod Entdeckung von Prometheuskubernetes_sd_config. 9404 ist der von Prometheus für den JMX Exporter zugewiesene Standardport. Weitere Informationen zu role: pod Discovery finden Sie unter pod. Sie können den JMX Exporter so konfigurieren, dass die Metriken auf einem anderen Port oder metrics_path angezeigt werden. Wenn Sie den Port oder Pfad ändern, aktualisieren Sie die Standardeinstellung jmx scrape_config in der Agentenkonfigurationsübersicht. CloudWatch Führen Sie den folgenden Befehl aus, um die aktuelle Prometheus-Konfiguration des CloudWatch Agenten abzurufen:

kubectl describe cm prometheus-config -n amazon-cloudwatch

Die zu ändernden Felder sind die Felder /metrics und regex: '.*:9404$', wie im folgenden Beispiel hervorgehoben.

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:

Andere Prometheus-Scrape-Konfiguration

Wenn Sie Ihre Anwendung, die auf einer Reihe von Pods mit JMX Java/Prometheus-Exportern ausgeführt wird, über einen Kubernetes-Dienst verfügbar machen, können Sie auch zur Nutzung der Erkennung oder Erkennung von Prometheus wechseln. role: service role: endpoint kubernetes_sd_config Weitere Informationen zu diesen Ermittlungsmethoden finden Sie unter Service, Endpunkte und <kubernetes_sd_config>.

Diese beiden Service-Discovery-Modi bieten mehr Meta-Labels, die für Sie beim Aufbau der Metrik-Dimensionen nützlich sein könnten. CloudWatch Sie können beispielsweise __meta_kubernetes_service_name in Service umbenennen und in die Dimension Ihrer Metriken aufnehmen. Weitere Informationen zum Anpassen Ihrer CloudWatch Metriken und ihrer Dimensionen finden Sie unter. CloudWatch Agentenkonfiguration für Prometheus

Docker-Image mit Exporter JMX

Richten Sie anschließend ein Docker-Image ein. In den folgenden Abschnitten finden Sie zwei Beispiel-Dockerfiles.

Wenn Sie das Image erstellt haben, laden Sie es in Amazon EKS oder Kubernetes und führen Sie dann den folgenden Befehl aus, um zu überprüfen, ob Prometheus-Metriken auf Port 9404 verfügbar gemacht werdenJMX_EXPORTER. Ersetzen $JAR_SAMPLE_TRAFFIC_POD mit dem Namen des laufenden Pods und ersetze $JAR_SAMPLE_TRAFFIC_NAMESPACE mit Ihrem Anwendungs-Namespace.

Wenn Sie JMX Exporter auf einem Cluster mit dem Starttyp Fargate ausführen, müssen Sie auch ein Fargate-Profil einrichten, bevor Sie die Schritte in diesem Verfahren ausführen. Geben Sie zum Einrichten des Profils den folgenden Befehl ein. Ersetzen MyCluster mit dem Namen Ihres Clusters.

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

Beispiel: Apache-Tomcat-Docker-Image mit Prometheus-Metriken

Der Apache Tomcat-Server JMX mBeans wird standardmäßig verfügbar gemacht. Sie können JMX Exporter in Tomcat integrieren, um Metriken JMX mBeans als Prometheus-Metriken bereitzustellen. Das folgende Beispiel-Dockerfile zeigt die Schritte zum Erstellen eines Test-Images:

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

In der folgenden Liste werden die vier COPY-Zeilen in diesem Dockerfile erläutert.

  • Laden Sie die neueste JMX Exporter-JAR-Datei von jmx_exporter herunter. https://github.com/prometheus/

  • config.yamlist die Exporter-Konfigurationsdatei. JMX Weitere Informationen finden Sie unter https://github.com/prometheus/jmx_exporter #Configuration.

    Hier ist eine Beispielkonfigurationsdatei für Java und 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.shist ein Tomcat-Startskript, um den JMX Exporter zusammen mit Tomcat zu starten und Prometheus-Metriken auf Port 9404 des Localhost verfügbar zu machen. Es stellt dem Exporter auch den Dateipfad zur Verfügung. JMX 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"
  • Application.war ist Ihre Webanwendungs-war-Datei, die Tomcat zu finden hat.

Erstellen Sie ein Docker-Image mit dieser Konfiguration und laden Sie es in ein Image-Repository hoch.

Beispiel: Docker-Image der Java-Jar-Anwendung mit Prometheus-Metriken

Das folgende Beispiel-Dockerfile zeigt die Schritte zum Erstellen eines Test-Images:

# 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

In der folgenden Liste werden die vier COPY-Zeilen in diesem Dockerfile erläutert.

  • Laden Sie die neueste JMX Exporter-JAR-Datei von https://github.com/prometheus/ jmx_exporter herunter.

  • config.yamlist die Exporter-Konfigurationsdatei. JMX Weitere Informationen finden Sie unter https://github.com/prometheus/jmx_exporter #Configuration.

    Hier ist eine Beispielkonfigurationsdatei für Java und 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.shist das Skript zum Starten der JAR Anwendung mit den exportierten Prometheus-Metriken. Es stellt dem JMX Exporter auch den Dateipfad zur config.yaml Verfügung.

    $ 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 ist die JAR-Beispieldatei für eine Java-Anwendung. Ersetzen Sie sie durch die Java-Anwendung, die Sie überwachen möchten.

Erstellen Sie ein Docker-Image mit dieser Konfiguration und laden Sie es in ein Image-Repository hoch.