Квантиль запроса Prometheus о производительности использования памяти модуля - PullRequest
0 голосов
/ 18 июня 2019

Я бы хотел получить 0,95 процентили использования памяти моих модулей за последний раз. Однако этот запрос начинает занимать слишком много времени, если я использую «большой» (7 / 10d) диапазон.

Запрос, который я сейчас использую:

quantile_over_time(0.95, container_memory_usage_bytes[10d])

Требуется около 100 секунд для завершения

Я удалил дополнительные фильтры пространства имен для краткости

Какие шаги я могу предпринять, чтобы сделать этот запрос более производительным? (кроме увеличения машины)

Я думал о расчете 0,95 процентиля каждый раз (скажем, 30 минут) и пометил его p95_memory_usage и в запросе использовал p95_memory_usage вместо container_memory_usage_bytes , чтобы я мог уменьшить количество точек, через которые должен пройти запрос.

Однако разве это не исказит значения?

1 Ответ

2 голосов
/ 19 июня 2019

Как вы уже заметили, агрегирование квантилей (с течением времени или иным образом) на самом деле не работает.

Вы можете попытаться построить гистограмму использования памяти с течением времени, используя правила записи, выглядящие как "реальные"Гистограмма Прометея (состоящая из метрик _bucket, _count и _sum), хотя делать это может быть утомительно.Что-то вроде:

- record: container_memory_usage_bytes_bucket
  labels:
    le: 100000.0
  expr: |
    container_memory_usage_bytes > bool 100000.0
      +
    (
      container_memory_usage_bytes_bucket{le="100000.0"}
        or ignoring(le)
      container_memory_usage_bytes * 0
    )

Повторите для всех интересующих вас размеров сегментов, добавьте _count и _sum метрики.

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

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

Остальное (и это пришло ко мне только после написания всехиз вышеперечисленного) вы можете определить правило записи, которое работает с более низким разрешением (например, один раз в час) и записывает текущее значение container_memory_usage_bytes метрики.Тогда вы могли бы продолжать использовать quantile_over_time над этой метрикой с более низким разрешением.Очевидно, вы потеряете точность (поскольку вы выбрасываете много образцов), и ваш квантиль будет обновляться только раз в час, но это намного проще.И вам нужно только подождать 10 дней, чтобы увидеть, достаточно ли близок результат.(О:

...