在本教學課程中,您會在 Azure Container Apps 中使用 init 容器來設定應用程式效能管理 (APM) Java 代理程式。 APM 可協助為容器應用程式提供可觀察性。 您可以在相同的映像或 Dockerfile 中封裝 APM 外掛程式與您的應用程式,但它會將管理考慮系結在一起,例如發行和常見弱點和暴露度 (CVE) 風險降低。 您可以使用 Azure Container Apps 中的 Java 代理程式和 init 容器來插入 APM 解決方案,而不需修改應用程式映像,而不是將考慮系結在一起。
在本教學課程中,您已:
- 準備映射以設定 Java 代理程式,並將其推送至 Azure Container Registry。
- 建立 Container Apps 環境和容器應用程式作為目標 Java 應用程式。
- 設定 init 容器和磁碟區掛接,以設定 Application Insights 整合。
必要條件
- Azure 訂用帳戶。 免費建立一個。
- Application Insights 的實例。
- Azure Container Registry 或其他容器映射登錄的實例。
- Docker,用來建置映射。
- 最新版的 Azure CLI。
設定環境
使用下列步驟來定義環境變數,並確定您的 Container Apps 擴充功能是最新的:
使用下列命令定義環境變數:
export SUBSCRIPTION_ID="<SUBSCRIPTION_ID>" # Replace with your own Azure subscription ID export APP_INSIGHTS_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/my-resource-group/providers/microsoft.insights/components/my-app-insights" export CONTAINER_REGISTRY_NAME="myacr" export RESOURCE_GROUP="my-resource-group" export ENVIRONMENT_NAME="my-environment" export CONTAINER_APP_NAME="my-container-app" export LOCATION="eastus"使用下列命令登入 Azure CLI:
az login az account set --subscription $SUBSCRIPTION_ID使用下列命令,以確保您擁有適用於 Container Apps 和 Application Insights 的最新版 Azure CLI 擴充功能:
az extension add --name containerapp --upgrade az extension add --name application-insights --upgrade使用下列命令擷取 Application Insights 實例的 連接字串:
CONNECTION_STRING=$(az monitor app-insights component show \ --ids $APP_INSIGHTS_RESOURCE_ID \ --query connectionString)
準備容器映像
若要建置 Application Insights Java 代理程式的安裝映像,請使用相同目錄中的下列步驟:
使用下列內容建立 Dockerfile:
FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 ARG version="3.5.4" RUN tdnf update -y && tdnf install -y curl ca-certificates RUN curl -L "https://github.com/microsoft/ApplicationInsights-Java/releases/download/${version}/applicationinsights-agent-${version}.jar" > agent.jar ADD setup.sh /setup.sh ENTRYPOINT ["/bin/sh", "setup.sh"]使用下列內容建立 setup.sh 檔案:
#!/bin/sh if [[ -z "$CONNECTION_STRING" ]]; then echo "Environment variable CONNECTION_STRING is not found. Exiting..." exit 1 else echo "{\"connectionString\": \"$CONNECTION_STRING\"}" > /java-agent/applicationinsights.json cp agent.jar /java-agent/agent.jar fi使用下列命令建立映像:
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"使用下列命令,將映射推送至 Azure Container Registry 或其他容器映射登錄:
az acr login --name $CONTAINER_REGISTRY_NAME docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
提示
您可以在 azure-container-apps-java-samples GitHub 存放庫中找到與此步驟相關的程序代碼。
建立容器應用程式環境和容器應用程式作為目標Java應用程式
若要建立 Container Apps 環境和容器應用程式作為目標 Java 應用程式,請使用下列步驟:
使用下列命令建立 Container Apps 環境:
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"成功建立 Container Apps 環境之後,命令行會傳
Succeeded回訊息。使用下列命令建立容器應用程式以進一步設定:
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"建立容器應用程式之後,命令行會傳
Succeeded回訊息。
設定 init 容器、秘密、環境變數和磁碟區,以設定 Application Insights 整合
使用下列步驟,以秘密、環境變數和磁碟區設定您的init容器。 此組態可讓您搭配ApplicationInsights實例使用預存資訊。
使用下列命令,將執行中容器應用程式的 目前組態寫入目前目錄中的 app.yaml 檔案:
az containerapp show \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --output yaml \ > app.yaml使用下列步驟來編輯app.yaml 檔案。 編輯會將秘密、暫時記憶體和init容器新增至檔案,並更新應用程式容器。
使用下列範例新增Application Insights 連接字串的秘密。 將取代
$CONNECTION_STRING為您的 Application Insights 連接字串。properties: configuration: secrets: - name: app-insights-connection-string value: $CONNECTION_STRING使用下列範例新增 Java 代理程式檔案的暫時記憶體磁碟區:
properties: template: volumes: - name: java-agent-volume storageType: EmptyDir使用下列範例,新增具有磁碟區掛接和環境變數的 init 容器。 將 取代
<CONTAINER_REGISTRY_NAME>為您的 Azure Container Registry 名稱。properties: template: initContainers: - image: <CONTAINER_REGISTRY_NAME>.azurecr.io/samples/java-agent-setup:1.0.0 name: java-agent-setup resources: cpu: 0.25 memory: 0.5Gi env: - name: CONNECTION_STRING secretRef: app-insights-connection-string volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume使用下列範例,使用磁碟區掛接和環境變數更新應用程式容器:
properties: template: containers: - name: test-java-app image: mcr.microsoft.com/azurespringapps/samples/hello-world:0.0.1 resources: cpu: 0.5 memory: 1Gi env: - name: JAVA_TOOL_OPTIONS value: -javaagent:/java-agent/agent.jar volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
使用下列命令,以修改過的 app.yaml 檔案更新容器應用程式:
az containerapp update \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --yaml app.yaml \ --query "properties.provisioningState"更新容器應用程式之後,命令會傳
Succeeded回訊息。 現在,您可以在 Azure 入口網站 中檢視 Application Insights 實例,以確認容器應用程式是否已連線。
清除資源
您在本教學課程中建立的資源會參與您的 Azure 帳單。 如果您不需要長期,請使用下列命令來移除資源群組及其資源:
az group delete --resource-group $RESOURCE_GROUP
相關內容
除了 Azure 應用程式 Insights 之外,社群中還有其他熱門的 APM 解決方案。 如果您想要將 Azure 容器應用程式與其他 APM 提供者整合,只要取代 Java 代理程式 JAR 和相關組態檔即可。