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

教程:为自定义容器应用配置挎斗容器

本教程介绍如何将 OpenTelemetry 收集器作为 sidecar 容器添加到 Azure 应用服务中的 Linux 自定义容器应用。

应用服务中的 Sidecar 容器允许你将额外的服务和功能部署到 Linux 应用,而无需将它们紧密耦合到内置或自定义主容器。 sidecar 容器与同一应用服务计划中的主要应用程序容器一起运行。

最多可以为应用服务中的每个 Linux 应用添加 9 个 sidecar 容器。 例如,可以将监视、日志记录、配置和网络服务添加为 sidecar 容器。 OpenTelemetry 收集器挎斗是一个监视示例。

有关自带代码的 Linux 应用,请参阅教程:在 Azure 应用服务中为 Linux 应用配置边车容器

先决条件

  • 如果没有 Azure 帐户,请在开始前创建一个免费帐户

  • 可以使用 Azure Cloud Shell(通过浏览器使用的交互式 shell)来运行本教程中的命令,以使用 Azure 服务。 若要使用 Cloud Shell,请执行以下作:

    1. 选择以下 “启动 Cloud Shell ”按钮,或转到 https://shell.azure.com 浏览器中打开 Cloud Shell。

    2. 如有必要,请登录到 Azure,并确保你位于 Cloud Shell 的 Bash 环境中。

    3. 在任何代码块中选择 “复制” ,将代码粘贴到 Cloud Shell 中,然后运行它。

      azd本教程中的命令使用 Azure 开发人员 CLI,这是一种开源工具,可加速在 Azure 上预配和部署应用资源。

1.设置教程资源

若要克隆示例存储库并创建本教程的资源,请在 Cloud Shell 中运行以下命令。 出现提示时,请选择要使用的 Azure 订阅和 Azure 区域。

git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs
cd app-service-sidecar-tutorial-prereqs
azd env new my-sidecar-env
azd provision

azd provision 命令使用包含的模板创建一 my-sidecar-env_group 个名为包含以下 Azure 资源的 Azure 资源组:

  • 包含两个具有以下镜像的存储库的容器注册表
    • 具有 OpenTelemetry 模块的 nginx 映像。
    • 配置为导出到 Azure Monitorotel-collector OpenTelemetry 收集器映像。
  • Log Analytics 工作区。
  • Application Insights 组件。
  • 名为“id-my-sidecar-env_group”的用户分配的托管标识。

部署完成后,应会看到类似于以下示例的输出:

Success!

APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=aaaaaaaa-0b0b-1c1c-2d2d-333333333333;IngestionEndpoint=https://eastus2-3.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus2.livediagnostics.monitor.azure.com/;ApplicationId=00001111-aaaa-2222-bbbb-3333cccc4444
Azure container registry name = acro2lc774l6vjgg
Managed identity resource ID = /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-sidecar-env_group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-my-sidecar-env_group
Managed identity client ID = 00aa00aa-bb11-cc22-dd33-44ee44ee44ee

Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-sidecar-env_group

将值复制并保存到 APPLICATIONINSIGHTS_CONNECTION_STRING,以便在本教程中稍后使用。

选择链接 Open resource group in the portal,以便在 Azure 门户中打开已预配的资源组。

2. 创建已启用挎斗的应用

在 Azure 门户中的资源组中,创建支持 sidecar 的 Linux 自定义容器应用,并配置主容器。

  1. 在 Azure 门户的资源组页面上,选择“ 创建”。

  2. Marketplace页上,搜索Web 应用,在Web 应用磁贴上选择创建按钮旁的下拉箭头,然后选择Web 应用

    显示 Azure 市场页的屏幕截图,其中突出显示了正在搜索的 Web 应用并突出显示了“创建 Web 应用”按钮。

  3. “创建 Web 应用”页的“基本信息”选项卡上,提供以下信息:

    • 名称:输入 Web 应用的唯一名称。
    • 发布:选择 容器
    • 作系统:选择 Linux
    • 区域:选择所选 azd provision的同一区域。
    • Linux 计划:选择提供的 (新建) 应用服务计划。

    显示 Linux 自定义容器 Web 应用的基本设置的屏幕截图。

  4. 保留其余设置,然后选择页面顶部的 “容器 ”选项卡。

  5. “容器 ”选项卡上,提供以下信息:

    • 挎斗支持:设置为启用挎斗支持的增强配置
    • 映像源:选择 Azure 容器注册表
    • 名称:确保 显示。
    • 注册表:选择由 azd provision.. 创建的注册表。
    • 身份验证:选择“托管标识”
    • 标识:选择由 azd provision创建的托管标识。
    • 图像:输入 nginx
    • 标记:输入 最新
    • 端口:输入 80 (如果尚未设置)。

    显示 Linux 自定义容器 Web 应用的容器设置的屏幕截图。

    注意

    这些设置在已启用挎斗的应用中配置的方式不同于未启用的应用。 有关详细信息,请参阅已启用挎斗的自定义容器有何区别

  6. 选择“查看 + 创建”,然后在验证通过后选择“创建”。

  7. 部署完成后,选择“转到资源”

  8. 在应用的页面上,打开 默认域旁边的 URL, https://<app-name>.azurewebsites.net在新浏览器选项卡中查看默认 nginx 页面。

3. 向应用添加挎斗容器

将 sidecar 容器添加到 Linux 自定义容器应用。

  1. 在 Azure 门户的应用页面上,在左侧导航菜单中的“部署”下选择“部署中心”。 “部署中心”页显示应用中的所有容器,当前仅显示主容器。

  2. 选择 “添加>自定义容器”。

  3. “添加容器 ”窗格中,完成以下信息:

    • 名称:输入 otel-collector
    • 映像源:选择 Azure 容器注册表
    • 注册表:选择由 azd provision.. 创建的注册表。
    • 身份验证:选择“托管标识”
    • 标识:在 “用户分配”下,选择由 azd provision该用户创建的托管标识。
    • 图像:输入 otel-collector
    • 图像标记:输入 最新
    • 端口:输入 4317
  4. 选择“应用”。

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

部署中心现在有两个容器标记为 MainSidecar。 应用必须有一个主要容器,并且可以有多个挎斗容器。

4.配置环境变量

在示例方案中, otel-collector sidecar 配置为使用连接字符串作为环境变量将 OpenTelemetry 数据导出到 Azure Monitor。 有关详细信息,请参阅 otel 收集器映像的 OpenTelemetry 配置文件

通过为应用配置 应用设置 来配置容器的环境变量。 应用设置可供应用中的所有容器访问。

  1. 在 Azure 门户的应用页面上,在左侧导航菜单中的“设置”下选择“环境变量”。

  2. “环境变量”页的“应用设置”选项卡上,选择“添加”。

  3. “添加/编辑应用程序设置 ”窗格中,输入以下值:

    • Name: APPLICATIONINSIGHTS_CONNECTION_STRING
    • :从azd provision的输出的APPLICATIONINSIGHTS_CONNECTION_STRING的值。 还可以在资源组 Application Insight 资源的“概述”页上找到此值作为连接字符串
  4. 选择 “应用”,然后再次选择“ 应用 ”,然后选择“ 确认”。 APPLICATIONINSIGHTS_CONNECTION_STRING应用设置现在显示在“应用设置”选项卡上。

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

注意

某些应用设置不适用于启用sidecar功能的应用程序。 有关详细信息,请参阅已启用挎斗的自定义容器有何区别

5. 在 Application Insights 中验证

otel-collector 挎斗现在应将数据导出到 Application Insights。

  1. 在新的浏览器选项卡中转到应用,并多次刷新页面以生成一些 Web 请求。

  2. 在 Azure 门户的资源组页上,选择 Application Insights 资源。 现在,应该会在 Application Insights 概述 页上的默认图表中看到一些数据。

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

注意

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

6.清理资源

不再需要为本教程创建的环境时,可以删除资源组,这会删除应用服务和所有相关资源。 在 Cloud Shell 中克隆的存储库中运行以下命令。

azd down