【问题标题】:Dropwizard metrics in GraphiteGraphite 中的 Dropwizard 指标
【发布时间】:2017-11-08 17:00:47
【问题描述】:

我们使用 Jersey 创建了多个 API 端点,使用 web.xml 设置而不是资源配置设置。 我们希望捕获并显示每个端点的所有请求的指标,包括所有不同的响应代码。 到目前为止,我已经创建了一个扩展 InstrumentedFilterContextListener 并在其中包含 Graphite 报告器的类。

在 web.xml 中,我添加了以下块以使报告工作:

<listener>
    <listener-class>metrics.MyInstrumentedFilterContextListener</listener-class>
</listener>


<filter>
    <filter-name>testFilter</filter-name>
    <filter-class>com.codahale.metrics.servlet.InstrumentedFilter</filter-class>
    <init-param>
        <param-name>name-prefix</param-name>
        <param-value>testEndpoint</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>testFilter</filter-name>
    <url-pattern>/api/testEP1/*</url-pattern>
</filter-mapping>
enter code here

<filter>
    <filter-name>testFilter2</filter-name>
    <filter-class>com.codahale.metrics.servlet.InstrumentedFilter</filter-class>
    <init-param>
        <param-name>name-prefix</param-name>
        <param-value>testEndpoint2</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>testFilter2</filter-name>
    <url-pattern>/api/testEP2/*</url-pattern>
</filter-mapping>

因此,通过上面的配置和下面的类,我在 Graphite Dashboard 中获得了一些信息:

public class MyInstrumentedFilterContextListener extends InstrumentedFilterContextListener {
public static MetricRegistry METRIC_REGISTRY = new MetricRegistry();

static {

    final Graphite graphite = new Graphite(new InetSocketAddress("localhost", 8080));
    final GraphiteReporter reporter = GraphiteReporter.forRegistry(METRIC_REGISTRY)
            .prefixedWith("API.Metrics")
            .convertRatesTo(TimeUnit.SECONDS)
            .convertDurationsTo(TimeUnit.MILLISECONDS)

            .build(graphite);
    reporter.start(10, TimeUnit.SECONDS);
}

@Override
protected MetricRegistry getMetricRegistry() {
    return METRIC_REGISTRY;
}
}

我现在的问题是,据我所知,主要是机器相关的指标、cpu、内存等被捕获,而不是端点的 ok、error 或 not found 请求的数量。已映射。 我已经通过添加 ConsoleReporter 测试了我的侦听器类正在捕获请求,以便我可以看到不同请求的所有计数都在增加。 最后,我的问题是如何在 Graphite 中查看所有相同的 Meter 和 Timer 数据?是否有一些额外的设置我必须设置或获取这些数据,或者数据只是在 Graphite 中被称为完全不同的东西?

【问题讨论】:

    标签: jersey dropwizard metrics graphite codahale-metrics


    【解决方案1】:

    问题是这一行中指定的套接字不正确,但找到套接字的唯一方法是使用 netstat,在我的例子中它最终是 22033:

    final Graphite graphite = new Graphite(new InetSocketAddress("localhost", 8080));
    

    这可能已在石墨内的某些文件中指定,但我没有在任何文档中找到它。

    【讨论】: