2015-09-04 1 views
5

Я новичок в Coda Hale Metrics. Я создал образец весеннего приложения, которое имеет простой метод веб-службы RESTful.Persist Coda Hale Метрическая информация

Я использовал инструменты счетчика, таймера и счетчика, предоставляемые платформой Coda Hale Metrics, для отслеживания количества запросов, отношения запросов и продолжительности запроса. В настоящее время я выводил эту информацию на консоль с помощью Console Reporter of Metrics (см. Код ниже).

@Override 
    public void configureReporters(MetricRegistry metricRegistry) { 

     registerReporter(ConsoleReporter.forRegistry(metricRegistry).build()) 
       .start(30, TimeUnit.SECONDS); 
    } 

У меня есть несколько вопросов относительно Coda Hale Metrics.

(1) В настоящее время Счетчик показывает общее количество. запроса, сделанного с момента запуска сервера. Есть ли способ получить нет. запросов, сделанных в конкретный отчетный период (например: - подсчет за 1-е 30 секунд = счет 1, подсчет за 2-е 30 секунд = счет2 и т. д.)

(2) Можно ли получить продолжительность каждого запроса используя Таймер? В настоящее время таймер показывает минимальные, максимальные и средние темпы всех запросов.

(3) Существуют ли какие-либо возможности для сохранения данных Metrics во внешней БД (например: - MySQL)?

Ниже приведен мой метод обслуживания REST.

@RequestMapping(value = "/examplerest", method = RequestMethod.GET) 
    @ResponseBody 
    @Metered(name="exampleRestMetered") 
    @Timed(name="exampleRestTimed") 
    @Counted(name="exampleRestCounted", monotonic=true) 
    public String exampleRest(
      HttpServletResponse response) { 

/** 
some logics here 
*/ 
} 

Я ценю ваше руководство по этому вопросу.

Спасибо.

+0

Возможно, вы захотите ознакомиться с [zipkin] Twitterа (http://zipkin.io). – brettw

ответ

0

Текущее имя библиотеки показателей: Dropwizard Metrics (просто упоминание об этом, поскольку вы можете использовать более старую версию).

Что касается 3), если бы я тебя, я хотел бы проверить this проект отчетности Кассандре и this проект отчетности Elasticsearch. Вы можете найти список сторонних модулей, таких как вышеупомянутый, here.

Мне неизвестен какой-либо проект, который передает данные в реляционную базу данных.

Отчетность Elasticsearch может быть очень привлекательным, так как вы можете затем настроить Kibana немедленно визуализировать ваши данные (возможно, таким образом, что было бы трудно в Graphite/графана)

2

1) Есть ли способ, чтобы получить нет. запросов, сделанных в конкретный отчетный период?

Не от счетчика напрямую. Тем не менее, Meter или Timer выводит «m1_rate», который должен быть количеством вызовов в течение минувшей минуты.

Как правило, я собирал значение счетчика периодически и записывал запрос в базу данных показателей для выполнения такого анализа.

2) Ад. Для этого не нужен таймер. Подумайте об этом: у вас могут быть миллионы вызовов таймера в окне отчетов. Сохранение всех этих данных приведет к раздуванию размера таймера в памяти и сложности вычисления его сообщенных значений.

Если вам действительно нужно время для каждого запроса, это задание для ведения журнала или аудита.Вы также можете записать некоторые уникальные идентификационные характеристики запроса, чтобы помочь вам свертывать производительность по всей оси.

Обратите внимание, что вы можете собрать часть интеллекта, который вы ищете, для сбора таймингов сбора данных через различные скорости и счетчики, отображаемые для таймера. Например, если вы знаете, что в последнюю минуту произошло 1000 запросов (поскольку m1_rate составляет 16,6 Гц или 1000 запросов в минуту), и вы знаете, что 50-процентное время в процентах составляет 10 мс, а 99-й процент - 100 мс, вы можете принять не менее 500 запросов завершено в 10 мс или меньше и что 10 или более запросов завершены в 100 мс или более.

3) Конечно. Репортеры DW являются взаимозаменяемыми и сумасшедшими, вы можете писать один раз в день (при условии, что вы не можете найти приемлемое открытое предложение).

BUt IMO, лучшее место для сохранения метрик - это метрическая база данных. В пакет DropWizard встроены два Reporters, которые помогают в этом: репортер Ganglia и репортер Graphite.

Преимущество использования одного из этих инструментов заключается в том, что они созданы для эффективного хранения, поиска и применения функций по данным временных рядов. Подумайте: у вас есть счетчик, и вы хотите, чтобы график его изменения с течением времени. С Graphite вы просто завершаете свой вызов, чтобы нарисовать значение с помощью производного() и bam, у вас есть ставка. Я понятия не имею, как я буду выполнять эту операцию в SQL, что, по понятным причинам, больше связано с наборами, чем с серией.

+0

У меня есть аналогичный вопрос о метках кошаале [здесь] (http://stackoverflow.com/questions/40903403/how-to-reset-metrics-every-x-seconds). Я путаюсь, как сбрасывать счетчики каждые 30 секунд. Не уверен, можем ли мы это сделать. – user1950349