Tutorial: Configurar um contêiner sidecar para uma aplicação Linux no Serviço de Aplicações do Azure

Neste tutorial, adiciona um coletor OpenTelemetry como um contentor sidecar a uma aplicação Linux (traga o seu próprio código) no Serviço de Aplicações do Azure. Para contêineres personalizados, consulte Tutorial: Configurar um contêiner sidecar para contêiner personalizado no Serviço de Aplicações do Azure.

Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.

Os contêineres de sidecar no App Service permitem implementar serviços e funcionalidades adicionais nas suas aplicações Linux sem uma dependência rígida ao contêiner principal interno ou personalizado. Os contêineres sidecar são executados ao lado do contêiner de aplicativo principal no mesmo plano do App Service.

Você pode adicionar até nove contêineres sidecar para cada aplicação Linux no App Service. Por exemplo, pode adicionar serviços de monitorização, registo, configuração e rede como contentores sidecar. Um sidecar coletor OpenTelemetry é um exemplo de monitoramento.

1. Configure os recursos necessários

Primeiro, cria os recursos que o tutorial usa. Eles são usados para este cenário específico e não são necessários para contêineres de sidecar em geral.

  1. No Azure Cloud Shell, execute os seguintes comandos. Certifique-se de fornecer o <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. Quando solicitado, forneça a assinatura e a região à sua escolha. Por exemplo:

    • Subscrição: A sua subscrição.
    • Região: (Europa) Europa Ocidental.

    Quando a implementação estiver concluída, deverá ver o seguinte resultado:

     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. Copie estes valores de saída para mais tarde. Pode também encontrá-los no portal, nas páginas de gestão dos respetivos recursos.

    Nota

    azd provision usa os modelos incluídos para criar os seguintes recursos do Azure:

2. Criar uma aplicação Web

Nesta etapa, implementa uma aplicação de modelo ASP.NET Core. Execute os seguintes comandos no Azure Cloud Shell. Substitua <app-name> por um nome de aplicação globalmente único e eastus pela sua região preferida.

  1. Crie o aplicativo de exemplo:

    cd ~
    dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
    cd MyFirstAzureWebApp
    
  2. Crie o grupo de recursos, o plano de serviços de aplicações Linux e a aplicação web:

    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. Construa a aplicação e empacote o conteúdo do diretório de publicação:

    dotnet publish --configuration Release --output publish
    cd publish
    zip -r ../app.zip .
    cd ..
    
  4. Implementar o pacote.

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

Após alguns minutos, a aplicação Web .NET é publicada como MyFirstAzureWebApp.dll na nova aplicação App Service.

3. Adicione um contentor sidecar

Nesta secção, adiciona um contentor sidecar à sua aplicação Linux.

  1. No Azure portal, navegue até a página de gerenciamento do aplicativo

  2. Na página de gerenciamento do aplicativo, no menu à esquerda, selecione Deployment Center.

  3. Selecione o banner Interessado em adicionar contêineres para serem executados ao lado do seu aplicativo? Clique aqui para experimentar.

  4. Quando a página for recarregada, selecione o separador Contentores (novo).

  5. Selecione Adicionar e configure o novo contêiner da seguinte maneira:

    • Designação: otel-collector
    • Origem da imagem: Azure Container Registry
    • Autenticação: Credenciais de administrador
    • Registo: O registo criado por azd provision
    • Imagem: otel-collector
    • Tag: mais recente
  6. Selecione Aplicar.

    Captura de ecrã mostrando como configurar um contentor de sidecar no centro de implementação de uma aplicação Web.

4. Configurar variáveis de ambiente

Para o cenário de exemplo, o sidecar do otel-collector está configurado para exportar os dados do OpenTelemetry para o Azure Monitor, mas precisa da cadeia de ligação como uma variável de ambiente (consulte o ficheiro de configuração do OpenTelemetry para a imagem do otel-collector).

Você configura variáveis de ambiente para os contêineres como qualquer aplicação do App Service, definindo definições da aplicação. As configurações da aplicação são acessíveis a todos os contentores na aplicação.

  1. Navegue até à página de gestão da aplicação do App Service.

  2. No menu à esquerda, selecione Variáveis de ambiente.

  3. Adicione uma configuração de aplicativo selecionando Adicionar e configure-a da seguinte maneira:

    • Nome: APPLICATIONINSIGHTS_CONNECTION_STRING
    • Valor: a cadeia de ligação na saída de azd provision. Se você perdeu a sessão do Cloud Shell, também poderá encontrá-la na página Visão geral do recurso Application Insight, em Cadeia de conexão.
  4. Selecione Aplicar, depois Aplicar, depois Confirmar.

    Captura de ecrã a mostrar a página Configuração de uma aplicação Web com duas definições de aplicação adicionadas.

5. Configure a instrumentação no arranque

Nesta etapa, cria a instrumentação para a sua aplicação de acordo com os passos descritos em OpenTelemetry .NET zero-code instrumentation.

  1. De volta ao Cloud Shell, crie startup.sh com as seguintes linhas.

    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. Implante este ficheiro na sua aplicação com o seguinte comando da CLI do Azure. Substitui <app-name> pelo nome que usaste ao criar a aplicação.

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

    Gorjeta

    Esta abordagem implanta o arquivo startup.sh separadamente da sua aplicação. Dessa forma, a configuração da instrumentação é separada do código da aplicação. No entanto, pode usar outros métodos de implantação para implantar o script junto com a sua aplicação.

  3. De volta à página de gestão da aplicação, no menu à esquerda, selecione Configuration.

  4. Defina Comando de arranque como /home/site/startup.sh. É o mesmo caminho que implementou na etapa anterior.

  5. Selecione Guardar e, em seguida, Continuar.

    Captura de ecrã que mostra como configurar um ficheiro de arranque personalizado para uma aplicação do Serviço de Aplicações no portal do Azure.

5. Verifique no Application Insights

O sidecar otel-collector deve exportar dados para o Application Insights agora.

  1. De volta à guia do navegador para https://<app-name>.azurewebsites.net, atualize a página algumas vezes para gerar algumas solicitações da Web.

  2. Volte para a página de visão geral do grupo de recursos e selecione o recurso do Application Insights que azd up criou. Agora deverá ver alguns dados nos gráficos predefinidos.

    Captura de ecrã da página Application Insights mostrando dados nos gráficos padrão.

Nota

Neste cenário de monitorização muito comum, o Application Insights é apenas um dos destinos OpenTelemetry que pode utilizar, como Jaeger, Prometheus e Zipkin.

6. Limpar os recursos

Quando já não precisar do ambiente, pode eliminar os grupos de recursos e todos os recursos relacionados. Basta executar estes comandos no Cloud Shell:

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

Mais recursos