Метрики Dropwizard в графите
У нас есть несколько конечных точек API, созданных с помощью Jersey с настройкой 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;
}
}
Моя проблема на данный момент заключается в том, что из того, что я могу сказать, это в основном метрики, связанные с машиной, процессор, память и т. Д., Которые регистрируются, а не такие вещи, как количество запросов ok, error или not found для конечных точек, которые я сопоставил. Я проверил, что запросы прослушиваются моим классом слушателей, добавив также ConsoleReporter, чтобы я мог видеть увеличение всех подсчетов для разных запросов. Итак, мой вопрос, наконец, как мне увидеть все те же данные метра и таймера в графите? Есть ли какие-то дополнительные настройки, которые я должен установить, или что-то, чтобы получить эти данные, или данные просто называют что-то совершенно другое в Graphite?
1 ответ
Проблема заключалась в том, что сокет, указанный в этой строке, был неправильным, но единственный способ найти сокет состоял в том, чтобы использовать netstat, и в моем случае он оказался 22033:
final Graphite graphite = new Graphite(new InetSocketAddress("localhost", 8080));
Это могло быть указано в каком-то файле в графите, но я не нашел упоминания в какой-либо документации.