Demo cases for mictometer rproxy bug

This commit is contained in:
Christian Tzolov
2020-08-05 12:52:07 +02:00
parent 8721d01ed8
commit 350f1c0cf9
5 changed files with 168 additions and 59 deletions

View File

@@ -2,40 +2,49 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
spring-boot-starter-parent:2.1.13.RELEASE
prometheus-rsocket-spring.version:0.9.0
rsocket-transport-netty:1.0.0-RC5
spring-boot-starter-parent:2.3.2.RELEASE
prometheus-rsocket-spring.version:0.9.0
rsocket-transport-netty:1.0.0-RC5
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version> <!-- RS RC7 -->
<version>2.3.2.RELEASE</version>
<!-- <version>2.1.13.RELEASE</version>-->
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example.task</groupId>
<artifactId>task-demo-metrics-prometheus</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>0.0.3-SNAPSHOT</version>
<name>task-demo-metrics-prometheus</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
<prometheus-rsocket-spring.version>0.11.0</prometheus-rsocket-spring.version>
<prometheus-rsocket-spring.version>1.0.0</prometheus-rsocket-spring.version>
<!-- <prometheus-rsocket-spring.version>0.9.0</prometheus-rsocket-spring.version>-->
<spring-cloud-task-dependencies.version>2.3.0.BUILD-SNAPSHOT</spring-cloud-task-dependencies.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- jdbc dependencies for the task repository -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- Enable Spring Batch and Spring Cloud Task -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-task</artifactId>
</dependency>
<!-- Data Source Configurations -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
@@ -47,18 +56,6 @@
<scope>runtime</scope>
</dependency>
<!-- Enable Spring Cloud Task (and Batch) support -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-task</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- Enable Prometheus metrics collection (via Prometheus RSocket Proxy) -->
<!-- Internally it imports the org.springframework.boot:spring-boot-actuator-autoconfigure dependency -->
<dependency>
@@ -66,27 +63,23 @@
<artifactId>prometheus-rsocket-spring</artifactId>
<version>${prometheus-rsocket-spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.micrometer.prometheus</groupId>
<artifactId>prometheus-rsocket-client</artifactId>
<version>${prometheus-rsocket-spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.rsocket</groupId>
<artifactId>rsocket-transport-netty</artifactId>
<version>1.0.1</version>
<!-- <version>1.0.0-RC5</version>-->
<scope>test</scope>
</dependency>
</dependencies>
@@ -94,25 +87,11 @@
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<artifactId>spring-cloud-task-dependencies</artifactId>
<version>${spring-cloud-task-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-bom</artifactId>
<version>1.5.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-task-dependencies</artifactId>-->
<!-- <version>${spring-cloud-task.version}</version>-->
<!-- <type>pom</type>-->
<!-- <scope>import</scope>-->
<!-- </dependency>-->
</dependencies>
</dependencyManagement>

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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'