Skip to content

Commit 241b498

Browse files
szlisieckiSzymon Lisiecki
andauthored
add cloudwatch metrics (#34)
Co-authored-by: Szymon Lisiecki <[email protected]>
1 parent 890fd64 commit 241b498

File tree

5 files changed

+77
-51
lines changed

5 files changed

+77
-51
lines changed

pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@
6363
<artifactId>azure-spring-boot-metrics-starter</artifactId>
6464
<version>2.3.5</version>
6565
</dependency>
66+
<dependency>
67+
<groupId>io.micrometer</groupId>
68+
<artifactId>micrometer-registry-cloudwatch2</artifactId>
69+
</dependency>
6670
<dependency>
6771
<groupId>org.springframework.integration</groupId>
6872
<artifactId>spring-integration-jmx</artifactId>

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

Lines changed: 25 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,77 +7,58 @@
77

88
package com.orange.lo.sample.lo2iothub;
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.lo2iothub.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.beans.factory.annotation.Qualifier;
1919
import org.springframework.boot.SpringApplication;
2020
import org.springframework.boot.autoconfigure.SpringBootApplication;
2121
import org.springframework.context.annotation.Bean;
22+
import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient;
2223

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

2826
@SpringBootApplication
2927
public class ConnectorApplication {
3028

3129
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
30+
private final MetricsProperties metricsProperties;
31+
32+
ConnectorApplication(MetricsProperties metricsProperties) {
33+
this.metricsProperties = metricsProperties;
34+
}
3235

3336
public static void main(String[] args) {
3437
SpringApplication.run(ConnectorApplication.class, args);
3538
}
3639

3740
@Bean
38-
public StepRegistryConfig stepRegistryConfig() {
39-
return new StepRegistryConfig() {
40-
41-
@Override
42-
public Duration step() {
43-
return Duration.ofMinutes(1);
44-
}
41+
@Qualifier("counters")
42+
public MeterRegistry meterRegistry() {
43+
CloudWatchMeterRegistry cloudWatchMeterRegistry = new CloudWatchMeterRegistry(cloudWatchConfig(), Clock.SYSTEM, CloudWatchAsyncClient.create());
44+
cloudWatchMeterRegistry.config()
45+
.meterFilter(MeterFilter.deny(id -> !id.getName().startsWith("message")))
46+
.commonTags(metricsProperties.getDimensionName(), metricsProperties.getDimensionValue());
47+
return cloudWatchMeterRegistry;
48+
}
4549

46-
@Override
47-
public String prefix() {
48-
return "";
49-
}
50+
private CloudWatchConfig cloudWatchConfig() {
51+
return new CloudWatchConfig() {
5052

5153
@Override
5254
public String get(String key) {
5355
return null;
5456
}
55-
};
56-
}
57-
58-
@Bean
59-
@Qualifier("counters")
60-
public StepMeterRegistry stepMeterRegistry() {
61-
return new StepMeterRegistry(stepRegistryConfig(), Clock.SYSTEM) {
6257

6358
@Override
64-
protected TimeUnit getBaseTimeUnit() {
65-
return TimeUnit.MILLISECONDS;
66-
}
67-
68-
@Override
69-
protected void publish() {
70-
getMeters().stream().filter(m -> m.getId().getName().startsWith("message")).map(m -> get(m.getId().getName()).counter()).forEach(c -> LOG.info(c.getId().getName() + " = " + val(c)));
71-
}
72-
73-
@Override
74-
public void start(ThreadFactory threadFactory) {
75-
super.start(Executors.defaultThreadFactory());
59+
public String namespace() {
60+
return metricsProperties.getNamespace();
7661
}
7762
};
7863
}
79-
80-
private long val(Counter cnt) {
81-
return Math.round(cnt.count());
82-
}
8364
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.List;
1212
import java.util.concurrent.Executors;
1313

14+
import io.micrometer.core.instrument.MeterRegistry;
1415
import org.springframework.beans.factory.annotation.Qualifier;
1516
import org.springframework.stereotype.Component;
1617

@@ -26,13 +27,12 @@ public class Counters {
2627
private final Counter mesasageSentCounter;
2728
private final Counter mesasageSentFailedCounter;
2829

29-
public Counters(@Qualifier("counters") StepMeterRegistry registry) {
30-
mesasageReadCounter = registry.counter("message.read");
31-
mesasageSentAttemptCounter = registry.counter("message.sent.attempt");
32-
mesasageSentAttemptFailedCounter = registry.counter("message.sent.attempt.failed");
33-
mesasageSentCounter = registry.counter("message.sent");
34-
mesasageSentFailedCounter = registry.counter("message.sent.failed");
35-
registry.start(Executors.defaultThreadFactory());
30+
public Counters(@Qualifier("counters") MeterRegistry meterRegistry) {
31+
mesasageReadCounter = meterRegistry.counter("message.read");
32+
mesasageSentAttemptCounter = meterRegistry.counter("message.sent.attempt");
33+
mesasageSentAttemptFailedCounter = meterRegistry.counter("message.sent.attempt.failed");
34+
mesasageSentCounter = meterRegistry.counter("message.sent");
35+
mesasageSentFailedCounter = meterRegistry.counter("message.sent.failed");
3636
}
3737

3838
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.lo2iothub.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
@@ -47,6 +47,11 @@ tenant-list:
4747
lo-devices-topic: DEVICES_TOPIC
4848
lo-devices-group: DEVICES_GROUP
4949

50+
metrics:
51+
namespace: CCS
52+
dimension-name: connector-id
53+
dimension-value:
54+
5055
azure:
5156
application-insights:
5257
enabled: true

0 commit comments

Comments
 (0)