DropWizard метрики метры против таймеров


Я учусь библиотека метрик DropWizard (ранее Coda Hale metrics), и я смущен, когда я должен использовать Meters vs Timers. Согласно документам:

м: метр измеряет скорость, с которой происходит набор событий

и:

таймер: есть таймер-это в основном гистограмма длительности типа события и метр скорости его возникновение

основываясь на этих определениях, я не могу различить разницу между ними. Что меня смущает, так это Timer не используется так, как я ожидал бы его использовать. Ко мне,Timer это просто: таймер; он должен измерять разницу во времени между a start() и stop(). Но оказывается, что Timers также захватывает скорости, при которых происходят события, которые чувствуют, что они наступают на Meters пальцы.

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

1   51   2015-06-22 22:00:53

1 ответ:

вы смущены отчасти потому, что DW метрики таймер и, среди прочего, Измеритель метрик DW.

метр исключительно связан с тарифами, измеренными в хз (событиях в секунду). Каждый метр приводит к 4(?) публикуются различные метрики:

  • средняя (средняя) скорость с момента запуска метрики
  • 1, 5 и 15 минут средние скорости прокатки

вы используете метр путем записывать значение на различных пунктах внутри ваш код -- DW Metrics автоматически записывает время стены каждого вызова вместе со значением, которое вы ему дали, и использует их для расчета скорости, с которой это значение увеличивается:

Meter getRequests = registry.meter("some-operation.operations")
getRequests.mark() //resets the value, e.g. sets it to 0
int numberOfOps = doSomeNumberOfOperations() //takes 10 seconds, returns 333
getRequests.mark(numberOfOps) //sets the value to number of ops.

мы ожидаем, что наши ставки будут 33,3 Гц, так как произошло 333 операции, а время между двумя вызовами mark() составляло 10 секунд.

таймер вычисляет эти выше 4 метрики (учитывая каждый таймер.Context to be one event) и добавляет к ним ряд дополнительных метрик:

  • подсчет количества событий
  • минимальная, средняя и максимальная длительность, наблюдаемая с начала метрики
  • стандартное отклонение
  • "гистограмма", записывающая длительность, распределенную по 50-му, 97-му, 98-му, 99-му и 99,95 процентилям

есть что-то вроде 15 всего показатели для каждого таймера.

короче: таймеры сообщают много показателей, и они могут быть сложно поймите, но как только вы это сделаете, они-довольно мощный способ определить остроконечное поведение.

факт в том, что просто собирать время, проведенное между двумя точками, не очень полезный показатель. Подумайте: у вас есть блок кода, как это:

Timer timer = registry.timer("costly-operation.service-time")
Timer.Context context = timer.time()
costlyOperation() //service time 10 ms
context.stop()

предположим, что costlyOperation () имеет постоянную стоимость, постоянную нагрузку и работает на одном потоке. В течение 1-минутного отчетного периода, мы должны ожидать, чтобы время этой операции 6000 раз. Очевидно, что мы не будем сообщать о фактическое время обслуживания по проводу 6000x -- вместо этого нам нужно каким-то образом суммировать все эти операции, чтобы соответствовать нашему желаемому окну отчетности. Таймер DW Metrics делает это для нас автоматически, один раз в минуту (наш отчетный период). Через 5 минут наш реестр метрик будет сообщать:

  • скорость 100 (событий в секунду)
  • 1 минута средняя скорость 100
  • 5-минутная средняя скорость 100
  • количество 30000 (всего событий видел)
  • максимум 10 (мс)
  • мин 10
  • среднее значение 10
  • 50-й процентиль (p50) значение 10
  • 99,9-й процентиль (p999) значение 10

Теперь давайте рассмотрим, что мы входим в период, когда иногда наша операция полностью сходит с рельсов и блокируется в течение длительного периода:

Timer timer = registry.timer("costly-operation.service-time")
Timer.Context context = timer.time()
costlyOperation() //takes 10 ms usually, but once every 1000 times spikes to 1000 ms
context.stop()

за 1-минутный период сбора мы теперь увидим менее 6000 казней, так как каждый 1000-й выполнение занимает больше времени. Работает примерно до 5505. После первой минуты (6 минут общего системного времени) этого мы бы сейчас увидели:

  • средняя скорость 98 (событий в секунду)
  • 1 минута средняя скорость 91.75
  • 5 минут средняя скорость 98,35
  • количество 35505 (всего событий видел)
  • максимальная продолжительность 1000 (мс)
  • минимальная продолжительность 10
  • средняя продолжительность 10.13
  • 50-й процентиль (p50) значение 10
  • 99,9-й процентиль (p999) значение 1000

Если вы изобразили это, вы увидите, что большинство запросов (p50, p75, p99 и т. д.) завершались за 10 мс, но один запрос из 1000 (p99) завершался за 1 С. Это также будет рассматриваться как небольшое снижение средней скорости (около 2%) и значительное сокращение среднего значения 1 минуты (почти 9%).

Если вы только посмотрите на С течением времени означает (либо скорость или продолжительность), вы будете никогда не замечайте эти всплески - они втягиваются в фоновый шум при усреднении с большим количеством успешных операций. Точно так же, просто зная Макс не полезно, потому что это не говорит вам, как часто Макс происходит. Вот почему гистограммы являются мощным инструментом для отслеживания производительности, и почему таймер DW Metrics публикует как скорость, так и гистограмму.