Skip to content

Commit

Permalink
被动采集功能重构&若干问题修复 (#34)
Browse files Browse the repository at this point in the history
* #29 TopGauge prevent NoopId
* add linux os metrics export
* lookoutRegistry (support proactive mode) and add access token ctrl
  • Loading branch information
luyiisme authored Aug 30, 2018
1 parent 1698b77 commit 77b691c
Show file tree
Hide file tree
Showing 46 changed files with 415 additions and 390 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* 一个可以手动调整的Clock实现, 常用于单元测试
*
* @author xiangfeng.xzc
* @date 2018/7/27
* 2018/7/27
*/
public class ManualClock implements Clock {
private volatile long wallTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,11 @@ public interface Registry extends Iterable<Metric> {

/**
* Register a info instance
* @param id metric id
* @param id id metric id
* @param info an info instance
* @return
* @param <I> info data
* @param <Y> info type
* @return info info
*/
<I, Y extends Info<I>> Info info(Id id, Y info);

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@
* 暴露一个接口用于修改 step
*
* @author xiangfeng.xzc
* @date 2018/7/26
* 2018/7/26
*/
public interface ResettableStep {
/**
* 设置新的step
*
* @param step 新的步长, 必须>0
* @param step 新的步长, 必须大于 0
*/
void setStep(long step);
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
public interface Timer extends Metric {
/**
* @param amount Duration of a single event
* @param unit
* @param unit time unit
*/
void record(long amount, TimeUnit unit);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public static TopGauger topGauger(final Registry registry, final Id id, final in

public static TopGauger topGauger(final Registry registry, final Id id, final int maxNumber,
final Order order) {
if (registry instanceof NoopRegistry) {
if (registry instanceof NoopRegistry || (id == NoopRegistry.INSTANCE.createId(null))) {
return NoopTopGauger.INSTANCE;
}
Id key = id.withTag(TOP_NUM_TAG_KEY, String.valueOf(maxNumber));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
import com.alipay.lookout.common.log.LookoutLoggerFactory;
import com.alipay.lookout.common.utils.NetworkUtil;
import com.alipay.lookout.core.CommonTagsAccessor;
import com.alipay.lookout.remote.report.poller.MetricsHttpExporter;
import com.google.common.base.Preconditions;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;

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

/**
* new an abstractLookoutClient
Expand Down Expand Up @@ -100,4 +101,19 @@ protected void addDefaultCommonTags(CommonTagsAccessor commonTagsAccessor) {
commonTagsAccessor.setCommonTag("app", appName);
}

@Override
public void close() throws Exception {
MetricsHttpExporter metricsHttpExporter = getMetricsHttpExporter();
if (metricsHttpExporter != null) {
metricsHttpExporter.close();
}
}

protected MetricsHttpExporter getMetricsHttpExporter() {
return metricsHttpExporter;
}

protected void setMetricsHttpExporter(MetricsHttpExporter metricsHttpExporter) {
this.metricsHttpExporter = metricsHttpExporter;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@

import com.alipay.lookout.api.Lookout;
import com.alipay.lookout.api.MetricRegistry;
import com.alipay.lookout.core.config.LookoutConfig;
import com.alipay.lookout.remote.report.poller.ResettableStepRegistry;
import com.alipay.lookout.remote.step.LookoutRegistry;

/**
* Created by [email protected] on 2017/10/4.
Expand All @@ -45,6 +44,13 @@ public synchronized void addRegistry(MetricRegistry registry) {
registry.registerExtendedMetrics();
}
super.addRegistry(registry);
if (registry instanceof LookoutRegistry) {
try {
setMetricsHttpExporter(PollerUtils.exportHttp((LookoutRegistry) registry));
} catch (Exception e) {
logger.error("fail to start MetricsHttpExporter", e);
}
}
}

/**
Expand All @@ -56,15 +62,4 @@ public synchronized void registerExtendedMetrics() {
//对已有registry补偿登记
super.registerExtendedMetrics();
}

public synchronized void registerExporter(LookoutConfig config) {
try {
ResettableStepRegistry resettableStepRegistry = PollerUtils.exportHttp(config, this)
.getController().getRegistry();
resettableStepRegistry.registerExtendedMetrics();
super.addRegistry(resettableStepRegistry);
} catch (Exception e) {
logger.error("fail to start MetricsHttpExporter", e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,11 @@ public interface LookoutClient {
*/
<T extends Registry> T getRegistry();

/**
* Closes this resource, relinquishing any underlying resources.
*
* @throws Exception if this resource cannot be closed
*/
void close() throws Exception;

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,12 @@
*/
package com.alipay.lookout.client;

import com.alipay.lookout.api.Clock;
import com.alipay.lookout.api.Registry;
import com.alipay.lookout.common.log.LookoutLoggerFactory;
import com.alipay.lookout.core.config.LookoutConfig;
import com.alipay.lookout.remote.report.poller.Listener;
import com.alipay.lookout.remote.report.poller.MetricsHttpExporter;
import com.alipay.lookout.remote.report.poller.PollerController;
import com.alipay.lookout.remote.report.poller.ResettableStepRegistry;
import com.alipay.lookout.remote.step.LookoutRegistry;

import org.slf4j.Logger;

import java.util.ArrayList;
Expand All @@ -41,39 +37,19 @@ final class PollerUtils {
private PollerUtils() {
}

/**
* 辅助方法, 通过HTTP暴露自身的metrics数据
*
* @param config
* @param client
* @return
* @throws Exception
*/
static MetricsHttpExporter exportHttp(LookoutConfig config, AbstractLookoutClient client)
throws Exception {
ResettableStepRegistry resettableStepRegistry = new ResettableStepRegistry(Clock.SYSTEM,
config);

final List<LookoutRegistry> lookoutRegistryList = new ArrayList<LookoutRegistry>();
for (Registry r : client.getInnerCompositeRegistry().getRegistries()) {
if (r instanceof LookoutRegistry) {
lookoutRegistryList.add((LookoutRegistry) r);
}
}
PollerController controller = new PollerController(resettableStepRegistry);
static MetricsHttpExporter exportHttp(final LookoutRegistry registry) throws Exception {
//TODO check only one lookoutRegistry
PollerController controller = new PollerController(registry);
controller.addListener(new Listener() {
@Override
public void onActive() {
for (LookoutRegistry r : lookoutRegistryList) {
r.getMetricObserverComposite().setEnabled(false);
}
registry.getMetricObserverComposite().setEnabled(false);

}

@Override
public void onIdle() {
for (LookoutRegistry r : lookoutRegistryList) {
r.getMetricObserverComposite().setEnabled(false);
}
registry.getMetricObserverComposite().setEnabled(true);
}
});
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import com.alipay.lookout.core.CommonTagsAccessor;
import com.alipay.lookout.core.config.LookoutConfig;
import com.alipay.lookout.core.config.MetricConfig;
import com.alipay.lookout.remote.report.poller.ResettableStepRegistry;
import com.alipay.lookout.remote.step.LookoutRegistry;

import java.util.concurrent.atomic.AtomicInteger;
Expand Down Expand Up @@ -78,29 +77,20 @@ public SimpleLookoutClient(String appName, LookoutConfig config, MetricRegistry.
//add jvm and other metrics
registry.registerExtendedMetrics();
super.addRegistry(registry);
if (registry instanceof LookoutRegistry) {
try {
setMetricsHttpExporter(PollerUtils.exportHttp((LookoutRegistry) registry));
} catch (Exception e) {
logger.error("fail to start MetricsHttpExporter", e);
}
}
}

exportPoller();

logger.debug("set global registry to Lookout");
// init global registry
Lookout.setRegistry(getRegistry());
}

private void exportPoller() {
if (!lookoutConfig.getBoolean(LookoutConfig.POLLER_EXPORTER_ENABLED, false)) {
return;
}
try {
ResettableStepRegistry resettableStepRegistry = PollerUtils
.exportHttp(lookoutConfig, this).getController().getRegistry();
resettableStepRegistry.registerExtendedMetrics();
super.addRegistry(resettableStepRegistry);
} catch (Exception e) {
logger.error("fail to start MetricsHttpExporter", e);
}
}

/**
* get the global configuration
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,30 +31,40 @@
public class DefaultLookoutClientTest {

@Test(expected = IllegalStateException.class)
public void testDefaultLookoutClientWithoutRegistry() {
LookoutClient client1 = new DefaultLookoutClient("demo");
LookoutClient client2 = new DefaultLookoutClient("demo");
client1.getRegistry();
public void testDefaultLookoutClientWithoutRegistry() throws Exception {
LookoutClient client1 = null;
LookoutClient client2 = null;
try {
client1 = new DefaultLookoutClient("demo");
client2 = new DefaultLookoutClient("demo");
client1.getRegistry();
} finally {
client1.close();
client2.close();
}

}

@Test
public void testDefaultLookoutClient_addRegsitry() {
public void testDefaultLookoutClient_addRegsitry() throws Exception {
LookoutConfig lookoutConfig = new LookoutConfig();
DefaultLookoutClient client = new DefaultLookoutClient("demo");
LookoutRegistry lookoutRegistry = new LookoutRegistry(lookoutConfig);
client.addRegistry(lookoutRegistry);
client.addRegistry(new DefaultRegistry(lookoutConfig));
Assert.assertEquals(2, ((CompositeRegistry) client.getRegistry()).getRegistries().size());
client.close();
}

@Test
public void testDefaultLookoutClient_addExtMetrics() {
public void testDefaultLookoutClient_addExtMetrics() throws Exception {
LookoutConfig lookoutConfig = new LookoutConfig();
DefaultLookoutClient client = new DefaultLookoutClient("demo");
MetricRegistry r = new DefaultRegistry(lookoutConfig);
client.addRegistry(r);
client.registerExtendedMetrics();
Id id = r.createId("jvm.gc");
Assert.assertNotNull(client.getRegistry().get(id));
client.close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import com.alipay.lookout.remote.report.poller.Listener;
import com.alipay.lookout.remote.report.poller.MetricsHttpExporter;
import com.alipay.lookout.remote.report.poller.PollerController;
import com.alipay.lookout.remote.report.poller.ResettableStepRegistry;
import com.alipay.lookout.remote.step.LookoutRegistry;

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

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

// Registry registry = client.getRegistry();

PollerController pc = new PollerController(ssr);
PollerController pc = new PollerController(lookoutRegistry);
bind(pc, lookoutRegistries);

MetricsHttpExporter e = new MetricsHttpExporter(pc);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public static void init() throws NoSuchFieldException, IllegalAccessException {
* 该实例只能全局单例,所以就统一在一个测试方法
*/
@Test
public void testSimpleLookoutClient() {
public void testSimpleLookoutClient() throws Exception {
LookoutRegistry lookoutRegistry = new LookoutRegistry(new LookoutConfig());
SimpleLookoutClient client = new SimpleLookoutClient("demo", lookoutRegistry);
//test addCommonTags
Expand All @@ -61,6 +61,7 @@ public void testSimpleLookoutClient() {
//test get Registry
Assert.assertSame(lookoutRegistry, ((CompositeRegistry) client.getRegistry())
.getRegistries().iterator().next());
client.close();
}

}
4 changes: 4 additions & 0 deletions client/lookout-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
<groupId>com.alipay.sofa.common</groupId>
<artifactId>sofa-common-tools</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>

<dependency>
<groupId>junit</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@

import com.alipay.lookout.api.Id;
import com.alipay.lookout.api.Tag;
import com.google.common.util.concurrent.ThreadFactoryBuilder;

import java.util.concurrent.ThreadFactory;

/**
* CommonUtil
Expand All @@ -42,4 +45,9 @@ public static String toMetricName(Id id) {
}
return buf.toString();
}

public static ThreadFactory getNamedThreadFactory(String ThreadFactoryName) {
//使用guava包中工具类;
return new ThreadFactoryBuilder().setNameFormat(ThreadFactoryName + "-%d").build();
}
}
Loading

0 comments on commit 77b691c

Please sign in to comment.