From b31cef8683270a828aa28e7136c76ca54c8d43ec Mon Sep 17 00:00:00 2001 From: Ahmedhossamdev Date: Fri, 3 Jan 2025 19:26:58 +0200 Subject: [PATCH 1/7] Add JMX exporter configuration for memory and CPU metrics --- oba/jmx_exporter_config.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 oba/jmx_exporter_config.yml diff --git a/oba/jmx_exporter_config.yml b/oba/jmx_exporter_config.yml new file mode 100644 index 0000000..5564b33 --- /dev/null +++ b/oba/jmx_exporter_config.yml @@ -0,0 +1,21 @@ +rules: + # Memory Metrics + - pattern: "java.lang<>HeapMemoryUsage" + name: "jvm_memory_heap_usage" + type: GAUGE + - pattern: "java.lang<>NonHeapMemoryUsage" + name: "jvm_memory_non_heap_usage" + type: GAUGE + - pattern: "java.lang<>Usage" + name: "jvm_memory_pool_usage" + type: GAUGE + labels: + pool: "$1" + + # CPU Metrics + - pattern: "java.lang<>ProcessCpuLoad" + name: "jvm_cpu_load" + type: GAUGE + - pattern: "java.lang<>SystemCpuLoad" + name: "jvm_system_cpu_load" + type: GAUGE From 510c9a9672e97ba738e2f41f47d9ba797f8cd0cf Mon Sep 17 00:00:00 2001 From: Ahmedhossamdev Date: Fri, 3 Jan 2025 19:27:10 +0200 Subject: [PATCH 2/7] Add JMX exporter service configuration to docker-compose --- docker-compose-jmx.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docker-compose-jmx.yml diff --git a/docker-compose-jmx.yml b/docker-compose-jmx.yml new file mode 100644 index 0000000..c9d8bea --- /dev/null +++ b/docker-compose-jmx.yml @@ -0,0 +1,18 @@ +version: "3" + +services: + jmx_exporter: + container_name: jmx_exporter + build: + context: ./oba + dockerfile: Dockerfile.jmx + ports: + - "1234:1234" + + # Uncomment the following section to test with prometheus and the JMX exporter in localhost + # networks: + # - monitoring +# Uncomment the following section to test with prometheus and the JMX exporter in localhost +# networks: +# monitoring: +# external: true From 9ff34a3de7d57c5631dd6dc03935a228287a96c6 Mon Sep 17 00:00:00 2001 From: Ahmedhossamdev Date: Fri, 3 Jan 2025 19:27:19 +0200 Subject: [PATCH 3/7] Add JMX exporter Dockerfile for monitoring --- oba/Dockerfile.jmx | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 oba/Dockerfile.jmx diff --git a/oba/Dockerfile.jmx b/oba/Dockerfile.jmx new file mode 100644 index 0000000..89785da --- /dev/null +++ b/oba/Dockerfile.jmx @@ -0,0 +1,11 @@ +FROM tomcat:8.5.100-jdk11-temurin + +# Install JMX exporter +RUN mkdir -p /app && \ + wget -O /app/jmx_prometheus_javaagent.jar https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/1.0.1/jmx_prometheus_javaagent-1.0.1.jar +COPY ./jmx_exporter_config.yml /app/jmx_exporter_config.yml + +# Set JVM options to include JMX exporter +ENV JAVA_OPTS="-javaagent:/app/jmx_prometheus_javaagent.jar=1234:/app/jmx_exporter_config.yml" + +CMD ["catalina.sh", "run"] From c64e6288201c00d61e93b5bea01264af724f694c Mon Sep 17 00:00:00 2001 From: Ahmedhossamdev Date: Sat, 4 Jan 2025 00:51:46 +0200 Subject: [PATCH 4/7] Update JMX exporter configuration --- oba/jmx_exporter_config.yml | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/oba/jmx_exporter_config.yml b/oba/jmx_exporter_config.yml index 5564b33..72f0bc4 100644 --- a/oba/jmx_exporter_config.yml +++ b/oba/jmx_exporter_config.yml @@ -1,21 +1,28 @@ +lowercaseOutputLabelNames: true +lowercaseOutputName: true +whitelistObjectNames: + - "java.lang:type=OperatingSystem" + - "java.lang:type=Memory" + - "java.lang:type=MemoryPool,name=*" +blacklistObjectNames: [] rules: - # Memory Metrics + - pattern: "java.lang<>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:" + name: os_$1_bytes + type: GAUGE + attrNameSnakeCase: true + - pattern: 'java.lang<>((?!process_cpu_time)\w+):' + name: os_$1 + type: GAUGE + attrNameSnakeCase: true + - pattern: "java.lang<>HeapMemoryUsage" - name: "jvm_memory_heap_usage" + name: "jvm_memory_used_bytes" type: GAUGE - pattern: "java.lang<>NonHeapMemoryUsage" - name: "jvm_memory_non_heap_usage" + name: jvm_memory_non_heap_usage type: GAUGE - pattern: "java.lang<>Usage" - name: "jvm_memory_pool_usage" + name: jvm_memory_pool_usage type: GAUGE labels: pool: "$1" - - # CPU Metrics - - pattern: "java.lang<>ProcessCpuLoad" - name: "jvm_cpu_load" - type: GAUGE - - pattern: "java.lang<>SystemCpuLoad" - name: "jvm_system_cpu_load" - type: GAUGE From 7bbc5af2c555430983bf6e4e575e7d404c50b6e6 Mon Sep 17 00:00:00 2001 From: Ahmedhossamdev Date: Sat, 4 Jan 2025 02:37:25 +0200 Subject: [PATCH 5/7] Remove JMX exporter Dockerfile and docker-compose configuration --- docker-compose-jmx.yml | 18 ------------------ oba/Dockerfile.jmx | 11 ----------- 2 files changed, 29 deletions(-) delete mode 100644 docker-compose-jmx.yml delete mode 100644 oba/Dockerfile.jmx diff --git a/docker-compose-jmx.yml b/docker-compose-jmx.yml deleted file mode 100644 index c9d8bea..0000000 --- a/docker-compose-jmx.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - jmx_exporter: - container_name: jmx_exporter - build: - context: ./oba - dockerfile: Dockerfile.jmx - ports: - - "1234:1234" - - # Uncomment the following section to test with prometheus and the JMX exporter in localhost - # networks: - # - monitoring -# Uncomment the following section to test with prometheus and the JMX exporter in localhost -# networks: -# monitoring: -# external: true diff --git a/oba/Dockerfile.jmx b/oba/Dockerfile.jmx deleted file mode 100644 index 89785da..0000000 --- a/oba/Dockerfile.jmx +++ /dev/null @@ -1,11 +0,0 @@ -FROM tomcat:8.5.100-jdk11-temurin - -# Install JMX exporter -RUN mkdir -p /app && \ - wget -O /app/jmx_prometheus_javaagent.jar https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/1.0.1/jmx_prometheus_javaagent-1.0.1.jar -COPY ./jmx_exporter_config.yml /app/jmx_exporter_config.yml - -# Set JVM options to include JMX exporter -ENV JAVA_OPTS="-javaagent:/app/jmx_prometheus_javaagent.jar=1234:/app/jmx_exporter_config.yml" - -CMD ["catalina.sh", "run"] From 0a5064e158aceed72580f178da839c508e191aa6 Mon Sep 17 00:00:00 2001 From: Ahmedhossamdev Date: Sat, 4 Jan 2025 02:38:22 +0200 Subject: [PATCH 6/7] Add JMX exporter port configuration to Docker Compose files --- docker-compose.prod.yml | 1 + docker-compose.standalone.yml | 14 +++++++++++++- docker-compose.yml | 13 ++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 5203326..ad97f77 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -53,6 +53,7 @@ services: # Access the webapp on your host machine at a path like # http://localhost:8080/onebusaway-api-webapp/api/where/agency/${YOUR_AGENCY}.json?key=TEST - "8080:8080" + - "1234:1234" # JMX exporter port # restart: always labels: caddy: "${DOMAIN}" diff --git a/docker-compose.standalone.yml b/docker-compose.standalone.yml index 7326f1e..39969ae 100644 --- a/docker-compose.standalone.yml +++ b/docker-compose.standalone.yml @@ -49,8 +49,20 @@ services: # Access the webapp on your host machine at a path like # http://localhost:8080/onebusaway-api-webapp/api/where/agency/${YOUR_AGENCY}.json?key=TEST - "8080:8080" + - "1234:1234" # JMX exporter port + +# Uncomment the following section to test with prometheus and the JMX exporter in localhost + # networks: + # - monitoring + # - default # restart: always +# Uncomment the following section to test with prometheus and the JMX exporter in localhost +# networks: +# monitoring: +# external: true + + volumes: mysql-data: - pg-data: \ No newline at end of file + pg-data: diff --git a/docker-compose.yml b/docker-compose.yml index 07bdbb2..8f20b18 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -63,8 +63,19 @@ services: # Access the webapp on your host machine at a path like # http://localhost:8080/onebusaway-api-webapp/api/where/agency/${YOUR_AGENCY}.json?key=TEST - "8080:8080" + - "1234:1234" # JMX exporter port + + # networks: + # - monitoring + # - default # restart: always + +# Uncomment the following section to test with prometheus and the JMX exporter in localhost +# networks: +# monitoring: +# external: true + volumes: mysql-data: - pg-data: \ No newline at end of file + pg-data: From 6541cb46b5827196bca6c377deb828ba6d412474 Mon Sep 17 00:00:00 2001 From: Ahmedhossamdev Date: Sat, 4 Jan 2025 02:38:56 +0200 Subject: [PATCH 7/7] Add JMX exporter configuration to Dockerfile --- oba/Dockerfile | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/oba/Dockerfile b/oba/Dockerfile index ee3d9cc..d8dab2b 100644 --- a/oba/Dockerfile +++ b/oba/Dockerfile @@ -105,8 +105,8 @@ WORKDIR $CATALINA_HOME/webapps ########## COPY --from=builder \ - --chown=oba_user:oba_group \ - /oba/libs/onebusaway-api-webapp.war . + --chown=oba_user:oba_group \ + /oba/libs/onebusaway-api-webapp.war . RUN mkdir ROOT && \ cd ROOT && \ @@ -114,14 +114,14 @@ RUN mkdir ROOT && \ rm ../onebusaway-api-webapp.war COPY --from=builder \ - --chown=oba_user:oba_group \ - /oba/libs/mysql-connector-j.jar \ - $CATALINA_HOME/webapps/ROOT/WEB-INF/lib/ + --chown=oba_user:oba_group \ + /oba/libs/mysql-connector-j.jar \ + $CATALINA_HOME/webapps/ROOT/WEB-INF/lib/ COPY --from=builder \ - --chown=oba_user:oba_group \ - /oba/libs/postgresql.jar \ - $CATALINA_HOME/webapps/ROOT/WEB-INF/lib/ + --chown=oba_user:oba_group \ + /oba/libs/postgresql.jar \ + $CATALINA_HOME/webapps/ROOT/WEB-INF/lib/ RUN mkdir -p /opt/oba/logs RUN chown -R oba_user:oba_group /opt/oba/logs @@ -157,10 +157,23 @@ COPY --from=builder \ RUN apt-get autoremove -y && apt-get clean RUN rm -rf /oba/webapps + + +# Jmx exporter + +RUN mkdir -p /app && \ + wget -O /app/jmx_prometheus_javaagent.jar https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar +COPY ./jmx_exporter_config.yml /app/jmx_exporter_config.yml + +# Set JVM options to include JMX exporter +ENV JAVA_OPTS="-javaagent:/app/jmx_prometheus_javaagent.jar=1234:/app/jmx_exporter_config.yml" + + ########## # Bootstrapper and Supervisor ########## + COPY bootstrap.sh /oba/bootstrap.sh COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN chmod +x /oba/bootstrap.sh