我从前端客户端向metrics微服务发送一个JSON,其中包含以下数据:
{
totalTimeOnTheNetwork: number;
timeElasticsearch: number;
isSuccessful: boolean;
}
@AllArgsConstructor
@Service
public class ClientMetricsService {
@Autowired
MeterRegistry registry; // abstract class, SimpleMeterRegistry gets injected
public void metrics(final MetricsProperty metrics) {
final long networkTime = metrics.getTotalTime() - metrics.getElasticTime();
registry.timer(ELASTIC_TIME_LABEL).record(metrics.getElasticTime(), TimeUnit.MILLISECONDS);
registry.timer(TOTAL_TIME_LABEL).record(metrics.getTotalTime(), TimeUnit.MILLISECONDS);
registry.timer(NETWORK_TIME_LABEL).record(networkTime, TimeUnit.MILLISECONDS);
}
}
如你所见,我为每个时间间隔制定了一个新的度量。我想知道我是否能把所有的间隔都用一个度量单位表示?如果我不必在metrics microservice上计算网络时间,而是在Grafana中计算,那就太好了。
另外,我可以在registry.timer中放置一个成功/失败标记吗?我想我需要对每个请求使用timer.builder,然后如下所示:
Timer timer = Timer
.builder("my.timer")
.description("a description of what this timer does") // optional
.tags("region", "test") // optional
.register(registry);
这是一种典型的方法吗(例如在每个HTTP请求上创建一个新的计时器并将其链接到注册表),还是应该像我当前的版本那样从MeterRegistry派生计时器?
或者您会使用另一个度量来记录成功/失败吗?例如,将来度量可能会改为http错误代码,而不是布尔值,因此我不确定如何以可维护的方式实现它