Skip to content

Commit 77b691c

Browse files
authored
被动采集功能重构&若干问题修复 (#34)
* #29 TopGauge prevent NoopId * add linux os metrics export * lookoutRegistry (support proactive mode) and add access token ctrl
1 parent 1698b77 commit 77b691c

File tree

46 files changed

+415
-390
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+415
-390
lines changed

client/lookout-api/src/main/java/com/alipay/lookout/api/ManualClock.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* 一个可以手动调整的Clock实现, 常用于单元测试
2121
*
2222
* @author xiangfeng.xzc
23-
* @date 2018/7/27
23+
* 2018/7/27
2424
*/
2525
public class ManualClock implements Clock {
2626
private volatile long wallTime;

client/lookout-api/src/main/java/com/alipay/lookout/api/Registry.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,11 @@ public interface Registry extends Iterable<Metric> {
8181

8282
/**
8383
* Register a info instance
84-
* @param id metric id
84+
* @param id id metric id
8585
* @param info an info instance
86-
* @return
86+
* @param <I> info data
87+
* @param <Y> info type
88+
* @return info info
8789
*/
8890
<I, Y extends Info<I>> Info info(Id id, Y info);
8991

@@ -127,7 +129,8 @@ public interface Registry extends Iterable<Metric> {
127129
* if reaching the max number,null will be returned too.
128130
*
129131
* @param id metric id
130-
* @return Instance of the metric or null if there is no match.
132+
* @param <X> metric type
133+
* @return X Instance of the metric or null if there is no match.
131134
*/
132135
<X extends Metric> X get(Id id);
133136

client/lookout-api/src/main/java/com/alipay/lookout/api/ResettableStep.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
* 暴露一个接口用于修改 step
2121
*
2222
* @author xiangfeng.xzc
23-
* @date 2018/7/26
23+
* 2018/7/26
2424
*/
2525
public interface ResettableStep {
2626
/**
2727
* 设置新的step
2828
*
29-
* @param step 新的步长, 必须>0
29+
* @param step 新的步长, 必须大于 0
3030
*/
3131
void setStep(long step);
3232
}

client/lookout-api/src/main/java/com/alipay/lookout/api/Timer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
public interface Timer extends Metric {
2727
/**
2828
* @param amount Duration of a single event
29-
* @param unit
29+
* @param unit time unit
3030
*/
3131
void record(long amount, TimeUnit unit);
3232

client/lookout-api/src/main/java/com/alipay/lookout/common/top/TopUtil.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public static TopGauger topGauger(final Registry registry, final Id id, final in
7070

7171
public static TopGauger topGauger(final Registry registry, final Id id, final int maxNumber,
7272
final Order order) {
73-
if (registry instanceof NoopRegistry) {
73+
if (registry instanceof NoopRegistry || (id == NoopRegistry.INSTANCE.createId(null))) {
7474
return NoopTopGauger.INSTANCE;
7575
}
7676
Id key = id.withTag(TOP_NUM_TAG_KEY, String.valueOf(maxNumber));

client/lookout-client/src/main/java/com/alipay/lookout/client/AbstractLookoutClient.java

+20-4
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import com.alipay.lookout.common.log.LookoutLoggerFactory;
2525
import com.alipay.lookout.common.utils.NetworkUtil;
2626
import com.alipay.lookout.core.CommonTagsAccessor;
27+
import com.alipay.lookout.remote.report.poller.MetricsHttpExporter;
2728
import com.google.common.base.Preconditions;
28-
2929
import org.apache.commons.lang.StringUtils;
3030
import org.slf4j.Logger;
3131

@@ -35,9 +35,10 @@
3535
* Created by [email protected] on 2018/4/24.
3636
*/
3737
abstract class AbstractLookoutClient implements LookoutClient {
38-
Logger logger = LookoutLoggerFactory.getLogger(this.getClass());
39-
private final String appName;
40-
private CompositeRegistry globalRegistry = new CompositeRegistry(Clock.SYSTEM);
38+
Logger logger = LookoutLoggerFactory.getLogger(this.getClass());
39+
private final String appName;
40+
private CompositeRegistry globalRegistry = new CompositeRegistry(Clock.SYSTEM);
41+
private MetricsHttpExporter metricsHttpExporter;
4142

4243
/**
4344
* new an abstractLookoutClient
@@ -100,4 +101,19 @@ protected void addDefaultCommonTags(CommonTagsAccessor commonTagsAccessor) {
100101
commonTagsAccessor.setCommonTag("app", appName);
101102
}
102103

104+
@Override
105+
public void close() throws Exception {
106+
MetricsHttpExporter metricsHttpExporter = getMetricsHttpExporter();
107+
if (metricsHttpExporter != null) {
108+
metricsHttpExporter.close();
109+
}
110+
}
111+
112+
protected MetricsHttpExporter getMetricsHttpExporter() {
113+
return metricsHttpExporter;
114+
}
115+
116+
protected void setMetricsHttpExporter(MetricsHttpExporter metricsHttpExporter) {
117+
this.metricsHttpExporter = metricsHttpExporter;
118+
}
103119
}

client/lookout-client/src/main/java/com/alipay/lookout/client/DefaultLookoutClient.java

+8-13
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818

1919
import com.alipay.lookout.api.Lookout;
2020
import com.alipay.lookout.api.MetricRegistry;
21-
import com.alipay.lookout.core.config.LookoutConfig;
22-
import com.alipay.lookout.remote.report.poller.ResettableStepRegistry;
21+
import com.alipay.lookout.remote.step.LookoutRegistry;
2322

2423
/**
2524
* Created by [email protected] on 2017/10/4.
@@ -45,6 +44,13 @@ public synchronized void addRegistry(MetricRegistry registry) {
4544
registry.registerExtendedMetrics();
4645
}
4746
super.addRegistry(registry);
47+
if (registry instanceof LookoutRegistry) {
48+
try {
49+
setMetricsHttpExporter(PollerUtils.exportHttp((LookoutRegistry) registry));
50+
} catch (Exception e) {
51+
logger.error("fail to start MetricsHttpExporter", e);
52+
}
53+
}
4854
}
4955

5056
/**
@@ -56,15 +62,4 @@ public synchronized void registerExtendedMetrics() {
5662
//对已有registry补偿登记
5763
super.registerExtendedMetrics();
5864
}
59-
60-
public synchronized void registerExporter(LookoutConfig config) {
61-
try {
62-
ResettableStepRegistry resettableStepRegistry = PollerUtils.exportHttp(config, this)
63-
.getController().getRegistry();
64-
resettableStepRegistry.registerExtendedMetrics();
65-
super.addRegistry(resettableStepRegistry);
66-
} catch (Exception e) {
67-
logger.error("fail to start MetricsHttpExporter", e);
68-
}
69-
}
7065
}

client/lookout-client/src/main/java/com/alipay/lookout/client/LookoutClient.java

+7
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,11 @@ public interface LookoutClient {
3131
*/
3232
<T extends Registry> T getRegistry();
3333

34+
/**
35+
* Closes this resource, relinquishing any underlying resources.
36+
*
37+
* @throws Exception if this resource cannot be closed
38+
*/
39+
void close() throws Exception;
40+
3441
}

client/lookout-client/src/main/java/com/alipay/lookout/client/PollerUtils.java

+6-30
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,12 @@
1616
*/
1717
package com.alipay.lookout.client;
1818

19-
import com.alipay.lookout.api.Clock;
2019
import com.alipay.lookout.api.Registry;
2120
import com.alipay.lookout.common.log.LookoutLoggerFactory;
22-
import com.alipay.lookout.core.config.LookoutConfig;
2321
import com.alipay.lookout.remote.report.poller.Listener;
2422
import com.alipay.lookout.remote.report.poller.MetricsHttpExporter;
2523
import com.alipay.lookout.remote.report.poller.PollerController;
26-
import com.alipay.lookout.remote.report.poller.ResettableStepRegistry;
2724
import com.alipay.lookout.remote.step.LookoutRegistry;
28-
2925
import org.slf4j.Logger;
3026

3127
import java.util.ArrayList;
@@ -41,39 +37,19 @@ final class PollerUtils {
4137
private PollerUtils() {
4238
}
4339

44-
/**
45-
* 辅助方法, 通过HTTP暴露自身的metrics数据
46-
*
47-
* @param config
48-
* @param client
49-
* @return
50-
* @throws Exception
51-
*/
52-
static MetricsHttpExporter exportHttp(LookoutConfig config, AbstractLookoutClient client)
53-
throws Exception {
54-
ResettableStepRegistry resettableStepRegistry = new ResettableStepRegistry(Clock.SYSTEM,
55-
config);
56-
57-
final List<LookoutRegistry> lookoutRegistryList = new ArrayList<LookoutRegistry>();
58-
for (Registry r : client.getInnerCompositeRegistry().getRegistries()) {
59-
if (r instanceof LookoutRegistry) {
60-
lookoutRegistryList.add((LookoutRegistry) r);
61-
}
62-
}
63-
PollerController controller = new PollerController(resettableStepRegistry);
40+
static MetricsHttpExporter exportHttp(final LookoutRegistry registry) throws Exception {
41+
//TODO check only one lookoutRegistry
42+
PollerController controller = new PollerController(registry);
6443
controller.addListener(new Listener() {
6544
@Override
6645
public void onActive() {
67-
for (LookoutRegistry r : lookoutRegistryList) {
68-
r.getMetricObserverComposite().setEnabled(false);
69-
}
46+
registry.getMetricObserverComposite().setEnabled(false);
47+
7048
}
7149

7250
@Override
7351
public void onIdle() {
74-
for (LookoutRegistry r : lookoutRegistryList) {
75-
r.getMetricObserverComposite().setEnabled(false);
76-
}
52+
registry.getMetricObserverComposite().setEnabled(true);
7753
}
7854
});
7955
try {

client/lookout-client/src/main/java/com/alipay/lookout/client/SimpleLookoutClient.java

+7-17
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.alipay.lookout.core.CommonTagsAccessor;
2626
import com.alipay.lookout.core.config.LookoutConfig;
2727
import com.alipay.lookout.core.config.MetricConfig;
28-
import com.alipay.lookout.remote.report.poller.ResettableStepRegistry;
2928
import com.alipay.lookout.remote.step.LookoutRegistry;
3029

3130
import java.util.concurrent.atomic.AtomicInteger;
@@ -78,29 +77,20 @@ public SimpleLookoutClient(String appName, LookoutConfig config, MetricRegistry.
7877
//add jvm and other metrics
7978
registry.registerExtendedMetrics();
8079
super.addRegistry(registry);
80+
if (registry instanceof LookoutRegistry) {
81+
try {
82+
setMetricsHttpExporter(PollerUtils.exportHttp((LookoutRegistry) registry));
83+
} catch (Exception e) {
84+
logger.error("fail to start MetricsHttpExporter", e);
85+
}
86+
}
8187
}
8288

83-
exportPoller();
84-
8589
logger.debug("set global registry to Lookout");
8690
// init global registry
8791
Lookout.setRegistry(getRegistry());
8892
}
8993

90-
private void exportPoller() {
91-
if (!lookoutConfig.getBoolean(LookoutConfig.POLLER_EXPORTER_ENABLED, false)) {
92-
return;
93-
}
94-
try {
95-
ResettableStepRegistry resettableStepRegistry = PollerUtils
96-
.exportHttp(lookoutConfig, this).getController().getRegistry();
97-
resettableStepRegistry.registerExtendedMetrics();
98-
super.addRegistry(resettableStepRegistry);
99-
} catch (Exception e) {
100-
logger.error("fail to start MetricsHttpExporter", e);
101-
}
102-
}
103-
10494
/**
10595
* get the global configuration
10696
*

client/lookout-client/src/test/java/com/alipay/lookout/client/DefaultLookoutClientTest.java

+16-6
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,40 @@
3131
public class DefaultLookoutClientTest {
3232

3333
@Test(expected = IllegalStateException.class)
34-
public void testDefaultLookoutClientWithoutRegistry() {
35-
LookoutClient client1 = new DefaultLookoutClient("demo");
36-
LookoutClient client2 = new DefaultLookoutClient("demo");
37-
client1.getRegistry();
34+
public void testDefaultLookoutClientWithoutRegistry() throws Exception {
35+
LookoutClient client1 = null;
36+
LookoutClient client2 = null;
37+
try {
38+
client1 = new DefaultLookoutClient("demo");
39+
client2 = new DefaultLookoutClient("demo");
40+
client1.getRegistry();
41+
} finally {
42+
client1.close();
43+
client2.close();
44+
}
45+
3846
}
3947

4048
@Test
41-
public void testDefaultLookoutClient_addRegsitry() {
49+
public void testDefaultLookoutClient_addRegsitry() throws Exception {
4250
LookoutConfig lookoutConfig = new LookoutConfig();
4351
DefaultLookoutClient client = new DefaultLookoutClient("demo");
4452
LookoutRegistry lookoutRegistry = new LookoutRegistry(lookoutConfig);
4553
client.addRegistry(lookoutRegistry);
4654
client.addRegistry(new DefaultRegistry(lookoutConfig));
4755
Assert.assertEquals(2, ((CompositeRegistry) client.getRegistry()).getRegistries().size());
56+
client.close();
4857
}
4958

5059
@Test
51-
public void testDefaultLookoutClient_addExtMetrics() {
60+
public void testDefaultLookoutClient_addExtMetrics() throws Exception {
5261
LookoutConfig lookoutConfig = new LookoutConfig();
5362
DefaultLookoutClient client = new DefaultLookoutClient("demo");
5463
MetricRegistry r = new DefaultRegistry(lookoutConfig);
5564
client.addRegistry(r);
5665
client.registerExtendedMetrics();
5766
Id id = r.createId("jvm.gc");
5867
Assert.assertNotNull(client.getRegistry().get(id));
68+
client.close();
5969
}
6070
}

client/lookout-client/src/test/java/com/alipay/lookout/client/MetricsHttpExporterTest.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.alipay.lookout.remote.report.poller.Listener;
2424
import com.alipay.lookout.remote.report.poller.MetricsHttpExporter;
2525
import com.alipay.lookout.remote.report.poller.PollerController;
26-
import com.alipay.lookout.remote.report.poller.ResettableStepRegistry;
2726
import com.alipay.lookout.remote.step.LookoutRegistry;
2827

2928
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -71,18 +70,18 @@ public void onIdle() {
7170
@Test
7271
public void test() throws IOException, InterruptedException {
7372
LookoutConfig config = new LookoutConfig();
74-
final LookoutRegistry lookoutRegistry = new LookoutRegistry(config);
73+
final LookoutRegistry lookoutRegistry = new LookoutRegistry(Clock.SYSTEM, null, config,
74+
null, 1000L);
7575
// 通常只会有一个LookoutRegistry
7676
final Collection<LookoutRegistry> lookoutRegistries = new ArrayList<LookoutRegistry>(1);
7777
lookoutRegistries.add(lookoutRegistry);
7878

79-
ResettableStepRegistry ssr = new ResettableStepRegistry(Clock.SYSTEM, config, 1000L);
8079
// 使用者需要自行构建该 PollerController
8180
// 能不能将逻辑做到 client 里?
8281

8382
// Registry registry = client.getRegistry();
8483

85-
PollerController pc = new PollerController(ssr);
84+
PollerController pc = new PollerController(lookoutRegistry);
8685
bind(pc, lookoutRegistries);
8786

8887
MetricsHttpExporter e = new MetricsHttpExporter(pc);

client/lookout-client/src/test/java/com/alipay/lookout/client/SimpleLookoutClientTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public static void init() throws NoSuchFieldException, IllegalAccessException {
4848
* 该实例只能全局单例,所以就统一在一个测试方法
4949
*/
5050
@Test
51-
public void testSimpleLookoutClient() {
51+
public void testSimpleLookoutClient() throws Exception {
5252
LookoutRegistry lookoutRegistry = new LookoutRegistry(new LookoutConfig());
5353
SimpleLookoutClient client = new SimpleLookoutClient("demo", lookoutRegistry);
5454
//test addCommonTags
@@ -61,6 +61,7 @@ public void testSimpleLookoutClient() {
6161
//test get Registry
6262
Assert.assertSame(lookoutRegistry, ((CompositeRegistry) client.getRegistry())
6363
.getRegistries().iterator().next());
64+
client.close();
6465
}
6566

6667
}

client/lookout-common/pom.xml

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
<groupId>com.alipay.sofa.common</groupId>
3333
<artifactId>sofa-common-tools</artifactId>
3434
</dependency>
35+
<dependency>
36+
<groupId>com.google.guava</groupId>
37+
<artifactId>guava</artifactId>
38+
</dependency>
3539

3640
<dependency>
3741
<groupId>junit</groupId>

client/lookout-common/src/main/java/com/alipay/lookout/common/utils/CommonUtil.java

+8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
import com.alipay.lookout.api.Id;
2020
import com.alipay.lookout.api.Tag;
21+
import com.google.common.util.concurrent.ThreadFactoryBuilder;
22+
23+
import java.util.concurrent.ThreadFactory;
2124

2225
/**
2326
* CommonUtil
@@ -42,4 +45,9 @@ public static String toMetricName(Id id) {
4245
}
4346
return buf.toString();
4447
}
48+
49+
public static ThreadFactory getNamedThreadFactory(String ThreadFactoryName) {
50+
//使用guava包中工具类;
51+
return new ThreadFactoryBuilder().setNameFormat(ThreadFactoryName + "-%d").build();
52+
}
4553
}

0 commit comments

Comments
 (0)