你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本教程中,你将了解如何在 Azure 容器应用中使用 init 容器配置应用程序性能管理 (APM) Java 代理。 APM 有助于增强容器应用的可观察性。 可以将 APM 插件与你的应用打包在同一映像或 Dockerfile 中,但它会将管理事项(例如,发布以及公共漏洞和暴露 (CVE) 缓解)绑定在一起。 你可以在 Azure 容器应用中使用 Java 代理和 init 容器来注入 APM 解决方案(无需修改应用映像),而不是将这些事项绑定在一起。
在本教程中,你将了解:
- 准备映像以设置 Java 代理并将其推送到 Azure 容器注册表。
- 创建容器应用环境和容器应用作为目标 Java 应用。
- 配置 init 容器和卷装载以设置 Application Insights 集成。
先决条件
- Azure 订阅。 免费创建一个。
- Application Insights 的实例。
- Azure 容器注册表或其他容器映像注册表的实例。
- Docker,用于生成映像。
- 最新版本的 Azure CLI。
设置环境
使用以下步骤来定义环境变量并确保容器应用扩展保持最新:
使用以下命令定义环境变量:
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
使用以下命令确保具有适用于容器应用和 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 容器注册表或其他容器映像注册表:
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 应用
若要创建容器应用环境和作为目标 Java 应用的容器应用,请使用以下步骤:
通过使用以下命令来创建容器应用环境:
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --___location "$LOCATION" \ --query "properties.provisioningState"
成功创建容器应用环境后,命令行将返回
Succeeded
消息。使用以下命令创建用于进一步配置的容器应用:
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"
创建容器应用后,命令行将返回
Succeeded
消息。
配置 init 容器、机密、环境变量和卷以设置 Application Insights 集成
使用以下步骤为 init 容器配置机密、环境变量和卷。 此配置允许将存储的信息用于 Application Insights 实例。
使用以下命令将正在运行的容器应用的当前配置写入当前目录中 的 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 容器注册表名称。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 Application Insights 之外,社区中还有其他常用的 APM 解决方案。 如果要将 Azure 容器应用与其他 APM 提供程序集成,只需替换 Java 代理 JAR 和相关配置文件。
- AppDynamics
- Dynatrace
- 弹性
- New Relic