共用方式為


教學課程:在 Azure App 服務 中設定 Linux 應用程式的 Sidecar 容器

在本教學課程中,您會在 Azure App 服務 中,將 OpenTelemetry 收集器新增為側車容器至 Linux (自備程式碼) 應用程式。 如需自定義容器,請參閱教學課程:在 Azure App 服務 中設定自定義容器的 Sidecar 容器。

在 Azure App 服務 中,您可以為每個 Linux 應用程式新增最多 9 個側車容器。 Sidecar 容器可讓您將額外的服務和功能部署到 Linux 應用程式,而不需要將它們緊密結合到主要 (內建) 容器。 例如,您可以將監視、記錄、設定和網路服務新增為 Sidecar 容器。 OpenTelemetry 收集器 Sidecar 是這類監視範例之一。

如需 App Service 中側容器的詳細資訊,請參閱:

如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶

1.設定所需的資源

首先,您會建立教學課程所使用的資源。 它們用於此特定案例,而一般來說 Sidecar 容器不需要。

  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 監視器
    • 具有資源群組許可權的使用者指派受控識別 AcrPull (從登錄提取映像)。
    • 記錄分析工作區
    • 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至新的 App Service 應用程式。

3.新增 Sidecar 容器

在本節中,您會將 Sidecar 容器新增至 Linux 應用程式。 入口網站體驗仍在推出中。如果尚無法使用,請繼續進行下方的 [使用 ARM 範本] 索引標籤

  1. Azure 入口網站 中,流覽至應用程式的管理頁面

  2. 在應用程式的管理頁面中,從左側功能表選取 [部署中心]

  3. 選取要與應用程式一起執行的容器感興趣的橫幅 ?按兩下這裡以試試看。

    如果您看不到橫幅,則您的訂用帳戶尚未推出入口網站 UI。 請改為在這裡選取 [ 使用 ARM 範本 ] 索引標籤,然後繼續。

  4. 當頁面重載時,請選取 [ 容器][新增] 索引卷標。

  5. 選取 [新增],然後設定新的容器,如下所示:

    • 名稱otel-collector
    • 映像來源Azure Container Registry
    • 驗證系統管理員認證
    • 登錄azd provision 所建立的登錄
    • 映像otel-collector
    • 標籤最新
  6. 選取套用

    此螢幕擷取畫面顯示如何在 Web 應用程式的部署中心設定 Sidecar 容器。

4.設定環境變數

針對範例案例,otel-collector Sidecar 會設定為將 OpenTelemetry 資料匯出至 Azure 監視器,但是需要連接字元串作為環境變數 (請參閱 otel-collector 映像的 OpenTelemetry 組態檔)。

您可藉由設定應用程式設定,為容器 (像是任何 App Service 應用程式) 設定環境變數。 應用程式設定可供應用程式中的所有容器存取。

  1. 流覽至 App Service 應用程式的管理頁面。

  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 入口網站 中設定 App Service 應用程式的自定義啟動檔案的螢幕快照。

5.在 Application Insights 中確認

otel-collector Sidecar 現在應該將資料匯出至 Application Insights。

  1. 回到 https://<app-name>.azurewebsites.net 的瀏覽器索引標籤,重新整理頁面數次以產生一些 Web 要求。

  2. 返回資源群組概觀頁面,然後選取已建立的 Application Insights 資源 azd up 。 您現在應該會在預設圖表中看到一些資料。

    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

常見問題集

Sidecar 容器如何處理內部通訊?

Sidecar 容器與主要容器共用相同的網路主機,因此主要容器(和其他側車容器)可以使用 聯機到 Sidecar localhost:<port>上的任何埠。 範例 startup.sh 使用 localhost:4318 來存取 4318 在收集器側車上的埠。

在 [ 編輯容器] 對話框中, App Service 目前未使用 [埠 ] 方塊。 您可以使用它做為 Sidecar 元數據的一部分,例如指出 Sidecar 正在接聽的埠。

如何? 檢測其他語言堆疊嗎?

您可以使用類似的方法來檢測其他語言堆疊中的應用程式。 如需詳細資訊,請參閱 OpenTelemetry 檔:

更多資源