Руководство по настройке sidecar-контейнера для приложения Linux в службе приложений Azure

В этом руководстве вы добавите сборщик OpenTelemetry в качестве контейнера sidecar в приложение Linux (с использованием собственного кода) в службе Служба приложений Azure. Сведения о пользовательских контейнерах см. в руководстве по настройке контейнера sidecar для пользовательского контейнера в службе Служба приложений Azure.

Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.

Контейнеры-сайдкары в службе приложений позволяют развертывать дополнительные сервисы и функции в приложениях Linux без тесного связывания их со встроенным или пользовательским основным контейнером. Контейнеры-сайдкары запускаются вместе с основным контейнером приложения в том же плане App Service.

Вы можете добавить до девяти контейнеров сайдкара для каждого приложения Linux в службе App Service. Например, можно добавить мониторинг, ведение журнала, конфигурацию и сетевые службы в качестве сайдкар-контейнеров. Боковой контейнер коллектора OpenTelemetry - это один из примеров для мониторинга.

1. Настройте необходимые ресурсы

Сначала вы создадите ресурсы, используемые в руководстве. Они используются для этого конкретного сценария и не требуются для sidecar-контейнеров в целом.

  1. В Azure Cloud Shell выполните следующие команды. Обязательно предоставьте <environment-name>.

    git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs
    cd app-service-sidecar-tutorial-prereqs
    azd env new <environment-name>
    azd provision
    
  2. При появлении запроса укажите подписку и регион по вашему выбору. Например:

    • Подписка: Ваша подписка.
    • Регион: (Европа) Западная Европа.

    После завершения развертывания вы увидите следующие выходные данные:

     APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=...
     Azure container registry name = <registry-name>
     Managed identity resource ID = <managed-identity-resource-id>
     Managed identity client ID = <managed-identity-client-id>
    
     Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/<subscription-id>/resourceGroups/<group-name>
     
  3. Скопируйте эти выходные значения для дальнейшего использования. Их также можно найти на портале на страницах управления соответствующих ресурсов.

    Примечание

    azd provision использует включенные шаблоны для создания следующих ресурсов Azure:

    • Группа ресурсов на основе имени среды.
    • Реестр контейнеров с двумя развернутыми образами:
      • Образ Nginx с модулем OpenTelemetry.
      • Образ сборщика OpenTelemetry, настроенный для экспорта в Azure Monitor.
    • Управляемое удостоверение, назначаемое пользователем, с разрешением AcrPull для группы ресурсов (извлечение образов из реестра).
    • Рабочая область Log Analytics.
    • Компонент Application Insights .

2. Создайте веб-приложение

На этом шаге вы развернете шаблонное приложение ASP.NET Core. Выполните следующие команды в Azure Cloud Shell. Замените <app-name> на уникальное глобальное название приложения и eastus на предпочитаемый регион.

  1. Создайте пример приложения:

    cd ~
    dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
    cd MyFirstAzureWebApp
    
  2. Создайте группу ресурсов, план Linux App Service и веб-приложение:

    az group create --name myWebAppResourceGroup --location eastus
    az appservice plan create --name myWebAppPlan --resource-group myWebAppResourceGroup --sku P0v3 --is-linux
    az webapp create --name <app-name> --resource-group myWebAppResourceGroup --plan myWebAppPlan --runtime "DOTNETCORE:8.0"
    
  3. Создайте приложение и упаковайте содержимое каталога публикации:

    dotnet publish --configuration Release --output publish
    cd publish
    zip -r ../app.zip .
    cd ..
    
  4. Разверните пакет.

    az webapp deploy --name <app-name> --resource-group myWebAppResourceGroup --src-path app.zip --type zip
    

Через несколько минут веб-приложение .NET развёртывается в новом приложении App Service как MyFirstAzureWebApp.dll.

3. Добавьте контейнер sidecar

В этом разделе описано, как добавить sidecar-контейнер в приложение Linux.

  1. В портале Azure перейдите на страницу управления приложением

  2. На странице управления приложения в меню слева выберите Центр развертывания.

  3. Выберите баннер Хотите добавить контейнеры для запуска вместе с вашим приложением? Щелкните здесь, чтобы попробовать.

  4. Когда страница перезагрузится, выберите вкладку "Контейнеры" (новая).

  5. Выберите " Добавить " и настройте новый контейнер следующим образом:

    • Имя: otel-collector
    • Источник изображения: Реестр контейнеров Azure
    • Аутентификация: учетные данные администратора
    • Реестр: реестр, созданный с помощью azd provision
    • Изображение: otel-collector
    • Тег: последний
  6. Выберите Применить.

    Снимок экрана: настройка sidecar-контейнера в центре развертывания веб-приложения.

4. Настройка переменных среды

В примере сценария sidecar otel-collector настроен на экспорт данных OpenTelemetry в Azure Monitor, но ему нужна строка подключения в качестве переменной среды (см. файл конфигурации OpenTelemetry для образа otel-collector).

Вы настраиваете переменные среды для контейнеров, как для любого приложения App Service, путем настройки приложения. Параметры приложения доступны для всех контейнеров в приложении.

  1. Перейдите на страницу управления приложения App Service.

  2. В меню слева выберите Переменные среды.

  3. Добавьте параметр приложения, выбрав Добавить, и настройте его следующим образом:

    • Имя: APPLICATIONINSIGHTS_CONNECTION_STRING
    • Значение: строка подключения в выходных данных azd provision. Если вы потеряли сеанс Cloud Shell, его также можно найти на странице обзора ресурса Application Insight в разделе Строка подключения.
  4. Выберите Применить, затем Применить, затем Подтвердить.

    Снимок экрана: страница конфигурации веб-приложения с двумя параметрами приложения.

5. Настройка инструментирования при запуске

На этом шаге вы создадите инструментирование для приложения в соответствии с инструкциями, описанными в инструментировании OpenTelemetry .NET без написания кода.

  1. Вернитесь в Cloud Shell, создайте startup.sh со следующими строками.

    cat > startup.sh << 'EOF'
    #!/bin/bash
    
    # Download the bash script
    curl -sSfL https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.sh -O
    
    # Install core files
    sh ./otel-dotnet-auto-install.sh
    
    # Enable execution for the instrumentation script
    chmod +x $HOME/.otel-dotnet-auto/instrument.sh
    
    # Setup the instrumentation for the current shell session
    . $HOME/.otel-dotnet-auto/instrument.sh
    
    export OTEL_SERVICE_NAME="MyFirstAzureWebApp-Azure"
    export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
    export OTEL_TRACES_EXPORTER="otlp"
    export OTEL_METRICS_EXPORTER="otlp"
    export OTEL_LOGS_EXPORTER="otlp"
    
    # Run your application with instrumentation
    OTEL_SERVICE_NAME=myapp OTEL_RESOURCE_ATTRIBUTES=deployment.environment=staging,service.version=1.0.0 dotnet /home/site/wwwroot/MyFirstAzureWebApp.dll
    EOF
    
  2. Разверните этот файл в приложении с помощью следующей команды Azure CLI. Замените <app-name> на имя, которое вы использовали при создании приложения.

    az webapp deploy --resource-group myWebAppResourceGroup --name <app-name> --src-path startup.sh --target-path /home/site/startup.sh --type static
    

    Совет

    Этот подход развертывает файл startup.sh отдельно от приложения. Таким образом, конфигурация инструментирования отделена от кода приложения. Однако для развертывания скрипта вместе с приложением можно использовать другие методы развертывания.

  3. Вернитесь на страницу управления приложения, в меню слева выберите Конфигурация.

  4. Задайте для команды запуска значение /home/site/startup.sh. Это тот же путь, по которому вы выполнили развертывание на предыдущем шаге.

  5. Нажмите кнопку "Сохранить", а затем "Продолжить".

    Снимок экрана: настройка пользовательского файла запуска для приложения App Service в портале Azure.

5. Проверьте в Application Insights

Теперь контейнер sidecar otel-collector должен экспортировать данные в Application Insights.

  1. Вернитесь на вкладку https://<app-name>.azurewebsites.netбраузера, обновите страницу несколько раз, чтобы создать некоторые веб-запросы.

  2. Вернитесь на страницу обзора группы ресурсов, а затем выберите ресурс Application Insights, созданный с помощью azd up. Теперь в диаграммах по умолчанию должны отображаться некоторые данные.

    Снимок экрана: страница Application Insights с данными на диаграммах по умолчанию.

Примечание

В этом очень распространенном сценарии мониторинга Application Insights — это лишь один из получателей OpenTelemetry, которые можно использовать, например Jaeger, Prometheus и Zipkin.

6. Очистка ресурсов

Если вам больше не нужна среда, можно удалить группы ресурсов и все связанные ресурсы. Просто выполните следующие команды в Cloud Shell:

cd ~/MyFirstAzureWebApp
az group delete --name myWebAppResourceGroup --yes
cd ~/app-service-sidecar-tutorial-prereqs
azd down

Дополнительные ресурсы