Я думаю, что вы, возможно, объединяете понятия. Теги просто «украшают» метрики / датчики дополнительной информацией, они фактически не приводят к отправке большего количества датчиков. Например, линия 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()))
);
}
Если же вы просто хотите удалить только тег id
, вам нужно будет использовать метод replaceTags
.
@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;
}
};
}