diff --git a/monitoring-samples/task-apps/task-demo-metrics-prometheus/pom.xml b/monitoring-samples/task-apps/task-demo-metrics-prometheus/pom.xml index 762d522..fb70ac6 100644 --- a/monitoring-samples/task-apps/task-demo-metrics-prometheus/pom.xml +++ b/monitoring-samples/task-apps/task-demo-metrics-prometheus/pom.xml @@ -2,40 +2,49 @@ 4.0.0 + + org.springframework.boot spring-boot-starter-parent - 2.3.1.RELEASE + 2.3.2.RELEASE + com.example.task task-demo-metrics-prometheus - 0.0.1-SNAPSHOT + 0.0.3-SNAPSHOT task-demo-metrics-prometheus Demo project for Spring Boot 1.8 - Hoxton.SR6 - 0.11.0 + 1.0.0 + + 2.3.0.BUILD-SNAPSHOT - - org.springframework.boot - spring-boot-starter - - - - - org.springframework.boot - spring-boot-starter-jdbc - + org.springframework.boot spring-boot-starter-batch + + org.springframework.cloud + spring-cloud-starter-task + + org.mariadb.jdbc mariadb-java-client @@ -47,18 +56,6 @@ runtime - - - org.springframework.cloud - spring-cloud-starter-task - - - - org.springframework.boot - spring-boot-configuration-processor - true - - @@ -66,27 +63,23 @@ prometheus-rsocket-spring ${prometheus-rsocket-spring.version} - + + org.springframework.boot + spring-boot-configuration-processor + true + io.micrometer.prometheus prometheus-rsocket-client ${prometheus-rsocket-spring.version} - - - - org.springframework.boot - spring-boot-starter-test test - - - org.junit.vintage - junit-vintage-engine - - - junit - junit - - + + + io.rsocket + rsocket-transport-netty + 1.0.1 + + test @@ -94,25 +87,11 @@ org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} + spring-cloud-task-dependencies + ${spring-cloud-task-dependencies.version} pom import - - io.micrometer - micrometer-bom - 1.5.2 - pom - import - - - - - - - - diff --git a/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/main/java/com/example/task/taskdemometrics/TaskDemoMetricsApplication.java b/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/main/java/com/example/task/taskdemometrics/TaskDemoMetricsApplication.java index 90b0e80..3530192 100644 --- a/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/main/java/com/example/task/taskdemometrics/TaskDemoMetricsApplication.java +++ b/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/main/java/com/example/task/taskdemometrics/TaskDemoMetricsApplication.java @@ -61,7 +61,7 @@ public class TaskDemoMetricsApplication { public Step step2() { return this.stepBuilderFactory.get("step2") .tasklet((contribution, context) -> { - Thread.sleep(this.random.nextInt(10000)); + Thread.sleep(2 * 60 * 1000 + this.random.nextInt(10000)); return RepeatStatus.FINISHED; }).build(); } diff --git a/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/main/resources/application.properties b/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/main/resources/application.properties index ee693ee..075f682 100644 --- a/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/main/resources/application.properties +++ b/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/main/resources/application.properties @@ -3,3 +3,18 @@ info.app.name=@project.artifactId@ info.app.description=@project.description@ info.app.version=@project.version@ management.endpoints.web.exposure.include=health,info,bindings + + +spring.datasource.url=jdbc:mysql://localhost:3306/dataflow +spring.datasource.driverClassName=org.mariadb.jdbc.Driver +spring.datasource.username=root +spring.datasource.password=rootpw + +management.metrics.export.prometheus.rsocket.host=localhost +management.metrics.export.prometheus.rsocket.port=7001 +management.metrics.export.prometheus.enabled=true +management.metrics.export.prometheus.rsocket.enabled=true + +spring.cloud.task.name=task999 + + diff --git a/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/test/java/com/example/task/taskdemometrics/Main.java b/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/test/java/com/example/task/taskdemometrics/Main.java new file mode 100644 index 0000000..9d8e74b --- /dev/null +++ b/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/test/java/com/example/task/taskdemometrics/Main.java @@ -0,0 +1,62 @@ +package com.example.task.taskdemometrics; + +import java.time.Duration; + +import io.micrometer.core.instrument.LongTaskTimer; +import io.micrometer.core.instrument.Metrics; +import io.micrometer.core.instrument.Timer; +import io.micrometer.prometheus.PrometheusConfig; +import io.micrometer.prometheus.PrometheusMeterRegistry; +import io.micrometer.prometheus.rsocket.PrometheusRSocketClient; +import io.rsocket.transport.netty.client.TcpClientTransport; +import io.rsocket.transport.netty.client.WebsocketClientTransport; +import reactor.util.retry.Retry; + +/** + * @author Christian Tzolov + */ +public class Main { + + + public static void main(String[] args) throws InterruptedException { + + PrometheusMeterRegistry meterRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); + + //PrometheusRSocketClient client = new PrometheusRSocketClient(meterRegistry, + // TcpClientTransport.create("localhost", 7001), + // c -> c.retryBackoff(Long.MAX_VALUE, Duration.ofSeconds(10), Duration.ofMinutes(10))); + PrometheusRSocketClient client = PrometheusRSocketClient + //.build(meterRegistry, WebsocketClientTransport.create("localhost", 8086)) + .build(meterRegistry, TcpClientTransport.create("localhost", 7001)) + .retry(Retry.backoff(Long.MAX_VALUE, Duration.ofSeconds(10)).maxBackoff(Duration.ofMinutes(10))) + .connect(); + + LongTaskTimer longTaskTimer = LongTaskTimer + .builder("tzolov.long") + .description("Long task duration") + .tag("task.my.tag", "0") + .register(meterRegistry); + + LongTaskTimer.Sample longTaskSample = longTaskTimer.start(); + + Timer.Sample taskSample = Timer.start(meterRegistry); + //Timer.Sample taskSample = Timer.start(); + + //Thread.sleep(2 * 60 * 1000); + Thread.sleep(10 * 1000); + + longTaskSample.stop(); + + taskSample.stop(Timer.builder("tzolov.task") + .description("Task duration") + .tag("task.exit.code", "0") + .tag("task.exception", "none") + .tag("task.status", "success") + .register(meterRegistry)); + + client.pushAndClose(); + + //Thread.sleep(10000); + + } +} diff --git a/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/test/resources/docker-compose-prometheus.yml b/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/test/resources/docker-compose-prometheus.yml new file mode 100644 index 0000000..7ff120d --- /dev/null +++ b/monitoring-samples/task-apps/task-demo-metrics-prometheus/src/test/resources/docker-compose-prometheus.yml @@ -0,0 +1,53 @@ +version: '3' + +# Extends the default docker-compose.yml with Prometheus monitoring configuration +# Usage: docker-compose -f ./docker-compose-prometheus.yml up +services: + + mysql: + image: mysql:5.7.25 + container_name: test-mysql + environment: + MYSQL_DATABASE: dataflow + MYSQL_USER: root + MYSQL_ROOT_PASSWORD: rootpw + expose: + - 3306 + ports: + - "3306:3306" + + dataflow-server: + image: springcloud/spring-cloud-dataflow-server:2.6.0 + container_name: dataflow-server + ports: + - "9393:9393" + environment: + - SPRING_CLOUD_DATAFLOW_FEATURES_STREAMS_ENABLED=false + - SPRING_CLOUD_DATAFLOW_FEATURES_SCHEDULES_ENABLED=false + - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/dataflow + - SPRING_DATASOURCE_USERNAME=root + - SPRING_DATASOURCE_PASSWORD=rootpw + - SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.mariadb.jdbc.Driver + entrypoint: "./wait-for-it.sh mysql:3306 -- java -jar /maven/spring-cloud-dataflow-server.jar" + + prometheus-rsocket-proxy: + image: micrometermetrics/prometheus-rsocket-proxy:1.0.0 + container_name: prometheus-rsocket-proxy + expose: + - '9096' + - '7001' + - '8086' + ports: + - '9096:9096' + - '7001:7001' + - '8086:8086' + environment: + - server.port=9096 + - micrometer.prometheus-proxy.websocket-port=8086 + - micrometer.prometheus-proxy.tcp-port=7001 + + prometheus: + image: springcloud/spring-cloud-dataflow-prometheus-local:2.6.0 + container_name: prometheus + ports: + - '9090:9090'