Skip to content

Commit bb2a207

Browse files
authored
Fix actutor integration problems (#19)
* #16 fix actuator integration bug
1 parent b3f7f47 commit bb2a207

File tree

18 files changed

+275
-105
lines changed

18 files changed

+275
-105
lines changed

client/lookout-reg-dropwizard/src/main/java/com/alipay/lookout/dropwizard/metrics/DropWizardMetricsRegistry.java

-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
/**
3636
* Created by [email protected] on 2017/1/26.
3737
*/
38-
@Deprecated
3938
public class DropWizardMetricsRegistry extends MetricRegistry {
4039
protected final Logger logger = LookoutLoggerFactory
4140
.getLogger(DropWizardMetricsRegistry.class);

client/lookout-sofa-boot-starter/pom.xml

+9-9
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
</developer>
2626
</developers>
2727
<dependencyManagement>
28-
<dependencies>
29-
<dependency>
30-
<groupId>org.springframework.boot</groupId>
31-
<artifactId>spring-boot-dependencies</artifactId>
32-
<version>1.4.2.RELEASE</version>
33-
<type>pom</type>
34-
<scope>import</scope>
35-
</dependency>
36-
</dependencies>
28+
<dependencies>
29+
<dependency>
30+
<groupId>org.springframework.boot</groupId>
31+
<artifactId>spring-boot-dependencies</artifactId>
32+
<version>1.4.2.RELEASE</version>
33+
<type>pom</type>
34+
<scope>import</scope>
35+
</dependency>
36+
</dependencies>
3737
</dependencyManagement>
3838

3939
<dependencies>

client/lookout-sofa-boot-starter/src/main/java/com/alipay/lookout/starter/autoConfiguration/LookoutAutoConfiguration.java

+12-39
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626
import com.alipay.lookout.remote.step.LookoutRegistry;
2727
import com.alipay.lookout.report.MetricObserver;
2828
import com.alipay.lookout.starter.LookoutClientProperties;
29-
import com.alipay.lookout.starter.support.actuator.LookoutSpringBootMetricsImpl;
30-
import com.alipay.lookout.starter.support.actuator.SpringBootActuatorRegistry;
31-
import com.alipay.lookout.starter.support.reader.LookoutRegistryMetricReader;
3229
import com.alipay.lookout.starter.support.reg.*;
3330
import org.slf4j.Logger;
3431
import org.slf4j.LoggerFactory;
@@ -37,14 +34,11 @@
3734
import org.springframework.beans.factory.BeanFactoryAware;
3835
import org.springframework.beans.factory.annotation.Autowired;
3936
import org.springframework.boot.actuate.autoconfigure.MetricsDropwizardAutoConfiguration;
40-
import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
41-
import org.springframework.boot.actuate.metrics.CounterService;
42-
import org.springframework.boot.actuate.metrics.GaugeService;
4337
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
4438
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
45-
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
4639
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
4740
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
41+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
4842
import org.springframework.boot.context.properties.EnableConfigurationProperties;
4943
import org.springframework.context.annotation.Bean;
5044
import org.springframework.context.annotation.Configuration;
@@ -61,7 +55,7 @@
6155
@AutoConfigureOrder(-100)
6256
@Configuration
6357
@EnableConfigurationProperties(LookoutClientProperties.class)
64-
@AutoConfigureBefore(MetricsDropwizardAutoConfiguration.class)
58+
@AutoConfigureBefore({ MetricsDropwizardAutoConfiguration.class })
6559
public class LookoutAutoConfiguration implements BeanFactoryAware {
6660
private static final Logger logger = LoggerFactory
6761
.getLogger(LookoutAutoConfiguration.class);
@@ -98,12 +92,6 @@ public MetricsRegistryFactory lookoutServerRegistryFactory(AddressService addres
9892
return new LookoutServerRegistryFactory(metricObservers, addressService);
9993
}
10094

101-
@Bean
102-
@ConditionalOnClass(name = "org.springframework.boot.actuate.metrics.Metric")
103-
public SpringBootActuatorRegistryFactory springBootActuatorServerRegistryFactory() {
104-
return new SpringBootActuatorRegistryFactory();
105-
}
106-
10795
@Bean
10896
@ConditionalOnClass(name = "com.alipay.lookout.reg.prometheus.PrometheusRegistry")
10997
public MetricsRegistryFactory prometheusMetricsRegistryFactory() {
@@ -117,10 +105,12 @@ public MetricsRegistryFactory prometheusMetricsRegistryFactory() {
117105
*
118106
* @return
119107
*/
108+
@Deprecated
120109
@Bean
110+
@ConditionalOnProperty(prefix = "com.alipay.sofa.lookout", name = "actuator-dropWizard-enabled", havingValue = "true", matchIfMissing = true)
121111
@ConditionalOnClass(name = { "com.alipay.lookout.dropwizard.metrics.DropWizardMetricsRegistry",
122112
"com.codahale.metrics.MetricRegistry" })
123-
public MetricsRegistryFactory dropWizardMetricsRegistryFactory() {
113+
public DropWizardMetricsRegistryFactory dropWizardMetricsRegistryFactory() {
124114
try {
125115
com.codahale.metrics.MetricRegistry metricRegistry = beanFactory
126116
.getBean(com.codahale.metrics.MetricRegistry.class);
@@ -136,6 +126,13 @@ public MetricsRegistryFactory dropWizardMetricsRegistryFactory() {
136126
return null;
137127
}
138128

129+
@Bean
130+
@ConditionalOnMissingBean({ DropWizardMetricsRegistryFactory.class })
131+
@ConditionalOnClass(name = "org.springframework.boot.actuate.metrics.Metric")
132+
public SpringBootActuatorRegistryFactory springBootActuatorServerRegistryFactory() {
133+
return new SpringBootActuatorRegistryFactory();
134+
}
135+
139136
@Bean
140137
public Registry registry(List<MetricsRegistryFactory> metricsRegistryFactoryList,
141138
LookoutConfig lookoutConfig) {
@@ -153,30 +150,6 @@ public Registry registry(List<MetricsRegistryFactory> metricsRegistryFactoryList
153150
return lookoutClient.getRegistry();
154151
}
155152

156-
@Bean
157-
@ConditionalOnMissingBean({ LookoutSpringBootMetricsImpl.class, CounterService.class,
158-
GaugeService.class })
159-
public LookoutSpringBootMetricsImpl lookoutMetricServices(Registry lookoutMetricRegistry) {
160-
logger.info("Spring Boot Metrics binding to SOFALookout Implementation!");
161-
return new LookoutSpringBootMetricsImpl(lookoutMetricRegistry);
162-
}
163-
164-
@Bean
165-
@ConditionalOnMissingBean
166-
@ConditionalOnBean(SpringBootActuatorRegistryFactory.class)
167-
public LookoutRegistryMetricReader lookoutRegistryMetricReader(SpringBootActuatorRegistryFactory springBootActuatorRegistryFactory,
168-
LookoutConfig lookoutConfig) {
169-
SpringBootActuatorRegistry springBootActuatorRegistry = springBootActuatorRegistryFactory
170-
.get(lookoutConfig);
171-
return new LookoutRegistryMetricReader(springBootActuatorRegistry);
172-
}
173-
174-
@Bean
175-
@ConditionalOnBean(LookoutRegistryMetricReader.class)
176-
public MetricReaderPublicMetrics lookoutPublicMetrics(LookoutRegistryMetricReader lookoutRegistryMetricReader) {
177-
return new MetricReaderPublicMetrics(lookoutRegistryMetricReader);
178-
}
179-
180153
protected LookoutConfig buildLookoutConfig(LookoutClientProperties lookoutClientProperties) {
181154
LookoutConfig lookoutConfig = new LookoutConfig();
182155
lookoutConfig.setProperty(LOOKOUT_ENABLE, lookoutClientProperties.isEnable());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package com.alipay.lookout.starter.configuration;
18+
19+
import com.alipay.lookout.api.Registry;
20+
import com.alipay.lookout.core.config.LookoutConfig;
21+
import com.alipay.lookout.starter.autoConfiguration.LookoutAutoConfiguration;
22+
import com.alipay.lookout.starter.support.actuator.LookoutSpringBootMetricsImpl;
23+
import com.alipay.lookout.starter.support.actuator.SpringBootActuatorRegistry;
24+
import com.alipay.lookout.starter.support.reader.LookoutRegistryMetricReader;
25+
import com.alipay.lookout.starter.support.reg.SpringBootActuatorRegistryFactory;
26+
import org.slf4j.Logger;
27+
import org.slf4j.LoggerFactory;
28+
import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
29+
import org.springframework.boot.actuate.metrics.CounterService;
30+
import org.springframework.boot.actuate.metrics.GaugeService;
31+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
32+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
33+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
34+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
35+
import org.springframework.context.annotation.Bean;
36+
import org.springframework.context.annotation.Configuration;
37+
38+
/**
39+
* use lookout registry as the default registry of spring boot actuator
40+
* Created by [email protected] on 2018/6/21.
41+
*/
42+
@AutoConfigureAfter(LookoutAutoConfiguration.class)
43+
@Configuration
44+
@ConditionalOnBean(SpringBootActuatorRegistryFactory.class)
45+
@ConditionalOnClass(name = { "org.springframework.boot.actuate.metrics.GaugeService" })
46+
public class MetricsActuatorAutoConfiguration {
47+
private static final Logger logger = LoggerFactory.getLogger(LookoutAutoConfiguration.class);
48+
49+
@Bean
50+
@ConditionalOnMissingBean({ LookoutSpringBootMetricsImpl.class, CounterService.class,
51+
GaugeService.class })
52+
public LookoutSpringBootMetricsImpl lookoutMetricServices(Registry lookoutMetricRegistry) {
53+
logger.info("Spring Boot Metrics binding to SOFALookout Implementation!");
54+
return new LookoutSpringBootMetricsImpl(lookoutMetricRegistry);
55+
}
56+
57+
@Bean
58+
public LookoutRegistryMetricReader lookoutRegistryMetricReader(SpringBootActuatorRegistryFactory springBootActuatorRegistryFactory,
59+
LookoutConfig lookoutConfig) {
60+
SpringBootActuatorRegistry springBootActuatorRegistry = springBootActuatorRegistryFactory
61+
.get(lookoutConfig);
62+
return new LookoutRegistryMetricReader(springBootActuatorRegistry);
63+
}
64+
65+
@Bean
66+
@ConditionalOnBean(LookoutRegistryMetricReader.class)
67+
public MetricReaderPublicMetrics lookoutPublicMetrics(LookoutRegistryMetricReader lookoutRegistryMetricReader) {
68+
return new MetricReaderPublicMetrics(lookoutRegistryMetricReader);
69+
}
70+
}

client/lookout-sofa-boot-starter/src/main/java/com/alipay/lookout/starter/support/actuator/LookoutSpringBootMetricsImpl.java

+1-30
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,9 @@
3535
*/
3636
public class LookoutSpringBootMetricsImpl implements CounterService, GaugeService {
3737

38-
public static final String LOOKOUT_PREFIX = "lookout.";
39-
40-
private static final String LOOKOUT_COUNTER_PREFIX = LOOKOUT_PREFIX;
41-
42-
private static final String LOOKOUT_GAUGE_PREFIX = LOOKOUT_PREFIX;
43-
4438
private final Registry registry;
4539

46-
private final ConcurrentMap<String, SimpleLookoutGauge> gauges = new ConcurrentHashMap<String, SimpleLookoutGauge>();
40+
private final ConcurrentMap<String, SimpleLookoutGauge> gauges = new ConcurrentHashMap<String, SimpleLookoutGauge>();
4741

4842
public LookoutSpringBootMetricsImpl(Registry registry) {
4943
this.registry = registry;
@@ -54,7 +48,6 @@ public void increment(String metricName) {
5448
if (StringUtils.isBlank(metricName)) {
5549
return;
5650
}
57-
metricName = wrapName(LOOKOUT_COUNTER_PREFIX, metricName);
5851
Id id = this.registry.createId(metricName);
5952
Counter counter = this.registry.counter(id);
6053
counter.inc();
@@ -65,7 +58,6 @@ public void decrement(String metricName) {
6558
if (StringUtils.isBlank(metricName)) {
6659
return;
6760
}
68-
metricName = wrapName(LOOKOUT_COUNTER_PREFIX, metricName);
6961
Id id = this.registry.createId(metricName);
7062
Counter counter = this.registry.counter(id);
7163
counter.dec();
@@ -76,7 +68,6 @@ public void reset(String metricName) {
7668
if (StringUtils.isBlank(metricName)) {
7769
return;
7870
}
79-
metricName = wrapName(LOOKOUT_COUNTER_PREFIX, metricName);
8071
Id id = this.registry.createId(metricName);
8172
this.registry.removeMetric(id);
8273
}
@@ -86,9 +77,6 @@ public void submit(String metricName, double value) {
8677
if (StringUtils.isBlank(metricName)) {
8778
return;
8879
}
89-
//name better
90-
metricName = wrapName(LOOKOUT_GAUGE_PREFIX, metricName);
91-
9280
SimpleLookoutGauge gauge = this.gauges.get(metricName);
9381
if (gauge == null) {
9482
SimpleLookoutGauge newGauge = new SimpleLookoutGauge(value);
@@ -102,23 +90,6 @@ public void submit(String metricName, double value) {
10290
gauge.setValue(value);
10391
}
10492

105-
/***
106-
* Construce lookout prefix
107-
*
108-
* @param metricName metric name
109-
* @param prefix lookout prefix
110-
* @return unique metric
111-
*/
112-
private String wrapName(String prefix, String metricName) {
113-
if (StringUtils.isBlank(metricName)) {
114-
throw new RuntimeException("Metric name can't be blank!");
115-
}
116-
if (metricName.startsWith(prefix)) {
117-
return metricName;
118-
}
119-
return prefix + metricName;
120-
}
121-
12293
private final static class SimpleLookoutGauge implements Gauge<Double> {
12394

12495
private volatile double value;

client/lookout-sofa-boot-starter/src/main/java/com/alipay/lookout/starter/support/reader/LookoutRegistryMetricReader.java

-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ public Metric<?> findOne(String metricName) {
6060
if (StringUtils.isBlank(metricName)) {
6161
return null;
6262
}
63-
metricName = LookoutSpringBootMetricsImpl.LOOKOUT_PREFIX + metricName;
6463
//Standard Actuator Implementation
6564
Id id = this.springBootActuatorRegistry.createId(metricName);
6665
List<Metric> metricList = findMetricsById(id);

client/lookout-sofa-boot-starter/src/main/resources/META-INF/spring.factories

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Auto Configure
22
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
3-
com.alipay.lookout.starter.autoConfiguration.LookoutAutoConfiguration
3+
com.alipay.lookout.starter.autoConfiguration.LookoutAutoConfiguration,\
4+
com.alipay.lookout.starter.configuration.MetricsActuatorAutoConfiguration
45

56

67
# Initializers

client/lookout-sofa-boot-starter/src/test/java/com/alipay/lookout/starter/LookoutStarterTest.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@
2222
import com.alipay.lookout.api.composite.CompositeRegistry;
2323
import com.alipay.lookout.api.composite.MixinMetric;
2424
import com.alipay.lookout.dropwizard.metrics.DropWizardMetricsRegistry;
25+
import com.alipay.lookout.starter.support.actuator.LookoutSpringBootMetricsImpl;
2526
import org.junit.Assert;
2627
import org.junit.Test;
2728
import org.junit.runner.RunWith;
2829
import org.springframework.beans.factory.annotation.Autowired;
30+
import org.springframework.boot.actuate.metrics.CounterService;
31+
import org.springframework.boot.actuate.metrics.dropwizard.DropwizardMetricServices;
2932
import org.springframework.boot.autoconfigure.SpringBootApplication;
3033
import org.springframework.boot.test.context.SpringBootTest;
3134
import org.springframework.context.annotation.ComponentScan;
@@ -45,7 +48,10 @@
4548
public class LookoutStarterTest {
4649

4750
@Autowired
48-
Registry registry;
51+
Registry registry;
52+
53+
@Autowired
54+
private CounterService counterService;
4955

5056
@Test
5157
public void testDropwizardMetrics() {
@@ -78,4 +84,13 @@ public Integer value() {
7884

7985
}
8086

87+
/**
88+
* 默认如果classpath 中有 dropwizard ,则优先生效桥接到dropwizard
89+
*/
90+
@Test
91+
public void testLookoutCounterService() {
92+
Assert.assertFalse(counterService instanceof LookoutSpringBootMetricsImpl);
93+
Assert.assertTrue(counterService instanceof DropwizardMetricServices);
94+
}
95+
8196
}

client/lookout-sofa-boot-starter/src/test/java/com/alipay/lookout/starter/support/reader/LookoutRegistryMetricReaderTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@
2828
import java.util.ArrayList;
2929
import java.util.List;
3030

31-
import static org.junit.Assert.assertNotNull;
32-
import static org.junit.Assert.assertTrue;
31+
import static org.junit.Assert.*;
3332

3433
/**
3534
* LookoutRegistryMetricReader Tester.
@@ -52,6 +51,7 @@ public class LookoutRegistryMetricReaderTest extends AbstractTestBase {
5251
*/
5352
@Test
5453
public void testFindOne() throws Exception {
54+
assertNull(lookoutRegistryMetricReader.findOne(""));
5555
assertTrue(this.metricReaderPublicMetrics != null
5656
&& this.metricReaderPublicMetrics.size() > 0);
5757
assertNotNull(testRestTemplate);
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
com.alipay.sofa.lookout.prometheusExporterServerPort=9696
1+
com.alipay.sofa.lookout.prometheusExporterServerPort=9696
2+
com.alipay.sofa.lookout.actuator-dropWizard-enabled=false
3+
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
com.alipay.sofa.lookout.prometheusExporterServerPort=9595
1+
com.alipay.sofa.lookout.prometheusExporterServerPort=9595
2+
com.alipay.sofa.lookout.actuator-dropWizard-enabled=false

client/samples/lookout-client-samples-boot/README.md

+5-9
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
## 这里演示与 SpringBoot Actuator 集成
1+
## 这里演示与 SpringBoot Actuator 集成,以 lookout 作为 metrics 注册表;
22

33
- 添加依赖
44

55
```
6-
<dependency>
7-
<groupId>com.alipay.sofa.lookout</groupId>
8-
<artifactId>lookout-reg-dropwizard</artifactId>
9-
</dependency>
10-
<dependency>
11-
<groupId>io.dropwizard.metrics</groupId>
12-
<artifactId>metrics-core</artifactId>
13-
</dependency>
6+
<dependency>
7+
<groupId>org.springframework.boot</groupId>
8+
<artifactId>spring-boot-starter-actuator</artifactId>
9+
</dependency>
1410
```
1511

1612
- 启动后访问:http://localhost:8080/metrics

0 commit comments

Comments
 (0)