我们有一个 vertx 微服务,用于生产中的客户身份验证。我们正在使用 dropwizard-metrics 将指标发送到石墨,并使用 Graphana 绘制时间序列数据的图表。该服务与 MySQL db 进行事务通信,我们使用 C3P0 进行连接池。将数据推送到石墨的频率是 30 秒。我已经附上了相同的代码。高峰流量期间每分钟的最大请求数为 600。
查看图表,我们可以看到在给定时间点使用的连接数。但是,我无法理解为什么该值为负数。如果没有使用中的连接,我相信图表应该显示使用中的计数为 0。
有人可以解释一下负值是什么意思吗?任何解释将不胜感激。
附上vertx配置。
public class ApplicationModule extends AbstractModule {
@Override
protected void configure() {
VertxOptions vertxOptions = new VertxOptions()
.setMetricsOptions(new DropwizardMetricsOptions()
.setEnabled(true)
.addMonitoredHttpServerUri(new Match().setValue("/*").setType(MatchType.REGEX))
.setRegistryName(CommonConstants.METRICS_REGISTRY_NAME))
.setMaxWorkerExecuteTime((long) 1.8e+12); // 30 minutes in nanosecond
Vertx vertx = Vertx.vertx(vertxOptions);
bind(Vertx.class).toInstance(vertx);
bind(MetricRegistry.class).toInstance(SharedMetricRegistries.getOrCreate(CommonConstants.METRICS_REGISTRY_NAME));
}
}
附件是将指标发送到 Graphite 的代码。
public class MetricsVerticle extends AbstractVerticle {
private static final Logger LOGGER = LoggerFactory.getLogger(MetricsVerticle.class);
private final MetricRegistry registry;
private final String env;
private final Graphite graphite;
private final GraphiteReporter reporter;
@Inject
public MetricsVerticle(MetricRegistry registry,
@Named(GRAPHITE_HOST) String host,
@Named(GRAPHITE_PORT) String port,
@Named(ENVIRONMENT_NAME) String env) {
this.registry = registry;
this.env = env;
this.graphite = new Graphite(new InetSocketAddress(host, Integer.parseInt(port)));
this.reporter = buildGraphiteReporter();
}
@Override
public void start() throws Exception {
sendMetricsToGraphite();
LOGGER.info("Deployed MetricsVerticle");
}
@Override
public void stop() {
try {
LOGGER.info("----- Stopping Graphite reporter -----");
reporter.stop();
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
private void sendMetricsToGraphite() {
LOGGER.info("----- Streaming metrics to Graphite -----");
reporter.start(30, TimeUnit.SECONDS);
}
private GraphiteReporter buildGraphiteReporter() {
LOGGER.info("----- Registering Graphite as metrics consumer -----");
return GraphiteReporter.forRegistry(registry)
.prefixedWith("in.hopscotch.services.abtest")
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build(graphite);
}
}