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: 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 diff --git a/oba/jmx_exporter_config.yml b/oba/jmx_exporter_config.yml new file mode 100644 index 0000000..72f0bc4 --- /dev/null +++ b/oba/jmx_exporter_config.yml @@ -0,0 +1,28 @@ +lowercaseOutputLabelNames: true +lowercaseOutputName: true +whitelistObjectNames: + - "java.lang:type=OperatingSystem" + - "java.lang:type=Memory" + - "java.lang:type=MemoryPool,name=*" +blacklistObjectNames: [] +rules: + - 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_used_bytes" + 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"