Graphite 中的 Dropwizard 指标
Dropwizard metrics in Graphite
我们有多个 API 使用 Jersey 创建的端点,使用 web.xml 设置而不是资源配置设置。
我们想要捕获和显示每个端点的所有请求的指标,包括所有不同的响应代码。
到目前为止,我已经创建了一个扩展 InstrumentedFilterContextListener 并在其中包含 Graphite 报告器的 class。
在 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>
因此,通过上面的配置和下面的 class,我在 Graphite 仪表板中获得了一些信息:
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、内存等,而不是正常、错误或错误的数量找到对我映射的端点的请求。
我已经通过添加 ConsoleReporter 测试了我的侦听器 class 正在捕获请求,这样我就可以看到不同请求的所有计数都在增加。
所以最后我的问题是如何在 Graphite 中查看所有相同的 Meter 和 Timer 数据?是否有一些我必须设置的额外设置或某些东西来获取此数据,或者数据只是在 Graphite 中称为完全不同的东西?
问题是此行中指定的套接字不正确,但找到套接字的唯一方法是使用 netstat,在我的例子中它最终是 22033:
final Graphite graphite = new Graphite(new InetSocketAddress("localhost", 8080));
这可能已在 Graphite 的某些文件中指定,但我没有在任何文档中找到它。
我们有多个 API 使用 Jersey 创建的端点,使用 web.xml 设置而不是资源配置设置。 我们想要捕获和显示每个端点的所有请求的指标,包括所有不同的响应代码。 到目前为止,我已经创建了一个扩展 InstrumentedFilterContextListener 并在其中包含 Graphite 报告器的 class。
在 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>
因此,通过上面的配置和下面的 class,我在 Graphite 仪表板中获得了一些信息:
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、内存等,而不是正常、错误或错误的数量找到对我映射的端点的请求。 我已经通过添加 ConsoleReporter 测试了我的侦听器 class 正在捕获请求,这样我就可以看到不同请求的所有计数都在增加。 所以最后我的问题是如何在 Graphite 中查看所有相同的 Meter 和 Timer 数据?是否有一些我必须设置的额外设置或某些东西来获取此数据,或者数据只是在 Graphite 中称为完全不同的东西?
问题是此行中指定的套接字不正确,但找到套接字的唯一方法是使用 netstat,在我的例子中它最终是 22033:
final Graphite graphite = new Graphite(new InetSocketAddress("localhost", 8080));
这可能已在 Graphite 的某些文件中指定,但我没有在任何文档中找到它。