教程:在 Azure 应用服务中为 Linux 应用配置边车容器

在本教程中,你会在 Azure 应用服务中将 OpenTelemetry 收集器作为边车容器添加到 Linux(自带代码)应用。 对于自定义容器,请参阅教程:在 Azure 应用服务中为自定义容器配置边车容器

在 Azure 应用服务中,可以为每个 Linux 应用添加最多 9 个边车容器。 使用边车容器,你可以将额外的服务和功能部署到 Linux 应用,而无需将它们紧密耦合到主(内置)容器。 例如,可以将监视、日志记录、配置和网络服务添加为挎斗容器。 OpenTelemetry 收集器挎斗就是一个类似的监视例子。

有关应用服务中的边车容器的详细信息,请参阅:

如果没有 Azure 试用版订阅,请在开始前创建一个试用版订阅

1.设置所需的资源

首先创建本教程使用的资源。 它们用于此特定方案,挎斗容器通常不需要它们。

  1. 在 Azure CLI 中,运行下列命令。 请务必提供 <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. 出现提示时,请提供所选订阅和区域。 例如:

    • 订阅:你的订阅。
    • 区域:(亚洲)中国北部 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.cn/#@/resource/subscriptions/<subscription-id>/resourceGroups/<group-name>
     
  3. 复制这些输出值,供以后使用。 还可以在门户的相应资源管理页中找到这些值。

    注意

    azd provision 使用包含的模板创建以下 Azure 资源:

    • 基于环境名称的资源组。
    • 部署了两个映像的容器注册表
      • 具有 OpenTelemetry 模块的 Nginx 映像。
      • OpenTelemetry 收集器映像,配置为导出到 Azure Monitor
    • 在资源组上具有 AcrPull 权限的用户分配的托管标识(用于从注册表拉取映像)。
    • Log Analytics 工作区
    • Application Insights 组件。

2.创建 Web 应用

此步骤将部署模板 ASP.NET Core 应用程序。 返回到 Azure CLI 中,运行下列命令。 将 <app-name> 替换为唯一应用名称。

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

几分钟后,此 .NET Web 应用程序将作为 MyFirstAzureWebApp.dll 部署到新的应用服务应用。

3.添加挎斗容器

在本部分中,你会将一个边车容器添加到 Linux 应用。 相应门户体验仍在推出过程中。如果尚不可用,请转到下面的“使用 ARM 模板”选项卡。

  1. Azure 门户中,导航到应用的管理页面

  2. 在应用的管理页的左侧菜单中,选择“部署中心”。

  3. 选择横幅“有兴趣添加容器,以使其与应用一起运行?单击此处进行尝试。”

    如果未看到该横幅,则表明你的订阅尚未推出该门户 UI。 在此处改为选择“使用 ARM 模板”选项卡,然后继续。

  4. 重新加载页面时,选择“容器(新)”选项卡。

  5. 选择“添加”并配置新容器,如下所示:

    • 名称otel-collector
    • 映像源Azure 容器注册表
    • 身份验证:管理员凭据
    • 注册表:由 azd provision 创建的注册表
    • 映像otel-collector
    • 标记最新
  6. 选择“应用”。

    显示如何在 Web 应用的部署中心配置挎斗容器的屏幕截图。

4.配置环境变量

在示例方案中,otel-collector 挎斗配置为将 OpenTelemetry 数据导出到 Azure Monitor,但它需要连接字符串作为环境变量(请参阅 otel-collector 映像的 OpenTelemetry 配置文件)。

通过配置应用设置来为容器(如任何应用服务应用)配置环境变量。 应用设置可供应用中的所有容器访问。

  1. 导航到应用服务应用的管理页面。

  2. 从左侧菜单中选择“环境变量”

  3. 通过选择“添加”来添加应用设置,并按如下所示对其进行配置:

    • 名称: APPLICATIONINSIGHTS_CONNECTION_STRING
    • 值:azd provision 的输出中的连接字符串。 如果丢失了 Cli 会话,还可以在 Application Insight 资源“概述”页面的“连接字符串”下找到它。
  4. 选择“应用”,然后选择“应用”和“确认”

    显示 Web 应用的配置页的屏幕截图,其中添加了两个应用设置。

5.在启动时配置检测

在此步骤中,你将按照 OpenTelemetry .NET 零代码检测中所述的步骤为应用创建检测。

  1. 返回 CLI,使用以下几行代码创建 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-collector 挎斗现在应将数据导出到 Application Insights。

  1. 返回到 https://<app-name>.chinacloudsites.cn 的浏览器选项卡,多次刷新页面以生成一些 Web 请求。

  2. 返回到资源组概述页面,然后选择 azd up 创建的 Application Insights 资源。 你现在应该会在默认图表中看到一些数据。

    Application Insights 页面的屏幕截图,其中显示了默认图表中的数据。

注意

在此非常常见的监视方案中,Application Insights 只是你可以使用的 OpenTelemetry 目标之一,例如 Jaeger、Prometheus 和 Zipkin。

6.清理资源

当你不再需要该环境时,可以删除资源组所有相关资源。 只需在 CLI 中运行以下命令:

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

常见问题解答

边车容器如何处理内部通信?

边车容器将与主容器共享相同的网络主机,因此主容器(和其他边车容器)可以通过 localhost:<port> 到达边车上的任何端口。 示例 startup.sh 使用 localhost:4318 访问 otel-collector 边车上的端口 4318。

在“编辑容器”对话框中,应用服务当前未使用“端口”框。 你可以将其用作边车元数据的一部分,例如指示边车将要侦听的端口。

如何检测其他语言堆栈?

可以使用类似的方法来检测其他语言堆栈中的应用。 有关详细信息,请参阅 OpenTelemetry 文档:

更多资源