Настройка Prometheus, Grafana и Loki на виртуальной машине Azure с использованием HTTPS с использованием шлюза приложений Azure

Вопрос:

Всем привет,

Я новичок в использовании шлюза приложений Azure, и мне нужна помощь в настройке Prometheus, Grafana и Loki на одной виртуальной машине Azure. Я хочу безопасно предоставлять доступ к этим сервисам через HTTPS через отдельные поддомены (например, prometheus.example.com, grafana.example.com, loki.example.com) и управлять DNS с помощью AWS Route 53.

Моя установка:

  1. Виртуальная машина Azure: размещение Prometheus, Grafana и Loki.

  2. Шлюз приложений Azure: для маршрутизации трафика на основе поддоменов.

  3. HTTPS. Включите HTTPS только для всех служб.

  4. DNS: управляется AWS Route 53.

Цели:

  • Прометей: доступен через https://prometheus.example.com в порту 9090.

  • Grafana: Доступен через https://grafana.example.com в порту 3000.

  • Локи: Доступен через https://loki.example.com в порту 3100.

  • Масштабируемость. Запланируйте добавление дополнительных приложений с использованием того же шлюза приложений Azure.

Текущий прогресс:

  1. Настройка виртуальной машины: создана виртуальная машина Azure и установлены Prometheus, Grafana и Loki.

  2. Сеть: настроена виртуальная сеть Azure и группа безопасности сети для управления сетевым трафиком.

  3. Шлюз приложений: настроен с прослушивателями и серверными пулами.

  4. DNS: управляется через AWS Route 53 для указания поддоменов на общедоступный IP-адрес Шлюза приложений.

Проблемы, с которыми я сталкиваюсь:

  1. Маршрутизация трафика. Требуется руководство по настройке шлюза приложений Azure для правильной маршрутизации трафика в Prometheus, Grafana и Loki на основе поддоменов.

  2. Обеспечение соблюдения https: как обеспечить перенаправление HTTP-запросов на HTTPS для всех поддоменов.

  3. Проверка работоспособности: рекомендации по настройке проверок работоспособности для этих служб.

  4. Управление сертификатами SSL. Есть ли в Azure такой менеджер сертификатов, как AWS Certificate Manager? Как я могу управлять сертификатами SSL в Azure без создания сертификатов вручную или без использования Let's Encrypt?

Вот моя текущая конфигурация:

  • Слушатели шлюза приложений:

    • Прослушиватель prometheus.example.com на порту 443

    • Прослушиватель grafana.example.com на порту 443

    • Прослушиватель loki.example.com на порту 443

  • Бэкэнд-пулы:

    • ВМ с установленными Prometheus, Grafana и Loki
  • Настройки http:

    • Прометей: http://<VM private IP>:9090

    • Графана: http://<VM private IP>:3000

    • Локи: http://<VM private IP>:3100

  • DNS-записи в AWS Route 53:

    • A записи, указывающие поддомены на общедоступный IP-адрес Шлюза приложений Azure.

Конкретные вопросы:

  1. Конфигурация маршрутизации. Как настроить шлюз приложений Azure для правильной маршрутизации трафика в Prometheus, Grafana и Loki на основе поддоменов?

  2. Проверка работоспособности. Каковы наилучшие методы настройки проверки работоспособности для этих служб?

  3. Перенаправление HTTPS. Как обеспечить перенаправление HTTP-запросов на HTTPS для всех поддоменов?

  4. Управление сертификатами SSL. Есть ли в Azure встроенный менеджер сертификатов, аналогичный диспетчеру сертификатов AWS? Если да, то как я могу использовать его для управления своими SSL-сертификатами? Альтернативно, как я могу управлять сертификатами SSL без создания сертификатов вручную или без использования Let's Encrypt?

Дополнительный контекст:

Я очень рад использовать Azure Application Gateway для этой настройки, поскольку это позволит мне легко добавлять больше приложений в будущем. Мы будем очень признательны за любые рекомендации, пошаговые инструкции или примеры!

Заранее спасибо за вашу помощь!

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

...настройка шлюза приложений Azure для правильной маршрутизации трафика в Prometheus, Grafana и Loki на основе поддоменов.

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

  1. Настройте параметры HTTP для серверов. Убедитесь, что протокол соответствует тому, который использовался бы, если бы вы просматривали непосредственно виртуальную машину. Т.е. В большинстве случаев обычный HTTP. Если вы хотите использовать HTTPS, вам необходимо убедиться, что вы настроили каждое из своих приложений соответствующим образом и либо использовать сертификат, выданный общедоступным центром сертификации, либо импортировать сертификат центра сертификации в App Gateway в доверенных центрах сертификации.
  2. Создайте карты URL-путей в App Gateway. Вам понадобится одна карта путей для каждого приложения. Путь должен быть /, и вы должны указать в условии, что заголовок хоста должен соответствовать имени домена для этого конкретного приложения.
  3. Настройте правила маршрутизации, которые сопоставляют ваш интерфейсный прослушиватель HTTPS с созданными вами картами путей. Одно правило для каждого серверного приложения.

Каковы наилучшие методы настройки проверок состояния здоровья для этих служб?

Вам необходимо выбрать стратегию либо из документации по продукту, либо придумав ее самостоятельно. Обычно зонда, настроенного на выполнение GET /, достаточно, чтобы убедиться, что хост доступен и что веб-сервер отвечает нормально. Если корень перенаправляет с помощью 301 или 302, вместо этого используйте путь, на который он перенаправляет. Например, /login.php. Вам следует искать код ответа HTTP 20x.

Как я могу гарантировать, что HTTP-запросы перенаправляются на HTTPS для всех поддоменов?

  1. Создайте внешний прослушиватель для простого HTTP, порт 80. Оставьте имя хоста пустым, чтобы оно применялось ко всем входящим простым HTTP-запросам.
  2. В App Gateway -> Settings -> Redirect Configurations добавьте конфигурацию. Выберите цель в качестве прослушивателя HTTPS. Выберите вариант включения строки запроса. Решите, хотите ли вы постоянное перенаправление 301, которое кэшируется вышестоящими прокси-серверами и браузерами, или временное 302, которое просто означает, что клиент будет каждый раз делать запрос, чтобы проверить, что перенаправление все еще на месте. 301 постоянный подойдет, если вы никогда не собираетесь обслуживать HTTP на этом шлюзе.

Есть ли в Azure встроенный менеджер сертификатов, аналогичный диспетчеру сертификатов AWS? Если да, то как я могу использовать его для управления своими SSL-сертификатами? Альтернативно, как я могу управлять сертификатами SSL без создания сертификатов вручную или без использования Let's Encrypt?

Не совсем. Существуют управляемые сертификаты Azure для служб приложений, а Azure KeyVault поддерживает создание закрытых ключей и CSR, но для подписи сертификата вам нужен общедоступный центр сертификации, например GlobalSign, Digicert и т. д. Если у вас уже есть сертификат с подстановочными знаками для *.example.com, вы можете использовать это . Или вы действительно можете использовать Let's Encrypt с проверкой DNS01. В конечном итоге вы можете загрузить подписанную цепочку сертификатов формата PFX (должна включать промежуточные и корневой центр сертификации) и закрытый ключ непосредственно в App Gateway или сослаться на существующий сертификат в KeyVault (который вам потребуется создать или загрузить). Я не буду здесь описывать шаги KeyVault, потому что это отходит от темы.

В результате в настоящее время не существует готовых функций для выпуска или продления сертификатов. Однако вы можете использовать проблемы с сертификатами в AWS Certificate Manager.

Другие вопросы по теме

400 Ошибка сертификата SSL из шлюза приложений Azure с настройкой mTLS с помощью Terraform
Шлюз приложений Azure: изменить общедоступный IP-адрес без простоев?
Невозможно создать частную ссылку для шлюза приложений Azure, поскольку мне нужно удалить внешние ресурсы перед развертыванием в этой подсети
Когда использовать application_gateway_backend_address_pools сетевых интерфейсов Azure
Шлюз приложений Azure http/2 не работает
Как запретить AKS Ingress перезаписывать существующие службы Шлюза приложений?
Azure: настройка аутентификации для хранилища BLOB-объектов в учетной записи хранения Azure из шлюза приложений
Внутренний пул шлюза приложений Azure для внутреннего балансировщика нагрузки приложений контейнеров Azure
Устранение неполадок с настройкой приоритета правил при входе в шлюз приложений Azure для Kubernetes
Не удалось добавить новый IP-адрес виртуальной машины во внутренний пул Azure Gateway

Похожие вопросы

Ошибка развертывания Flask службы приложений Azure: «Не удалось ответить на HTTP-запросы связи на порту 8000; не удалось запустить сайт. Проверьте журналы контейнера на наличие отладки»
При сборке приложения не удалось создать папку артефакта: «frontend/dist/». Убедитесь, что это свойство настроено правильно в файле рабочего процесса
Как использовать минимальное количество веб-действий для отправки уведомлений в конвейере ADF?
Невозможно подключить onpremisesql к adf
Как получить идентификатор пользователя Azure Entra из SignalR Hub?
Процессор концентратора событий Azure: веб-задание или AzureFunction?
Как получить ключ API от службы поиска Azure AI, созданной в Terraform, чтобы использовать его в другом ресурсе?
Почему самостоятельный агент Azure получает сообщение об ошибке «Отказано в соединении» при подключении к EventHubs?
Файл паркета не перезаписывается в записных книжках Azure Synapse
Нужна ли мне подписка на Microsoft 365, чтобы использовать Graph API для Outlook в Python?