在我的 Spring Boot 应用程序中,我使用的是一个指标库,它是一个包装器:
io.dropwizard.metrics
。所以我从 MetricsRegistry
获取所有 API 和系统指标。
因此,当我到达
/metrics
执行器端点时,我能够看到所有这些指标。
现在的问题是:所有格式为
a.b.c
的指标名称,我想将其重命名为:a_b_c
。
但我找不到任何方法来实现同样的目标。
有人可以帮忙指点一下吗?预先感谢。
MetricRegistry.java
的源代码,理论上您可以迭代MetricsRegistry
中的现有指标,并且对于每个指标,从注册表中删除该指标并使用新名称重新添加它。
但是,请注意,像这样直接操作
MetricsRegistry
可能会带来问题或限制,特别是对于由应用程序中的其他组件自动管理或更新的指标。
import com.codahale.metrics.MetricRegistry;
import java.util.Map;
import java.util.HashMap;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
@Component
public class MetricRenamer {
@Autowired
private MetricRegistry metricRegistry;
@PostConstruct
public void renameMetrics() {
// Temporary map to hold the new metrics
Map<String, Metric> renamedMetrics = new HashMap<>();
metricRegistry.getMetrics().forEach((name, metric) -> {
// Generate the new name
String newName = name.replace('.', '_');
// Add to the temporary map
renamedMetrics.put(newName, metric);
});
// Remove the old metrics and add the renamed ones
renamedMetrics.forEach((newName, metric) -> {
metricRegistry.remove(newName.replace('_', '.'));
metricRegistry.register(newName, metric);
});
}
}
在重命名之前,请考虑保留原始指标名称及其引用的备份,以确保您可以在需要时恢复更改。 如果您的应用程序在高度并发的环境中更新指标,请考虑在运行时修改
MetricsRegistry
的影响。您可能需要实现额外的同步或使用 MetricRegistryListener
来动态管理更改。
再次强调,直接操作
MetricsRegistry
可能并不适合所有应用程序,尤其是那些依赖自动指标注册和更新的应用程序。