Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Агрегации ›Метрики агрегаций

Агрегация процентильных рангов

Агрегация метрик, которая вычисляет один или несколько процентильных рангов по числовым значениям, извлечённым из агрегированных документов. Эти значения могут быть извлечены из определённых числовых или гистограммных полей в документах.

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

Процентильный ранг показывает процент наблюдаемых значений, которые находятся ниже определённого значения. Например, если значение больше или равно 95% наблюдаемых значений, оно считается находящимся на 95-м процентильном ранге.

Предположим, ваши данные содержат время загрузки веб-страниц. У вас может быть соглашение об обслуживании, что 95% загрузок страниц завершаются в течение 500 мс, а 99% — в течение 600 мс.

Давайте рассмотрим диапазон процентилей, представляющих время загрузки:

GET latency/_search
{
  "size": 0,
  "aggs": {
    "load_time_ranks": {
      "percentile_ranks": {
        "field": "load_time",   
        "values": [ 500, 600 ]
      }
    }
  }
}

Поле load_time должно быть числовым полем

Ответ будет выглядеть так:

{
  ...

 "aggregations": {
    "load_time_ranks": {
      "values": {
        "500.0": 90.01,
        "600.0": 100.0
      }
    }
  }
}

Из этой информации можно определить, что вы достигаете целевого времени загрузки 99%, но не совсем достигаете целевого времени загрузки 95%.

Ответ с ключами

По умолчанию флаг keyed установлен на true, что ассоциирует уникальный строковый ключ с каждым контейнером и возвращает диапазоны в виде хэша, а не массива. Установка флага keyed на false отключит это поведение:

GET latency/_search
{
  "size": 0,
  "aggs": {
    "load_time_ranks": {
      "percentile_ranks": {
        "field": "load_time",
        "values": [ 500, 600 ],
        "keyed": false
      }
    }
  }
}

Ответ:

{
  ...

  "aggregations": {
    "load_time_ranks": {
      "values": [
        {
          "key": 500.0,
          "value": 90.01
        },
        {
          "key": 600.0,
          "value": 100.0
        }
      ]
    }
  }
}

Скрипт

Если вам нужно выполнить агрегацию по значениям, которые не индексируются, используйте динамическое поле. Например, если наше время загрузки указано в миллисекундах, но мы хотим вычислить процентили в секундах:

GET latency/_search
{
  "size": 0,
  "runtime_mappings": {
    "load_time.seconds": {
      "type": "long",
      "script": {
        "source": "emit(doc['load_time'].value / params.timeUnit)",
        "params": {
          "timeUnit": 1000
        }
      }
    }
  },
  "aggs": {
    "load_time_ranks": {
      "percentile_ranks": {
        "values": [ 500, 600 ],
        "field": "load_time.seconds"
      }
    }
  }
}

HDR Гистограмма

HDR Гистограмма (гистограмма с высоким динамическим диапазоном) — это альтернативная реализация, которая может быть полезна при расчёте процентильных рангов для измерений задержки, так как она может быть быстрее, чем реализация с t-распределением, но с затратами на больший объём памяти. Эта реализация поддерживает фиксированную наихудшую процентную ошибку (указанную как количество значащих цифр). Это означает, что если данные регистрируются со значениями от 1 микросекунды до 1 часа (3 600 000 000 микросекунд) в гистограмме, настроенной на 3 значащие цифры, она будет поддерживать разрешение 1 микросекунды для значений до 1 миллисекунды и 3,6 секунды (или лучше) для максимального отслеживаемого значения (1 час).

HDR Гистограмма может быть использована путём указания объекта hdr в запросе:

GET latency/_search
{
  "size": 0,
  "aggs": {
    "load_time_ranks": {
      "percentile_ranks": {
        "field": "load_time",
        "values": [ 500, 600 ],
        "hdr": {                                  
          "number_of_significant_value_digits": 3 
        }
      }
    }
  }
}

Объект hdr указывает, что HDR Гистограмма должна использоваться для вычисления процентилей, и конкретные настройки для этого алгоритма можно указать внутри объекта

number_of_significant_value_digits определяет разрешение значений для гистограммы в количестве значащих цифр

HDR Гистограмма поддерживает только положительные значения и выведет ошибку, если ей передать отрицательное значение. Также не рекомендуется использовать HDR Гистограмму, если диапазон значений неизвестен, так как это может привести к высокому потреблению памяти.

Отсутствующее значение

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

GET latency/_search
{
  "size": 0,
  "aggs": {
    "load_time_ranks": {
      "percentile_ranks": {
        "field": "load_time",
        "values": [ 500, 600 ],
        "missing": 10           
      }
    }
  }
}

Документы без значения в поле load_time попадут в тот же контейнер, что и документы со значением 10.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-metrics-percentile-rank-aggregation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API