你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

在 Azure 应用服务中,可以为每个 Linux 应用添加最多 9 个边车容器。 使用边车容器,你可以将额外的服务和功能部署到 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 资源:

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

2.创建 Web 应用

此步骤将部署模板 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 Web 应用程序将作为 MyFirstAzureWebApp.dll 部署到新的应用服务应用。

3.添加挎斗容器

在本部分中,你会将一个边车容器添加到 Linux 应用。

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

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

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

  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 的输出中的连接字符串。 如果丢失了 Cloud Shell 会话,还可以在 Application Insight 资源“概述”页面的“连接字符串”下找到它。
  4. 选择“应用”,然后选择“应用”和“确认”

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

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-collector 挎斗现在应将数据导出到 Application Insights。

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

  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 访问 otel-collector 边车上的端口 4318。

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

如何检测其他语言堆栈?

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

更多资源