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
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: keepregex: '.*: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
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.
-
config.yaml
ist 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.sh
ist 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. JMXconfig.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.
-
config.yaml
ist 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.sh
ist das Skript zum Starten der JAR Anwendung mit den exportierten Prometheus-Metriken. Es stellt dem JMX Exporter auch den Dateipfad zurconfig.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.