Что делает метод Prometheus summary.observe? - PullRequest
3 голосов
/ 24 мая 2019

Я пытаюсь поиграть с итоговыми метриками и не спешу понять, куда мне положить итоговую. Наблюдать за звонком? Вот пример Prom-клиента (вы можете найти по npm):

const client = require('prom-client');
const summary = new client.Summary({
  name: 'metric_name',
  help: 'metric_help'
});
summary.observe(10);

но информации о том, как его использовать, недостаточно.

  1. что означает наблюдение (10)?
  2. куда мне поместить этот вызов summary.observe (10)? Сразу после объявления итоговой метрики или в конце вызова функции / завершения, например:

const client = require ('prom-client');

const summary = new client.Summary({
  name: 'metric_name',
  help: 'metric_help'
});
summary.observe(10); // do I put it here?

async myFunc(){
    await this.serviceCall();
    summary.observe(10); // or here?
} 

У кого-нибудь есть хороший пример / объяснение суммарного наблюдения?

1 Ответ

1 голос
/ 26 мая 2019

Во-первых, давайте выясним, что такое сводка : сводная метрика фиксирует отдельные наблюдения из события и суммирует их в ряд связанных метрик:

  1. сумма значений(он же наблюдения)
  2. количество наблюдений
  3. квантили

В качестве примера: если вы измеряете время ответа службы:

  • сначала вы создаете сводные метрики, предоставляющие

    • имя и метки (как обычно для определения метрики) - например: foobar_request_duration_seconds
    • обычно каким-то образомукажите окна измерений (количество наблюдений или максимальный возраст событий)
    • список квантилей для расчета - например: 0,1, 0,5 (медиана), 0,75, 0,9
  • для каждого запроса вы будете вычислять время ответа на запрос - это наблюдение

  • затем вы будете передавать вычисленное время ответа на запрос в итоговый объект
  • когда Прометей очищает вашу конечную точку, метрикивычисляются из наблюдаемых показателей времени ответа

    • foobar_request_duration_seconds_sum: общее количество секунд, потребленных запросами
    • foobar_request_duration_seconds_count: количество запросов (обратите внимание, что вы можете вычислить среднее с суммой)
    • foobar_request_duration_seconds_seconds{quantile="0.1"}: время отклика 10% (... одинаково для всех настроенных квантилей)

Надеюсь, это должно помочь вам понять документация для выпускного клиента :

Первый пример показывает, как указать квантили для вычисления

new client.Summary({
  name: 'metric_name',
  help: 'metric_help',
  percentiles: [0.01, 0.1, 0.9, 0.99]
});

Второй - как ограничить окно измерений;здесь, мера вычисляется за последние 10 минут (используя 5 сегментов - это влияет на сглаживание значений):

new client.Summary({
  name: 'metric_name',
  help: 'metric_help',
  maxAgeSeconds: 600,
  ageBuckets: 5
});

Возвращаясь к вашему вопросу, метод observe() должен вызываться для того, что вы наблюдаете.

Если вы хотите измерить некоторые данные, возвращаемые serviceCall(), вы передаете их в сводку

number_bytes_exchanged = await this.serviceCall();
summary.observe(number_bytes_exchanged);

Если вы хотите измерить время, затраченное сервисным вызовом

const observe_response_time = summary.startTimer();
await this.serviceCall();
observe_response_time();
...