Integrar o APM (monitoramento de desempenho do aplicativo) em imagens de contêiner
Observação
Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.
O plano consumo e dedicado Standard será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira Migrar o plano dedicado e consumo Standard dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.
Este artigo se aplica a:✅ Básico/Standard ✅ Enterprise
Este artigo explica como integrar o agente Java do Application Insights à sua imagem de contêiner. Da mesma forma, também é possível integrar outros agentes do APM à sua imagem de contêiner, incluindo AppDynamics, New Relic e Dynatrace.
Os Aplicativos Spring do Azure integram-se suavemente aos agentes do APM. Ao migrar aplicativos para os Aplicativos de Contêiner do Azure ou AKS (Serviço de Kubernetes do Azure), você precisará se integrar ao APM durante a criação da imagem. O processo é semelhante à abordagem usada pelos Aplicativos Spring do Azure. Também é possível adicionar um agente do APM em um contêiner de inicialização separado e injetá-lo em um aplicativo de contêiner durante sua inicialização.
Pré-requisitos
Escolher o agente Java do Application Insights
Atualmente, os Aplicativos Spring do Azure usam o agente Java do Application Insights 3.5.2. Você poderá escolher outra versão dependendo de suas necessidades. Você poderá encontrar todas as versões na página de versões Java do Application Insights.
Você poderá encontrar a cadeia de conexão do Application Insights no portal do Azure no painel Visão geral da instância do Application Insights. Essa cadeia de caracteres é necessária para as instruções neste artigo.
Há algumas opções de configuração para o agente Java do Application Insights, como porcentagem de amostragem e nome da função de nuvem. Para obter mais informações, confira Opções de configuração do Application Insights para Java.
Caso esteja usando um Dockerfile para criar uma imagem de contêiner, consulte a seção Usar Dockerfile. Caso esteja usando os pacotes de compilação do Paketo para criar uma imagem de contêiner, consulte a seção Usar os pacotes de compilação do Paketo.
Usar Dockerfile
Use as seguintes etapas para modificar o Dockerfile:
- Baixe o agente Java do Application Insights e crie um arquivo de configuração para ele, chamado applicationinsights.json.
- Adicione a opção
-javaagent
ao ponto de entrada da imagem de contêiner.
Para saber mais sobre como criar um arquivo JAR ou um arquivo WAR com um Dockerfile, consulte Criar uma imagem de contêiner de um JAR ou WAR.
Criar um arquivo JAR
O exemplo a seguir do Dockerfile cria um arquivo JAR com as alterações anteriores:
FROM mcr.microsoft.com/openjdk/jdk:17-mariner
ARG APP_INSIGHTS_VERSION
ARG APP_INSIGHTS_CONNECTION_STRING
ARG JAR_FILENAME
# Set up Application Insights agent
ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/${APP_INSIGHTS_VERSION}/applicationinsights-agent-${APP_INSIGHTS_VERSION}.jar \
/java-agent/applicationinsights-agent.jar
RUN echo "{\"connectionString\": \"${APP_INSIGHTS_CONNECTION_STRING}\"}" > applicationinsights.json \
&& mv applicationinsights.json /java-agent/applicationinsights.json
COPY $JAR_FILENAME /opt/app/app.jar
# Add -javaagent option
ENTRYPOINT ["java", "-javaagent:/java-agent/applicationinsights-agent.jar", "-jar", "/opt/app/app.jar"]
Ao criar uma imagem de contêiner com este Dockerfile, adicione argumentos de compilação usando --build-arg
, conforme mostrado no exemplo a seguir:
docker build -t <image-name>:<image-tag> \
-f JAR.dockerfile \
--build-arg APP_INSIGHTS_VERSION=3.5.2 \
--build-arg APP_INSIGHTS_CONNECTION_STRING="<connection-string>" \
--build-arg JAR_FILENAME=<path-to-jar> \
.
Criar um arquivo WAR
O exemplo a seguir do Dockerfile cria um arquivo WAR com as alterações anteriores:
FROM mcr.microsoft.com/openjdk/jdk:17-mariner
ARG TOMCAT_VERSION
ARG TOMCAT_MAJOR_VERSION
ARG APP_INSIGHTS_VERSION
ARG APP_INSIGHTS_CONNECTION_STRING
ARG WAR_FILENAME
ARG TOMCAT_HOME=/opt/tomcat
# Set up Application Insights agent
ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/${APP_INSIGHTS_VERSION}/applicationinsights-agent-${APP_INSIGHTS_VERSION}.jar \
/java-agent/applicationinsights-agent.jar
RUN echo "{\"connectionString\": \"${APP_INSIGHTS_CONNECTION_STRING}\"}" > applicationinsights.json \
&& mv applicationinsights.json /java-agent/applicationinsights.json
# Set up Tomcat
ADD https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
$TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz
RUN tdnf update -y \
&& tdnf install -y tar \
&& tar -zxf $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz -C $TOMCAT_HOME --strip-components 1 \
&& rm $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz \
&& rm -r $TOMCAT_HOME/webapps/*
COPY $WAR_FILENAME $TOMCAT_HOME/webapps/app.war
# Add the -javaagent option
ENTRYPOINT ["/bin/sh", "-c" , "export CATALINA_OPTS=-javaagent:/java-agent/applicationinsights-agent.jar && /opt/tomcat/bin/catalina.sh run"]
Ao criar uma imagem de contêiner com este Dockerfile, adicione argumentos de compilação usando --build-arg
, conforme mostrado no exemplo a seguir:
docker build -t <image-name>:<image-tag> \
-f WAR.dockerfile \
--build-arg APP_INSIGHTS_VERSION=3.5.2 \
--build-arg APP_INSIGHTS_CONNECTION_STRING="<connection-string>" \
--build-arg WAR_FILENAME=<path-to-war> \
--build-arg TOMCAT_VERSION=<version> \
--build-arg TOMCAT_MAJOR_VERSION=<major-version> \
.
Integrar outros agentes do APM usando o Dockerfile
Você poderá integrar outros agentes do APM de maneira semelhante. A lista a seguir mostra alguns outros agentes do APM, juntamente com uma breve descrição sobre como integrá-los. Para obter instruções de download, consulte a documentação oficial do APM.
- Dynatrace
- Baixe o agente Dynatrace no Dockerfile.
- Definir as seguintes variáveis de ambiente em runtime:
LD_PRELOAD=<path-to-agent>
DT_TENANT=<tenant>
DT_TENANTTOKEN=<token>
DT_CONNECTION_POINT=<connection-point>
-
DT_LOGLEVELCON=info
Para obter mais informações, consulte Configurar o OneAgent em contêineres para monitoramento somente de aplicativos.
- AppDynamics
- Baixe o agente AppDynamics no Dockerfile.
- Adicione
-javaagent:<path-to-agent>
às opções de JVM. - Defina as variáveis de ambiente necessárias, incluindo
APPDYNAMICS_AGENT_ACCOUNT_NAME
,APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
e assim por diante, em runtime. Para obter uma lista completa das propriedades de configuração, consulte Propriedades de Configuração do Agente Java do AppDynamics.
- New Relic
- Baixe o agente New Relic no Dockerfile. Caso tenha um novo arquivo de configuração do agente Java do New Relic, copie-o do computador local para o contêiner. Para obter mais informações sobre arquivos de configuração, consulte a Configuração do agente Java: arquivo de configuração.
- Adicione
-javaagent:<path-to-agent>
às opções de JVM. - Defina as variáveis de ambiente
NEW_RELIC_LICENSE_KEY=<license-key>
eNEW_RELIC_APP_NAME=<app-name>
, em runtime, se você não defini-las em um arquivo de configuração ou quiser substituir os valores em um arquivo de configuração.
Há outra abordagem para integrar um agente do APM, que é pré-compilar uma imagem de contêiner para o agente do APM e executá-la como um contêiner de inicialização. Para obter mais informações sobre essa abordagem, consulte Tutorial: Configurar o agente Java do APM (Gerenciamento de Desempenho de Aplicativos) com contêineres de inicialização nos Aplicativos de Contêiner do Azure.
Usar pacotes de compilação do Paketo
Para integrar o agente do Application Insights em sua imagem de contêiner, você precisará de uma associação. Para obter mais informações sobre associações, consulte Associações na documentação do Paketo.
Primeiro, use os comandos a seguir para criar uma associação chamada application-insights no diretório de associações em seu computador local. A associação consiste em apenas um arquivo, tiponomeado. O conteúdo do arquivo de tipo é o texto ApplicationInsights
, indicando uma associação do Application Insights.
mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type
O diagrama a seguir mostra a estrutura do diretório:
bindings
└── application-insights
└── type
Em seguida, use o seguinte comando para criar a imagem. Forneça a associação à compilação usando a opção --volume
. A CLI do pacote monta o diretório de associação no contêiner de compilação. Em seguida, o pacote de compilação do Application Insights o detecta e participa do processo de compilação.
pack build <image-name>:<image-tag> \
--volume $(pwd)/bindings/application-insights:/platform/bindings/application-insights" \
--path <path-to-source-root> \
--builder <builder-name>
Para implantar a imagem de contêiner em um ambiente de Aplicativos de Contêiner do Azure,use a CLI do Azure. Para obter mais informações, consulte Implantar Aplicativos de Contêiner do Azure com o comando az containerapp up. Há duas abordagens para passar a cadeia de conexão do Application Insights para o agente do Application Insights em runtime. Uma abordagem é passar a cadeia de conexão como uma variável de ambiente. Para obter mais informações, consulte a seção Configurar com variáveis de ambiente. A outra abordagem é passar a cadeia de conexão por meio de associações. Para obter mais informações, consulte a seção configurar com Associações.
Configurar com variáveis de ambiente
Para passar uma cadeia de conexão para o Application Insights, especifique APPLICATIONINSIGHTS_CONNECTION_STRING
na opção --env-vars
, conforme mostrado no exemplo a seguir. Você poderá especificar outras variáveis de ambiente se quiser passar mais opções de configuração para o agente.
az containerapp up \
--name <container-app-name> \
--image <image-name>:<image-tag> \
--resource-group <resource-group> \
--environment <environment-name> \
--location <location> \
--env-vars "APPLICATIONINSIGHTS_CONNECTION_STRING=<connection-string>"
Configurar com associações
Para configurar o agente do Application Insights com associações, armazene a cadeia de conexão do Application Insights, o tipo de associação e quaisquer outras configurações como segredos em seu aplicativo de contêiner. Monte os segredos em um volume para que o pacote de compilação do Application Insights possa lê-los em runtime.
Com o comando a seguir, você declara dois segredos no nível do aplicativo: type
e connection-string
. Eles são montados em /bindings/application-insights no contêiner. O pacote de compilação procura associações no diretório /bindings porque a variável de ambiente SERVICE_BINDING_ROOT
está definida.
az containerapp create \
--name <container-app-name> \
--image <image-name>:<image-tag> \
--resource-group <resource-group> \
--environment <environment-name> \
--secrets "type=ApplicationInsights" "connection-string=<connection-string>" \
--secret-volume-mount "/bindings/application-insights" \
--env-vars "SERVICE_BINDING_ROOT=/bindings"
Como alternativa, você poderá armazenar a cadeia de conexão no Azure Key Vault e referenciá-la em segredos. Para obter mais informações, confira Gerenciar segredos nos Aplicativos de Contêiner do Azure.
Para implantar a imagem de contêiner no Serviço de Kubernetes do Azure, consulte Como usar os pacotes de compilação no Kubernetes para Java.
Integrar outros agentes do APM usando os pacotes de compilação do Paketo
Há os pacotes de compilação para vários agentes do APM, incluindo os agentes a seguir. Para obter mais informações sobre definições e configurações de associação, consulte a documentação de cada agente.