Поделиться через


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

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

В службе приложение Azure можно добавить до девяти контейнеров бокового автомобиля для каждого приложения Linux. Контейнеры на стороне позволяют развертывать дополнительные службы и функции в приложениях Linux без тесной привязки к основному (встроенному) контейнеру. Например, можно добавить мониторинг, ведение журнала, конфигурацию и сетевые службы в качестве контейнеров на стороне. Боковая машина сборщика OpenTelemetry является одним из таких примеров мониторинга.

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

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

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

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

  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> уникальным именем приложения.

cd ~
dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
cd MyFirstAzureWebApp
az webapp up --name <app-name> --os-type linux

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

3. Добавление контейнера боковинка

В этом разделе описано, как добавить контейнер боковой машины в приложение Linux. Интерфейс портала по-прежнему развертывается. Если он еще недоступен, перейдите на вкладку "Использовать шаблон ARM" ниже.

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

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

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

    Если баннер не отображается, пользовательский интерфейс портала еще не развернут для вашей подписки. Перейдите на вкладку "Использовать шаблон ARM" и перейдите к ней.

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

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

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

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

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

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

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

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

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

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

    • Имя: APPLICATIONINSIGHTS_CONNECTION_STRING
    • Значение: строка подключения в выходных azd provisionданных . Если вы потеряли сеанс Cloud Shell, его также можно найти на странице обзора ресурса Application Insights в разделе "Строка подключения".
  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. Если вы все еще находитесь в каталоге ~/MyFirstAzureWebApp , то другие параметры не нужны, так как az webapp up уже заданы значения по умолчанию для группы ресурсов и имени приложения.

    az webapp deploy --src-path startup.sh --target-path /home/site/startup.sh --type static
    

    Совет

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

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

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

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

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

5. Проверка в Application Insights

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

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

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

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

Примечание.

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

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

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

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

Часто задаваемые вопросы

Как контейнеры на стороне обрабатывают внутреннюю связь?

Контейнеры на стороне используют тот же сетевой узел, что и основной контейнер, поэтому основной контейнер (и другие контейнеры бокового контейнера) может достичь любого порта на боковой стороне localhost:<port>. В примере startup.sh используется localhost:4318 для доступа к порту 4318 на боковой панели otel-сборщика.

В диалоговом окне "Изменить контейнер" поле "Порт" в настоящее время не используется Служба приложений. Его можно использовать как часть метаданных боковой панели, например, чтобы указать, какой порт прослушивает боковая машина.

Разделы справки инструментировать другие языковые стеки?

Вы можете использовать аналогичный подход к инструментированию приложений в других языковых стеках. Дополнительные сведения см. в документации по OpenTelemetry:

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