Блог Amazon Web Services
Начинаем работу с Amazon Managed service for Prometheus
Зарегистрируйтесь, чтобы получать приглашения на мероприятия AWS на русском языке.
Оригинал статьи: ссылка (Imaya Kumar Jagannathan, Senior Solutions Architect; Viji Sarathy, Senior Solutions Architect)
Amazon Managed Service для Prometheus (AMP) — это совместимый с Prometheus сервис мониторинга контейнерной инфраструктуры и метрик приложений для контейнеров, который упрощает клиентам настройку безопасного мониторинга масштабируемых контейнерных окружений. Prometheus поддерживает различные механизмы сбора метрик, которые включают в себя ряд библиотек и серверов, помогающих экспортировать специфические для приложений метрики из сторонних систем в формате метрик Prometheus. Вы также можете использовать AWS Distro для OpenTelemetry, чтобы получать метрики приложений из своего окружения. С помощью AMP вы можете использовать ту же открытую модель данных и язык запросов Prometheus для мониторинга производительности ваших контейнерных рабочих нагрузок, что и сегодня. Для использования сервиса не требуются предварительные вложения, и вы платите только за количество принимаемых метрик.
Клиенты, использующие Prometheus в своих контейнерных средах, сталкиваются с проблемами управления высокодоступной, масштабируемой и безопасной серверной средой Prometheus, инфраструктурой для долговременного хранения данных и контролем доступа. AMP решает эти проблемы, предоставляя полностью управляемую среду, тесно интегрированную с AWS Identity and Access Management (IAM) для контроля аутентификации и авторизации. Вы можете начать использовать AMP, выполнив эти два простых шага:
- Создайте рабочую среду AMP
- Настройте сервер Prometheus на отправку метрик в рабочую среду AMP
После настройки вы сможете использовать полностью управляемую среду AMP для получения, хранения и запроса метрик. В этой статье мы рассмотрим шаги, необходимые для настройки AMP для получения пользовательских метрик Prometheus, собранных из контейнеризованной рабочей нагрузки, развернутой на кластере Amazon EKS, а затем запросим и визуализируем их с помощью Grafana.
Архитектура
На диаграмме ниже показана общая архитектура Amazon Managed Service для Prometheus и его взаимодействие с другими компонентами.
Настройка рабочей среды для сбора метрик Prometheus
Чтобы начать, вы сначала должны создать рабочую среду AMP. Рабочая среда — это изолированое от других рабочих сред AMP окружение, где вы принимаете, храните и запрашиваете метрики Prometheus, которые были собраны из рабочих нагрузок. В каждом регионе в рамках одной учетной записи AWS можно создать одну или несколько рабочих сред, и каждую рабочую среду можно использовать для приема метрик, собранных с нескольких рабочих нагрузок, которые экспортируют метрики в формате, совместимом с Prometheus.
Управляемая клиентом политика IAM со следующими правами доступа должна быть добавлена пользователю IAM, который управляет рабочей средой.
Рабочая среда создается из консоли управления AWS, как показано ниже:
Кроме того, вы также можете создать рабочую среду с помощью AWS CLI, как это описано здесь.
Далее, в качестве дополнительного шага, вы создаете interface VPC endpoint для безопасного доступа к управляемому сервису из ресурсов, развернутых на вашем VPC. Это гарантирует, что данные, принимаемые управляемым сервисом, не покинут VPC в вашей учетной записи AWS. Это можно сделать с помощью AWS CLI следующим образом. Убедитесь, что такие строки, как VPC_ID, AWS_REGION
и другие, будут заменены соответствующими значениями.
В вышеприведенной команде SECURITY_GROUP_IDS представляет собой список групп безопасности, связанных с VPC interface endpoint для обеспечения связи между сетевым интерфейсом конечной точки и ресурсами в VPC, такими как рабочие узлы кластера Amazon EKS. SUBNET_IDS представляет собой список подсетей, в которых находятся эти ресурсы.
Настройка прав доступа
Сборщики метрик (например, сервер Prometheus, развернутый на кластере Amazon EKS) извлекают оперативные метрики из контейнерных рабочих нагрузок, запущенных в кластере, и отправляют их в AMP для долговременного хранения, а также для последующего запроса инструментами мониторинга. Данные отправляются с помощью HTTP-запросов, которые должны быть подписаны валидными учетными данными AWS с использованием алгоритма AWS Signature Version 4 для аутентификации и авторизации каждого клиентского запроса на управляемый сервис. Для этого запросы отправляются на экземпляр AWS прокси для подписи, который будет перенаправлять их в управляемый сервис.
Прокси для подписи AWS может быть развернут в кластере Amazon EKS для работы под учетной записью службы Kubernetes. С помощью ролей IAM для учетных записей служб (IRSA) можно связать роль IAM с учетной записью служб Kubernetes и, таким образом, предоставить права доступа этой роли IAM любому поду, который использует эту учетную запись. Это следует принципу наименьших привилегий, поскольку с помощью IRSA можно безопасно настроить прокси для подписи AWS, чтобы отправлять метрики Prometheus в AMP.
Shell скрипт, предоставленный ниже, выполняет следующие действия после замены переменной YOUR_EKS_CLUSTER_NAME
на имя вашего Amazon EKS кластера.
- Создает роль IAM с политикой IAM, имеющей права доступа на удаленную запись в рабочую среду AMP.
- Создает учетную запись службы Kubernetes, сопровождаемую ролью IAM.
- Создает доверительные отношения между ролью IAM и провайдером OIDC, расположенным в вашем кластере Amazon EKS.
Для выполнения скрипта необходимо, чтобы вы установили инструменты CLI kubectl и eksctl и настроили их для доступа к вашему кластеру Amazon EKS.
Данный скрипт создаёт роль IAM со следующими правами доступа, называющуюся EKS-AMP-ServiceAccount-Role и связывает эту роль с учетной записью Kubernetes, называющейся iamproxy-service-account в пространствах имен prometheus и grafana.
Развертывание сервера Prometheus
Amazon Managed Service для Prometheus не собирает эксплуатационные метрики непосредственно из контейнеризированных рабочих нагрузок в кластере Kubernetes. Для выполнения этой задачи пользователям необходимо развернуть и настроить стандартный сервер Prometheus или агента OpenTelemetry, как, например, OpenTelemetry сборщик для AWS Distro, в своем кластере. В данной статье используется сервер Prometheus, который разворачивается на кластере Amazon EKS с помощью чартов Helm следующим образом:
Теперь, прокси для подписи AWS может быть развернут в кластере Amazon EKS с использованием предоставленного манифеста YAML. Замените переменную {AWS_REGION}
на соответствующее имя региона AWS, замените ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
на ARN созданного вами EKS-AMP-ServiceAccount-Role
и замените {WORKSPACE_ID}
на AMP ID рабочей среды, созданной вами ранее. Подписывающий прокси ссылается на образ Docker из публичного репозитория в ECR.
Создайте файл под названием amp_ingest_override_values.yaml
со следующим содержимым.
Выполните следующую команду для изменения конфигурации сервера Prometheus, чтобы развернуть прокси для подписи и настроить конечную точку remoteWrite.
После применения вышеуказанных конфигураций сервер Prometheus готов к сбору метрик с сервисов, развернутых в кластере, и отправке их в указанную рабочую среду Amazon Managed Service для Prometheus с помощью прокси для подписи AWS.
Приложение, оснащенное клиентской библиотекой Prometheus, теперь развернуто в виде набора реплик для кластера Amazon EKS. Оно отслеживает количество входящих HTTP-запросов с помощью счетчика Prometheus с именем http_requests_total
и предоставляет эти данные по HTTP на конечной точке /metrics
. При обращении к этой конечной точке выдается следующий результат, который периодически собирается сервером Prometheus.
Визуализация метрик с помощью Grafana
Метрики, собранные в рабочей среде Amazon Managed Service для Prometheus, могут быть визуализированы с помощью Grafana. В Grafana v7.3.x добавлена новая функция для поддержки аутентификации AWS Signature Version 4 (SigV4), и мы будем ее здесь использовать. Разверните самостоятельно управляемую Grafana в кластере Amazon EKS с помощью Helm-чартов, как показано ниже:
Обновление сервера Grafana для использования прокси для подписи AWS.
Создайте новый файл и назовите его amp_query_override_values.yaml
. Этот файл будет использован для обновления вашей установленной Grafana, чтобы включить протокол Sigv4, который прокси для подписи AWS использует для аутентификации.
Теперь выполните следующую команду, чтобы обновить ваше окружение Grafana.
Теперь вы можете получить доступ к Grafana, переадресовав порт на http://localhost:5001, используя следующую команду. Замените строку GRAFANA_POD_NAME
на актуальное имя пода Grafana, который вы только что создали.
Затем откройте Grafana из интернет-браузера, используя вышеуказанный URL, и войдите в систему, указав имя admin. Пароль можно получить из секрета Kubernetes следующим образом:
Прежде чем мы сможем визуализировать метрики в Grafana, необходимо настроить один или несколько источников данных. Здесь мы укажем рабочую среду внутри Amazon Managed Service для Prometheus в качестве источника данных, как показано ниже. В поле URL укажите адрес для запросов, отображаемый на странице детальной информации о рабочей среде AMP, без /api/v1/query
в конце адреса.
Теперь вы готовы запросить метрики для счетчика Prometheus http_requests_total, хранящиеся в управляемой рабочей среде сервиса, и визуализировать частоту HTTP-запросов за 5-минутный период, используя запрос Prometheus, следующим образом: sum(rate(http_requests_total{exported_job=”recommender”}[5m])) by (path)
На рисунке ниже показано, как визуализировать эту метрику в Grafana для различных сегментов адреса URL, полученных в счетчике Prometheus.
В дополнение к служебным метрикам, собранным с рабочих нагрузок приложений, мы можем запросить системные метрики, собранные Prometheus для всех контейнеров и узлов в кластере Kubernetes. Например, счетчик Prometheus node_network_transmit_bytes_total фиксирует объем данных, переданных с каждого узла кластера. На рисунке ниже скорость передачи данных с каждого узла с помощью запроса Prometheus представлена следующим образом: sum(rate(node_network_transmit_bytes_total[5m])) by (instance)
Пользователи могут также визуализировать эти метрики, используя Amazon Managed Service для Grafana (AMG), как описано в этой статье.
Заключение
Prometheus — чрезвычайно популярный инструмент мониторинга с открытым исходным кодом, предоставляющий мощные возможности запросов и обладающий широкой поддержкой для различных рабочих нагрузок. В этой статье были описаны шаги, связанные с использованием Amazon Managed Service для Prometheus для безопасного получения, хранения и запроса метрик Prometheus, которые были собраны с рабочих нагрузок приложений, развернутых на Amazon EKS-кластере. Amazon Managed Service для Prometheus может также использоваться совместно с любой совместимой с Prometheus службой мониторинга и оповещения для сбора метрик из других контейнерных сред, таких как Amazon ECS, самостоятельно развернутого Kubernetes на AWS или локальной инфраструктуры. Рабочая среда Amazon Managed Service для Prometheus служит надежным источником данных для Grafana. Таким образом, пользователи могут визуализировать эти показатели с помощью самостоятельно развернутой Grafana или использовать Amazon Managed Service для Grafana.