Partilhar via


Tutorial: Configurar um contêiner sidecar para um aplicativo Linux no Serviço de Aplicativo do Azure

Neste tutorial, você adiciona um coletor OpenTelemetry como um contêiner sidecar a um aplicativo Linux (traga seu próprio código) no Serviço de Aplicativo do Azure. Para contêineres personalizados, consulte Tutorial: Configurar um contêiner sidecar para contêiner personalizado no Serviço de Aplicativo 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, você pode adicionar serviços de monitoramento, registro, configuração e rede como contêineres de sidecar. Um sidecar coletor OpenTelemetry é um exemplo de monitoramento.

1. Configure os recursos necessários

Primeiro, você 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 de sua escolha. Por exemplo:

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

    Quando a implantação for concluída, você verá a seguinte saída:

     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 esses 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:

    • Um grupo de recursos com base no nome do ambiente.
    • Um registro de contêiner com duas imagens implantadas:
      • Uma imagem Nginx com o módulo OpenTelemetry .
      • Uma imagem de coletor OpenTelemetry configurada para exportar para o Azure Monitor.
    • Uma identidade gerenciada atribuída pelo usuário com a AcrPull permissão no grupo de recursos (para extrair imagens do Registro).
    • Um espaço de trabalho de análise de log.
    • Um componente do Application Insights .

2. Criar uma aplicação Web

Nesta etapa, você implanta um modelo ASP.NET aplicativo principal. De volta ao Azure Cloud Shell, execute os seguintes comandos. Substitua <app-name> por um nome de aplicativo exclusivo.

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

Após alguns minutos, esse aplicativo Web .NET é implantado como MyFirstAzureWebApp.dll a um novo aplicativo do Serviço de Aplicativo.

3. Adicione um contentor para sidecar

Nesta seção, você adiciona um contêiner sidecar ao seu aplicativo Linux.

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

  2. Na página de gerenciamento do aplicativo, no menu à esquerda, selecione Centro de Implantação.

  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 a guia Contêineres (novo).

  5. Selecione Adicionar e configurar 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: últimas notícias
  6. Selecione Aplicar.

    Captura de tela mostrando como configurar um contêiner de sidecar no centro de implantação de um aplicativo Web.

4. Configurar variáveis de ambiente

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

Você configura variáveis de ambiente para os contêineres como qualquer aplicativo do Serviço de Aplicativo, definindo as configurações do aplicativo. As configurações do aplicativo são acessíveis a todos os contêineres no aplicativo.

  1. Navegue até a página de gerenciamento do aplicativo Serviço de Aplicativo.

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

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

    • Designação: APPLICATIONINSIGHTS_CONNECTION_STRING
    • Valor: A cadeia de conexão na saída do 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, Aplicar e 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 na inicialização

Nesta etapa, você cria a instrumentação para seu aplicativo de acordo com as etapas descritas na instrumentação de código zero do OpenTelemetry .NET.

  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 esse arquivo em seu aplicativo com o seguinte comando da CLI do Azure. Se você ainda estiver no diretório ~/MyFirstAzureWebApp , nenhum outro parâmetro será necessário porque az webapp up já definiu padrões para o grupo de recursos e o nome do aplicativo.

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

    Gorjeta

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

  3. De volta à página de gerenciamento do aplicativo, no menu à esquerda, selecione Configuração.

  4. Defina o comando de inicialização como /home/site/startup.sh. É o mesmo caminho que você implantou na etapa anterior.

  5. Selecione Guardar e, em seguida , Continuar.

    Captura de tela que mostra como configurar um arquivo de inicialização personalizado para um aplicativo do Serviço de Aplicativo 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 você deve ver alguns dados nos gráficos padrão.

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

Nota

Neste cenário de monitoramento muito comum, o Application Insights é apenas um dos destinos OpenTelemetry que você pode usar, como Jaeger, Prometheus e Zipkin.

6. Limpar os recursos

Quando não precisar mais do ambiente, você poderá excluir os grupos de recursos e todos os recursos relacionados. Basta executar estes comandos no Cloud Shell:

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

Perguntas mais frequentes

Como é que os contentores de sidecar lidam com a comunicação interna?

Os contentores sidecar partilham o mesmo host de rede que o contentor principal, pelo que o contentor principal e outros contentores sidecar podem chegar a qualquer porta no sidecar com localhost:<port>. O exemplo startup.sh usa localhost:4318 para acessar a porta 4318 no sidecar do coletor de otel.

Na caixa de diálogo Editar contêiner , a configuração Porta não é usada atualmente pelo Serviço de Aplicativo. Você pode usá-lo como parte dos metadados do sidecar, como para indicar qual porta o sidecar está ouvindo.

Um contentor de sidecar pode receber pedidos de Internet?

Não. O Serviço de Aplicativo roteia solicitações da Internet somente para o contêiner principal. Para aplicações Linux baseadas em código, o contentor Linux integrado é o contentor principal, e qualquer sidecar sitecontainers deve ser adicionado com IsMain=false.

Para contêineres personalizados, todos, exceto um, devem ter sitecontainersIsMain=false. Para obter mais informações sobre como configurar IsMain, consulte Microsoft.Web sites/sitecontainers.

Como faço para usar montagens de volume?

O recurso de montagens de volume permite compartilhar arquivos e diretórios não persistentes entre contêineres em seu aplicativo Web. Para adicionar ou configurar montagens de volume, use Montagens de volume na página Adicionar contêiner ou Editar contêiner .

Captura de tela mostrando uma configuração de montagem de volume para um contêiner de sidecar.

  • O subcaminho do volume é um caminho de diretório lógico criado automaticamente que não é referenciado dentro do contêiner. Os contêineres configurados com o mesmo subcaminho de volume podem compartilhar arquivos e diretórios.
  • O caminho de montagem do contêiner é um caminho de diretório que você referencia dentro do contêiner. O caminho de montagem do contêiner é mapeado para o subcaminho do volume.

Por exemplo, suponha que você configure as seguintes montagens de volume:

Nome do sidecar Subcaminho do volume Caminho de montagem do contêiner Somente leitura
Contentor1 /directory1/directory2 /container1Vol Falso
Contentor 2 /directory1/directory2 /container2Vol Verdade
Contentor3 /directory1/directory2/directory3 /container3Vol Falso
Contentor4 /diretório4 /container1Vol Falso

Com base nessas configurações, aplicam-se as seguintes condições:

  • Se Container1 cria /container1Vol/myfile.txt, Container2 pode ler o arquivo via /container2Vol/myfile.txt.
  • Se Container1 cria /container1Vol/directory3/myfile.txt, Container2 pode ler o arquivo via /container2Vol/directory3/myfile.txt, e Container3 pode ler e gravar no arquivo via /container3Vol/myfile.txt.
  • O Container4 não compartilha uma montagem de volume em comum com nenhum dos outros contêineres.

Nota

Para aplicações Linux baseadas em código, o contêiner Linux incorporado não pode usar montagem de volumes.

Como faço para instrumentar outras pilhas de idiomas?

Você pode usar uma abordagem semelhante para aplicativos de instrumentos em outras pilhas de idiomas. Para obter mais informações, consulte a documentação do OpenTelemetry :

Mais recursos