Рекомендации по масштабированию рабочих областей Azure Monitor с помощью управляемой службы Azure Monitor для Prometheus

Служба Azure Monitor, управляемая для Prometheus, позволяет собирать и анализировать метрики в большом масштабе. Метрики Prometheus хранятся в рабочих областях Azure Monitor. Рабочая область поддерживает аналитические инструменты, такие как Azure Managed Grafana, обозреватель метрик Azure Monitor с PromQL, а также инструменты с открытым исходным кодом, такие как PromQL и Grafana.

В этой статье приведены рекомендации по организации рабочих областей Azure Monitor для удовлетворения масштабируемого и растущего объема приема данных.

Критерии проектирования топологии

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

Ниже приведены сценарии, требующие разделения рабочей области Azure Monitor на несколько рабочих областей:

Сценарий Лучшие практики
Суверенные облака При работе с несколькими независимыми облаками создайте рабочую область Azure Monitor в каждом облаке.
Требования к соответствию или нормативным требованиям Если вы подвергаетесь нормативным требованиям, которым требуется хранение данных в определенных регионах, создайте рабочую область Azure Monitor для каждого региона в соответствии с вашими требованиями.
Региональное масштабирование При управлении метриками для региональных организаций, таких как крупные службы или финансовые учреждения с региональными учетными записями, создайте рабочую область Azure Monitor для каждого региона.
Тенанты Azure Для нескольких клиентов Azure создайте рабочую область Azure Monitor в каждом клиенте. Запрос данных между клиентами не поддерживается.
Среды развертывания Создайте отдельную рабочую область для каждой среды развертывания, чтобы поддерживать дискретные метрики для разработки, тестирования, предварительной версии и рабочих сред.
Ограничения и квоты служб Рабочие области Azure Monitor имеют ограничения приема по умолчанию, которые можно увеличить, открыв запрос в службу поддержки. Если вы приближаетесь к ограничению или оцениваете, что вы превысите ограничение приема, попробуйте запросить увеличение или разделить рабочую область на две или более рабочих областей.

Ограничения и квоты служб

Рабочие области Azure Monitor имеют квоты и ограничения по умолчанию для метрик с 1 миллионами событий, которые помечаются в минуту. По мере роста использования и приема дополнительных метрик можно запросить увеличение. Если требования к емкости являются исключительно большими, а потребности приема данных превышают ограничения одной рабочей области Azure Monitor, рассмотрите возможность создания нескольких рабочих областей Azure Monitor. Используйте метрики платформы рабочей области Azure Monitor для мониторинга использования и ограничений. Дополнительные сведения об ограничениях и квотах см. в статье об ограничениях и квотах службы Azure Monitor.

Рассмотрим следующие рекомендации по управлению ограничениями и квотами рабочей области Azure Monitor.

Лучшие практики Описание
Отслеживайте и создавайте оповещение о ограничениях приема и использовании. В портал Azure перейдите к рабочей области Azure Monitor. Перейдите к метрикам и убедитесь, что показатели "Использование активных временных рядов %" и "Использование событий на принятую минуту %" ниже 100%. Установите оповещение в Azure Monitor для мониторинга использования и его срабатывания, если использование превышает 80% от установленного лимита. Дополнительные сведения об использовании и ограничениях см. в статье "Как отслеживать ограничения и квоты службы".
Запрос на увеличение предела, когда использование превышает 80 % текущего предела. По мере роста использования Azure объем приема данных, скорее всего, увеличится. Рекомендуется запросить увеличение ограничений, если прием данных превышает или приближается к 80% от предела приема. Чтобы запросить увеличение лимита, см. статью "Запрос на увеличение лимита приема".
Оцените прогнозируемый масштаб. По мере роста использования и приема большего количества метрик в рабочей области сделайте оценку прогнозируемого масштаба и скорости роста. На основе прогнозов запросите увеличение предела.
Прием через Remote-write с использованием побочного контейнера Azure Monitor. Если вы используете побочный контейнер Azure Monitor и удаленную запись данных для сбора метрик в рабочую область Azure Monitor, рассмотрите следующие ограничения.
  • Контейнер-сайдкар может обрабатывать до 150 000 уникальных временных рядов.
  • Контейнер может вызывать ошибки при обработке запросов, превышающих 150 000, из-за большого количества одновременных подключений. Устранение этой проблемы путем увеличения размера удаленного пакета с 500 по умолчанию до 1000. Изменение размера удаленного пакета уменьшает количество открытых подключений.
  • Ограничения DCR/DCE. Ограничения применяются к правилам сбора данных (DCR) и конечным точкам сбора данных (DCE), которые отправляют метрики Prometheus в рабочую область Azure Monitor. Сведения о мониторинге этих ограничений см. в разделе "Просмотр и мониторинг ограничений DCR". Эти значения не подлежат увеличению.

    Рассмотрите возможность создания дополнительных DCR и DCE для распределения нагрузки по обработке данных между несколькими конечными точками. Этот подход помогает оптимизировать производительность и обеспечивает эффективную обработку данных. Дополнительные сведения о создании пользовательских конечных точек сбора данных (DCE) и настраиваемых правил сбора данных (DCR) см. в статье "Создание пользовательских конечных точек сбора данных (DCE) и настраиваемых правил сбора данных (DCR) для существующей рабочей области мониторинга Azure для приема метрик Prometheus".

    Оптимизация производительности для больших объемов данных

    Проглатывание

    Чтобы оптимизировать прием, рассмотрите следующие рекомендации.

    Лучшие практики Описание
    Определение метрик высокой кардинальности. Определите метрики с высокой кардинальностью или метрики, которые создают много временных рядов. Аналитика использования метрик рабочей области Azure Monitor предоставляет аналитические сведения об использовании метрик и возможностях оптимизации затрат, предоставляя сведения об использовании временных рядов и событий. Определив метрики высокой кратности, оптимизируйте их, чтобы уменьшить количество временных рядов путем удаления ненужных меток.
    Используйте конфигурацию Prometheus для оптимизации приема. Управляемый Prometheus Azure предоставляет Configmaps, которые содержат параметры, которые можно настроить и использовать для оптимизации инжестации. Дополнительные сведения см. в разделе ama-metrics-settings-configmap и ama-metrics-prometheus-config-configmap. Эти конфигурации соответствуют тому же формату, что и файл конфигурации Prometheus.
    Дополнительную информацию о настройке сбора данных см. в разделе "Настройка снятия метрик Prometheus в управляемой службе Azure Monitor для Prometheus". Например, рассмотрим следующее:

  • Настройка интервалов сбора данных.
  • Частота сбора данных по умолчанию составляет 30 секунд, которые можно изменить для каждого целевого объекта по умолчанию с помощью configmap. Чтобы сбалансировать компромисс между степенью детализации данных и использованием ресурсов, настройте scrape_interval и scrape_timeout в зависимости от критичности метрик.

  • Удалите ненужные метки для метрик высокой кратности.
  • Для метрик высокой кратности определите метки, которые не нужны, и удалите их, чтобы уменьшить количество временных рядов. Используйте metric_relabel_configs, чтобы удалить определенные метки из поступления. Дополнительные сведения см. в разделе "Конфигурация Prometheus".

    Используйте карту конфигурации, измените параметры по мере необходимости и примените конфигурацию к пространству имен kube-system для кластера. Если вы используете запись данных удаленно в рабочую область в Azure Monitor, примените настройки в процессе интеграции непосредственно через конфигурацию Prometheus.

    Запросы

    Чтобы оптимизировать запросы, рассмотрите следующие рекомендации.

    Использование правил записи для оптимизации производительности запросов

    Правила записи Prometheus используются для предварительного вычисления часто используемых или вычислительно затратных запросов, что делает их более эффективными и быстрыми для выполнения запросов. Правила записи особенно полезны для метрик большого объема, где запрос необработанных данных может быть медленным и ресурсоемким. Дополнительные сведения см. в разделе "Правила записи". Управляемый Prometheus Azure предоставляет управляемый и масштабируемый способ создания и обновления правил записи с помощью групп правил Azure Managed Prometheus.

    После создания групп правил Управляемый Prometheus Azure автоматически загружает и начинает оценивать их. Группы правил запросов из рабочей области Azure Monitor, такие как другие метрики Prometheus.

    Правила записи имеют следующие преимущества:

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

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

    • Простота Правила записи упрощают запросы в Grafana или других средствах визуализации, так как они могут ссылаться на предварительно компилированные метрики.

    В следующем примере показано правило записи, определенное в группе правил Azure Managed Prometheus:

    "record": "job:request_duration_seconds:avg ",
    "expression": "avg(rate(request_duration_seconds_sum[5m])) by (job)",
    "labels": {  "workload_type": "job"
                            },
    "enabled": true
    

    Для более сложных метрик создайте правила записи, которые объединяют несколько метрик или выполняют более сложные вычисления. В следующем примере instance:node_cpu_utilisation:rate5m вычисляется загрузка ЦП, когда ЦП неактивна

    "record": "instance:node_cpu_utilisation:rate5m",
     "expression": "1 - avg without (cpu) (sum without (mode)(rate(node_cpu_seconds_total{job=\"node\", mode=~\"idle|iowait|steal\"}[5m])))",
    "labels": {
                                "workload_type": "job"
                            },
    "enabled": true
    

    Рассмотрим следующие рекомендации по оптимизации правил записи:

    Лучшие практики Описание
    Определение метрик большого объема. Сосредоточьтесь на метриках, которые запрашиваются часто и имеют высокую кратность.
    Оптимизация интервала оценки правил. Чтобы сбалансировать свежесть данных и вычислительную нагрузку, настройте интервал оценки правил записи.
    Мониторинг производительности. Отслеживайте производительность запросов и настраивайте правила записи по мере необходимости.
    Оптимизация правил путем ограничения области. Чтобы сделать правила записи быстрее, ограничьте их область действия определенным кластером. Дополнительные сведения см. в разделе "Ограничение правил в определенный кластер".

    Использование фильтров в запросах

    Оптимизация запросов Prometheus с помощью фильтров включает уточнение запросов, чтобы возвращать только необходимые данные, уменьшая объем обработанных данных и повышая производительность. Ниже приведены некоторые распространенные методы уточнения запросов Prometheus.

    Лучшие практики Описание
    Используйте фильтры меток. Фильтры меток помогают сузить данные только тем, что вам нужно. Prometheus позволяет фильтровать с помощью {label_name="label_value"} синтаксиса. Если у вас есть большое количество метрик в нескольких кластерах, простой способ ограничить временные ряды — использовать cluster фильтр.

    Например, вместо запроса фильтруйте container_cpu_usage_seconds_totalпо кластеру container_cpu_usage_seconds_total{cluster="cluster1"}.
    Примените селекторы диапазона времени. Использование определенных диапазонов времени может значительно сократить объем запрашиваемых данных.

    Например, вместо запроса всех точек данных за последние семь дней http_requests_total{job="myapp"}, запросите данные за последний час с помощью http_requests_total{job="myapp"}[1h].
    Используйте агрегирование и группирование. Функции агрегирования можно использовать для суммирования данных, которые могут быть более эффективными, чем обработка необработанных точек данных. При агрегации данных используйте by для группировки по определенным меткам или without исключения определенных меток.

    Например, суммарные запросы, сгруппированные по заданию: sum(rate(http_requests_total[5m])) by (job)
    Отфильтруйте в начале запроса. Чтобы ограничить набор данных с самого начала, примените фильтры как можно раньше в запросе. Например, вместо sum(rate(http_requests_total[5m])) by (job)этого сначала фильтруйте, а затем агрегируете следующим образом: sum(rate(http_requests_total{job="myapp"}[5m])) by (job)
    Избегайте регулярных выражений, где это возможно. Ретексные фильтры могут быть мощными, но также являются вычислительными затратами. Всегда используйте точные совпадения, когда это возможно. Например, используйте http_requests_total{job=~"myapp.*"} вместо http_requests_total{job="myapp"}.
    Используйте смещение для исторических данных. Если вы сравниваете текущие данные с историческими offset данными, используйте модификатор.

    Например, чтобы сравнить текущие запросы с 24 часа назад, используйте rate(http_requests_total[5m]) - rate(http_requests_total[5m] offset 24h).
    Ограничение точек данных на диаграммах. При создании диаграмм ограничьте количество точек данных, чтобы повысить производительность отрисовки. Используйте параметр шага для управления разрешением.

    Например, в Grafana: задайте более высокое значение шага для уменьшения точек данных:http_requests_total{job="myapp"}[1h:10s].

    Параллельные запросы

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

    Лучшие практики Описание
    Распределение нагрузки запросов. Распределяйте нагрузку запроса, распространяя запросы по разным интервалам времени или экземплярам Prometheus.
    Ошеломленные запросы. Запланируйте выполнение запросов с разными интервалами, чтобы избежать пиков одновременного выполнения запросов.

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

    Правила оповещений и записи

    Оптимизация оповещений и правил записи для высокого масштаба

    Оповещения Prometheus и правила записи можно определить как группы правил Prometheus. Одна группа правил может содержать до 20 оповещений или правил записи. Создайте до 500 групп правил для каждой рабочей области, чтобы вместить необходимое количество оповещений или правил. Чтобы увеличить это ограничение, откройте запрос в службу поддержки

    При определении правил записи учитывайте интервал оценки для оптимизации количества временных рядов для каждого правила и производительности оценки правил. Интервалы оценки могут составлять от 1 минуты до 24 часов. Значение по умолчанию — 1 минута.

    Используйте Состояние ресурсов для просмотра запросов о статусе правила записи

    Настройте мониторинг ресурсов, чтобы просматривать состояние группы правил Prometheus в портале. Работоспособность ресурсов позволяет обнаруживать проблемы в правилах записи, такие как неправильная конфигурация или проблемы ограничения запросов. Дополнительные сведения о настройке работоспособности ресурсов см. в разделе "Просмотр состояний работоспособности ресурсов" групп правил Prometheus.