我认为您可能会混淆概念。标签只是用附加信息“装饰”指标/仪表,它们实际上并不会导致发送更多仪表。例如,该行Metrics.gauge("name", Tags.of("id","a", "area","b"), 1)
只是一个单一的仪表对象。否认jvm.memory.used
与id
标签可能会拒绝所有jvm.memory.used
。如果你还想过滤jvm.memory.used
与id
您可以使用的标签
@Bean
public MeterFilter meterFilter() {
return MeterFilter.deny(
id -> "jvm.memory.used".equals(id.getName()) &&
id.getTags().stream().anyMatch(t -> "id".equals(t.getKey()))
);
}
如果另一方面你只是想remove只是id
标签,您将需要使用replaceTags
method.
@Bean
public MeterFilter meterFilter() {
return new MeterFilter() {
@Override
public Meter.Id map(Meter.Id id) {
if("jvm.memory.used".equals(id.getName())) {
List<Tag> tags = id.getTags().stream().filter(t -> !"id".equals(t.getKey())).collect(Collectors.toList());
return id.replaceTags(tags);
}
return id;
}
};
}
您还可以完全自定义Meter.Id
通过调用返回new Meter.Id(name, tags, baseUnit, description, type)
如下所示,并更改您想要的任何值:
@Bean
public MeterFilter meterFilter() {
return new MeterFilter() {
@Override
public Meter.Id map(Meter.Id id) {
if("jvm.memory.used".equals(id.getName())) {
return new Meter.Id(id.getName(), <put tags here>, id.getBaseUnit(), id.getDescription(), id.getType()
}
return id;
}
};
}