Compartir a través de


Tutorial: Configuración de un contenedor sidecar para una aplicación Linux en Azure App Service

En este tutorial, agregará un recopilador de OpenTelemetry como contenedor sidecar a una aplicación Linux (traiga su propio código) en Azure App Service. Para los contenedores personalizados, consulte Tutorial: Configuración de un contenedor sidecar para un contenedor personalizado en Azure App Service.

En Azure App Service, puede agregar hasta nueve contenedores sidecar para cada aplicación Linux. Los contenedores de Sidecar le permiten implementar servicios y características adicionales en sus aplicaciones Linux sin que estén estrechamente vinculados al contenedor principal (integrado). Por ejemplo, puede agregar servicios de supervisión, registro, configuración y redes como contenedores sidecar. Un sidecar de recopilador OpenTelemetry es uno de estos ejemplos de supervisión.

Para más información sobre el contenedor lateral en App Service, consulte:

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

1. Configuración de los recursos necesarios

En primer lugar, cree los recursos que usa el tutorial. Se usan para este escenario en particular y no son necesarios para los contenedores sidecar en general.

  1. En Azure Cloud Shell, ejecute los comandos siguientes. Asegúrese de proporcionar el <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. Cuando se le solicite, proporcione la suscripción y la región que prefiera. Por ejemplo:

    • Suscripción:Su suscripción.
    • Región: (Europa) Oeste de Europa.

    Cuando se complete la implementación, debería ver la siguiente salida:

     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 estos valores de salida para más adelante. También puede encontrarlos en el portal, en las páginas de administración de los recursos respectivos.

    Nota:

    azd provision usa las plantillas incluidas para crear los siguientes recursos de Azure:

    • Un grupo de recursos basado en el nombre del entorno.
    • Un registro de contenedor con dos imágenes implementadas:
      • Imagen Nginx con el módulo OpenTelemetry.
      • Imagen del recopilador OpenTelemetry configurado para exportar a Azure Monitor.
    • Una identidad administrada asignada por el usuario con el permiso AcrPull en el grupo de recursos (para extraer imágenes del registro).
    • Un área de trabajo de Log Analytics.
    • Un componente de Application Insights.

2. Creación de una aplicación web

En este paso, implementará una plantilla de aplicación ASP.NET Core. De nuevo en Azure Cloud Shell, ejecute los siguientes comandos. Reemplace <app-name> por un nombre de aplicación único.

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

Después de unos minutos, esta aplicación web de .NET se implementa como MyFirstAzureWebApp.dll en una nueva aplicación de App Service.

3. Agregar un contenedor sidecar

En esta sección, agregará un contenedor sidecar a la aplicación Linux. La experiencia del portal todavía se está implementando. Si aún no está disponible, continúe con la pestaña Usar plantilla de ARM siguiente.

  1. En Azure Portal, navegue hasta la página de administración de la aplicación

  2. En la página de administración de la aplicación, en el menú izquierdo, seleccione Centro de implementación.

  3. Seleccione el banner ¿Interesado en agregar contenedores para que se ejecuten junto con la aplicación? Haga clic aquí para probarlo.

    Si no puede ver el banner, la interfaz de usuario del portal aún no se implementa para la suscripción. En su lugar, seleccione la pestaña Usar plantilla de ARM aquí y continúe.

  4. Cuando se vuelva a cargar la página, seleccione la pestaña Contenedores (nuevo).

  5. Seleccione Agregar y configure el nuevo contenedor de la siguiente manera:

    • Nombre: otel-collector
    • Origen de la imagen: Azure Container Registry
    • Autenticación: Credenciales de administrador
    • Registro: registro creado por azd provision
    • Imagen: otel-collector
    • Etiqueta: más reciente
  6. Seleccione Aplicar.

    Captura de pantalla que muestra cómo configurar un contenedor sidecar en el centro de implementación de una aplicación web.

4. Configuración de las variables de entorno

Para el escenario de ejemplo, el sidecar otel-collector está configurado para exportar los datos de OpenTelemetry a Azure Monitor, pero necesita la cadena de conexión como una variable de entorno (consulte el Archivo de configuración de OpenTelemetry para la imagen otel-collector).

Puede configurar variables de entorno para los contenedores como cualquier aplicación de App Service mediante la configuración de la aplicación. La configuración de la aplicación es accesible para todos los contenedores de la aplicación.

  1. Vaya a la página de administración de la aplicación de App Service.

  2. En el menú de la izquierda, seleccione Variables de entorno.

  3. Para agregar una configuración de aplicación, seleccione Agregar y configúrela de la siguiente manera:

    • Nombre: APPLICATIONINSIGHTS_CONNECTION_STRING
    • Valor: cadena de conexión en la salida de azd provision. Si perdió la sesión de Cloud Shell, también puede encontrarla en la página Información general del recurso de Application Insight, en Cadena de conexión.
  4. Seleccione Aplicar y, después, Aplicar y, en seguida, Confirmar.

    Captura de pantalla que muestra la página Configuración de una aplicación web con dos configuraciones de aplicación agregadas.

5. Configurar la instrumentación en el inicio

En este paso, creará la instrumentación de la aplicación según los pasos descritos en la Instrumentación de código cero de .NET de OpenTelemetry.

  1. De vuelta en Cloud Shell, cree startup.sh con las líneas siguientes.

    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. Implemente este archivo en la aplicación con el siguiente comando de la CLI de Azure. Si todavía está en el directorio de ~/MyFirstAzureWebApp, no es necesario ningún otro parámetro porque az webapp up ya establece valores predeterminados para el grupo de recursos y el nombre de la aplicación.

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

    Sugerencia

    Este enfoque implementa el archivo startup.sh por separado de la aplicación. De este modo, la configuración de instrumentación es independiente del código de la aplicación. Sin embargo, puede usar otros métodos de implementación para implementar el script junto con la aplicación.

  3. De nuevo en la página de administración de la aplicación, en el menú izquierdo, seleccione Configuración.

  4. Establezca Comando de inicio en /home/site/startup.sh. Es la misma ruta de acceso que implementó en el paso anterior.

  5. Seleccione Guardar y, a continuación, Continuar.

    Captura de pantalla que muestra cómo configurar un archivo de inicio personalizado para una aplicación de App Service en Azure Portal.

5. Comprobar en Application Insights

El sidecar otel-collector debe exportar datos a Application Insights ahora.

  1. De nuevo en la pestaña del explorador para https://<app-name>.azurewebsites.net, actualice la página varias veces para generar algunas solicitudes web.

  2. Vuelva a la página de información general del grupo de recursos y seleccione el recurso de Application Insights que ha azd up creado. Ahora debería ver algunos datos en los gráficos predeterminados.

    Captura de pantalla de la página de Application Insights en la que se muestran los datos en los gráficos predeterminados.

Nota:

En este escenario de supervisión muy común, Application Insights es solo uno de los destinos de OpenTelemetry que puede usar, como Jaeger, Prometheus y Zipkin.

6. Limpieza de recursos

Cuando ya no necesite el entorno, puede eliminar el grupo de recursos y todos los recursos relacionados. Solo tiene que ejecutar estos comandos en Cloud Shell:

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

Preguntas más frecuentes

¿Cómo controlan los contenedores sidecar la comunicación interna?

Los contenedores sidecar comparten el mismo host de red que el contenedor principal, por lo que el contenedor principal (y otros contenedores sidecar) pueden llegar a cualquier puerto del sidecar con localhost:<port>. En el ejemplo startup.sh se usa localhost:4318 para acceder al puerto 4318 en el sidecar de otel-collector.

En el cuadro de diálogo Editar contenedor, App Service no usa actualmente el cuadro Puerto. Puede usarlo como parte de los metadatos de sidecar, así como para indicar el puerto al que escucha el sidecar.

¿Cómo instrumento otras pilas de lenguaje?

Puede usar un enfoque similar para instrumentar aplicaciones en otras pilas de lenguaje. Para obtener más información, consulte la documentación de OpenTelemetry:

Más recursos