我已在我的应用程序中实现了Dropwizard指标。我使用以下代码向Graphite发送指标。
final Graphite graphite = new Graphite(new InetSocketAddress("xxx.xxx.xxx.xxx", xxxx));
final GraphiteReporter graphiteReporter = GraphiteReporter.forRegistry(metricRegistry)
.prefixedWith(getReporterRootTagName())
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.filter(MetricFilter.ALL)
.build(graphite);
graphiteReporter.start(Integer.parseInt(getTimePeriod()), timeUnit);
我想添加自定义MetricFilter,以便不会将所有指标发送到Graphite,只会发送少量特定指标。
例如。 max,mean,min,mean only。
请发布MetricFilter用法。
答案 0 :(得分:2)
要实现这一目标,您可以实施指标过滤器:
class WhitelistMetricFilter implements MetricFilter {
private final Set<String> whitelist;
public WhitelistMetricFilter(Set<String> whitelist) {
this.whitelist = whitelist;
}
@Override
public boolean matches(String name, Metric metric) {
for (String whitelisted: whitelist) {
if (whitelisted.endsWith(name))
return true;
}
return false;
}
}
我建议使用String#endsWith
函数检查名称,因为您获得的名称通常不是完整的度量标准名称(例如,它可能不包含您的前缀)。使用此过滤器,您可以实例化您的记者:
final MetricFilter whitelistFilter = new WhitelistMetricFilter(whitelist);
final GraphiteReporter reporter = GraphiteReporter
.forRegistry(metricRegistry)
.prefixedWith(getReporterRootTagName())
.filter(whiltelistFilter)
.build(graphite);
这应该可以解决问题。如果您需要对指标进行更精细的过滤 - 例如,如果您需要停用计时器自动报告的特定指标,那么3.2.0版本会对此进行介绍。您可以使用disabledMetricAttributes
参数提供一组要禁用的属性。
final Set<MetricAttribute> disabled = new HashSet<MetricAttribute>();
disabled.add(MetricAttribute.MAX);
final GraphiteReporter reporter = GraphiteReporter
.forRegistry(metricRegistry)
.disabledMetricAttributes(disabled)
.build(graphite)
我希望这会对你有所帮助。
答案 1 :(得分:0)
我认为可以使用disabledMetricAttributes解决您的问题。
在可接受的答案中,这样做会更好:
如果(name.endsWith(列入白名单))