Skip to content

Commit e35f240

Browse files
szlisieckiSzymon Lisiecki
andauthored
add cloudwatch metrics (#9)
Co-authored-by: Szymon Lisiecki <[email protected]>
1 parent 2960728 commit e35f240

File tree

6 files changed

+91
-70
lines changed

6 files changed

+91
-70
lines changed

pom.xml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,10 @@
9696
<artifactId>spring-boot-starter-test</artifactId>
9797
<scope>test</scope>
9898
</dependency>
99-
<dependency>
100-
<groupId>io.micrometer</groupId>
101-
<artifactId>micrometer-core</artifactId>
102-
<version>1.9.0</version>
103-
</dependency>
99+
<dependency>
100+
<groupId>io.micrometer</groupId>
101+
<artifactId>micrometer-registry-cloudwatch2</artifactId>
102+
</dependency>
104103
<dependency>
105104
<groupId>org.springframework.boot</groupId>
106105
<artifactId>spring-boot</artifactId>

src/main/java/com/orange/lo/sample/mqtt2eventhub/ConnectorApplication.java

Lines changed: 30 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,77 +7,56 @@
77

88
package com.orange.lo.sample.mqtt2eventhub;
99

10-
import java.lang.invoke.MethodHandles;
11-
import java.time.Duration;
12-
import java.util.concurrent.Executors;
13-
import java.util.concurrent.ThreadFactory;
14-
import java.util.concurrent.TimeUnit;
15-
10+
import com.orange.lo.sample.mqtt2eventhub.utils.MetricsProperties;
11+
import io.micrometer.cloudwatch2.CloudWatchConfig;
12+
import io.micrometer.cloudwatch2.CloudWatchMeterRegistry;
13+
import io.micrometer.core.instrument.Clock;
14+
import io.micrometer.core.instrument.MeterRegistry;
15+
import io.micrometer.core.instrument.config.MeterFilter;
1616
import org.slf4j.Logger;
1717
import org.slf4j.LoggerFactory;
1818
import org.springframework.boot.SpringApplication;
1919
import org.springframework.boot.autoconfigure.SpringBootApplication;
2020
import org.springframework.context.annotation.Bean;
21+
import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient;
2122

22-
import io.micrometer.core.instrument.Clock;
23-
import io.micrometer.core.instrument.Counter;
24-
import io.micrometer.core.instrument.step.StepMeterRegistry;
25-
import io.micrometer.core.instrument.step.StepRegistryConfig;
23+
import java.lang.invoke.MethodHandles;
2624

2725
@SpringBootApplication
2826
public class ConnectorApplication {
2927

3028
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
31-
29+
private final MetricsProperties metricsProperties;
30+
31+
ConnectorApplication(MetricsProperties metricsProperties) {
32+
this.metricsProperties = metricsProperties;
33+
}
34+
3235
public static void main(String[] args) {
3336
SpringApplication.run(ConnectorApplication.class, args);
3437
}
3538

3639
@Bean
37-
public StepRegistryConfig stepRegistryConfig() {
38-
return new StepRegistryConfig() {
39-
40-
@Override
41-
public Duration step() {
42-
return Duration.ofMinutes(1);
43-
}
44-
45-
@Override
46-
public String prefix() {
47-
return "";
48-
}
49-
40+
public MeterRegistry meterRegistry() {
41+
CloudWatchMeterRegistry cloudWatchMeterRegistry = new CloudWatchMeterRegistry(cloudWatchConfig(), Clock.SYSTEM, CloudWatchAsyncClient.create());
42+
cloudWatchMeterRegistry.config()
43+
.meterFilter(MeterFilter.deny(id -> !id.getName().startsWith("message")))
44+
.commonTags(metricsProperties.getDimensionName(), metricsProperties.getDimensionValue());
45+
return cloudWatchMeterRegistry;
46+
}
47+
48+
private CloudWatchConfig cloudWatchConfig() {
49+
return new CloudWatchConfig() {
50+
5051
@Override
5152
public String get(String key) {
5253
return null;
5354
}
54-
};
55-
}
56-
57-
@Bean
58-
public StepMeterRegistry stepMeterRegistry() {
59-
return new StepMeterRegistry(stepRegistryConfig(), Clock.SYSTEM) {
60-
61-
@Override
62-
protected TimeUnit getBaseTimeUnit() {
63-
return TimeUnit.MILLISECONDS;
64-
}
65-
66-
@Override
67-
protected void publish() {
68-
getMeters().stream()
69-
.filter(m -> m.getId().getName().startsWith("message") )
70-
.map(m -> get(m.getId().getName()).counter())
71-
.forEach(c -> LOG.info(c.getId().getName() + " = " + val(c)));
72-
}
55+
7356
@Override
74-
public void start(ThreadFactory threadFactory) {
75-
super.start(Executors.defaultThreadFactory());
57+
public String namespace() {
58+
return metricsProperties.getNamespace();
7659
}
7760
};
78-
}
79-
80-
private long val(Counter cnt) {
81-
return Math.round(cnt.count());
82-
}
83-
}
61+
}
62+
}

src/main/java/com/orange/lo/sample/mqtt2eventhub/utils/Counters.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@
77

88
package com.orange.lo.sample.mqtt2eventhub.utils;
99

10-
import java.util.Arrays;
11-
import java.util.List;
12-
import java.util.concurrent.Executors;
13-
10+
import io.micrometer.core.instrument.Counter;
11+
import io.micrometer.core.instrument.MeterRegistry;
1412
import org.springframework.stereotype.Component;
1513

16-
import io.micrometer.core.instrument.Counter;
17-
import io.micrometer.core.instrument.step.StepMeterRegistry;
14+
import java.util.Arrays;
15+
import java.util.List;
1816

1917
@Component
2018
public class Counters {
@@ -24,14 +22,13 @@ public class Counters {
2422
private final Counter mesasageSentAttemptFailedCounter;
2523
private final Counter mesasageSentCounter;
2624
private final Counter mesasageSentFailedCounter;
27-
28-
public Counters(StepMeterRegistry registry) {
29-
mesasageReadCounter = registry.counter("message.read");
30-
mesasageSentAttemptCounter = registry.counter("message.sent.attempt");
31-
mesasageSentAttemptFailedCounter = registry.counter("message.sent.attempt.failed");
32-
mesasageSentCounter = registry.counter("message.sent");
33-
mesasageSentFailedCounter = registry.counter("message.sent.failed");
34-
registry.start(Executors.defaultThreadFactory());
25+
26+
public Counters(MeterRegistry meterRegistry) {
27+
mesasageReadCounter = meterRegistry.counter("message.read");
28+
mesasageSentAttemptCounter = meterRegistry.counter("message.sent.attempt");
29+
mesasageSentAttemptFailedCounter = meterRegistry.counter("message.sent.attempt.failed");
30+
mesasageSentCounter = meterRegistry.counter("message.sent");
31+
mesasageSentFailedCounter = meterRegistry.counter("message.sent.failed");
3532
}
3633

3734
public Counter getMesasageReadCounter() {
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.orange.lo.sample.mqtt2eventhub.utils;
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties;
4+
import org.springframework.stereotype.Component;
5+
6+
@ConfigurationProperties(prefix = "metrics")
7+
@Component
8+
public class MetricsProperties {
9+
private String namespace;
10+
private String dimensionName;
11+
private String dimensionValue;
12+
13+
public String getNamespace() {
14+
return namespace;
15+
}
16+
17+
public void setNamespace(String namespace) {
18+
this.namespace = namespace;
19+
}
20+
21+
public String getDimensionName() {
22+
return dimensionName;
23+
}
24+
25+
public void setDimensionName(String dimensionName) {
26+
this.dimensionName = dimensionName;
27+
}
28+
29+
public String getDimensionValue() {
30+
return dimensionValue;
31+
}
32+
33+
public void setDimensionValue(String dimensionValue) {
34+
this.dimensionValue = dimensionValue;
35+
}
36+
}

src/main/resources/application.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ azure:
2020
throttling-delay: 5ms
2121
max-send-attempts: 3
2222

23+
metrics:
24+
namespace: CCS
25+
dimension-name: connector-id
26+
dimension-value:
27+
2328
management:
2429
endpoints:
2530
web:

src/test/resources/application.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ azure:
2020
throttling-delay: 5000
2121
max-send-attempts: 3
2222

23+
metrics:
24+
namespace: CCS
25+
dimension-name: connector-id
26+
dimension-value: connector-123
27+
2328
management:
2429
endpoints:
2530
web:

0 commit comments

Comments
 (0)