Partilhar via


Integre o monitoramento de desempenho de aplicativos em imagens de contêiner

Nota

Os planos Basic, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de aposentadoria de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.

O plano de consumo padrão e dedicado 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 obter mais informações, consulte Migrar consumo padrão e plano dedicado do Azure Spring Apps para Aplicativos de Contêiner do Azure.

Este artigo aplica-se a:✅ Basic/Standard ✅ Enterprise

Este artigo explica como integrar o agente Java do Application Insights em sua imagem de contêiner. Da mesma forma, você também pode integrar outros agentes de monitoramento de desempenho de aplicativos (APM) em sua imagem de contêiner, incluindo AppDynamics, New Relic e Dynatrace.

O Azure Spring Apps integra-se facilmente com agentes APM. Ao migrar aplicativos para Aplicativos de Contêiner do Azure ou Serviço Kubernetes do Azure (AKS), você precisa se integrar ao APM durante a criação da imagem. O processo é semelhante à abordagem usada pelo Azure Spring Apps. Você também pode adicionar um agente APM em um contêiner de inicialização separado e injetá-lo em um aplicativo de contêiner durante sua inicialização.

Pré-requisitos

Escolha o agente Java do Application Insights

Atualmente, o Azure Spring Apps usa o agente Java 3.5.2 do Application Insights. Você pode escolher outra versão dependendo de suas necessidades. Você pode encontrar todas as versões na página de versões Java do Application Insights.

Você pode encontrar a cadeia de conexão do Application Insights no portal do Azure no painel Visão geral da sua 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, consulte Opções de configuração do Application Insights for Java.

Se você estiver usando um Dockerfile para criar uma imagem de contêiner, consulte a seção Usar Dockerfile . Se você estiver usando Paketo Buildpacks para criar uma imagem de contêiner, consulte a seção Usar Paketo Buildpacks .

Usar o Dockerfile

Use as seguintes etapas para modificar seu Dockerfile:

  1. Faça o download do agente Java do Application Insights e crie um arquivo de configuração para ele, chamado applicationinsights.json.
  2. Adicione a -javaagent opção ao ponto de entrada da imagem do contêiner.

Para saber mais sobre como criar um arquivo JAR ou WAR com um Dockerfile, consulte Criar uma imagem de contêiner a partir de um JAR ou WAR.

Criar um arquivo JAR

O exemplo a seguir 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 esse Dockerfile, você precisa adicionar 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 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 esse Dockerfile, você precisa adicionar 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> \
    .

Integre outros agentes de monitoramento de desempenho de aplicativos usando o Dockerfile

Você pode integrar outros agentes de monitoramento de desempenho de aplicativos (APM) de maneira semelhante. A lista a seguir mostra alguns outros agentes 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.
    • Defina as seguintes variáveis de ambiente em tempo de execução:
  • AppDynamics
    • Baixe o agente do AppDynamics no Dockerfile.
    • Adicione -javaagent:<path-to-agent> às opções da JVM.
    • Defina as variáveis de ambiente necessárias, incluindo APPDYNAMICS_AGENT_ACCOUNT_NAME, APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEYe assim por diante, em tempo de execução. Para obter uma lista completa das propriedades de configuração, consulte Propriedades de configuração do AppDynamics Java Agent.
  • Nova Relíquia
    • Baixe o agente New Relic no Dockerfile. Se você tiver um arquivo de configuração do agente Java New Relic, copie-o da máquina local para o contêiner. Para obter mais informações sobre arquivos de configuração, consulte Configuração do agente Java: arquivo de configuração.
    • Adicione -javaagent:<path-to-agent> às opções da JVM.
    • Defina as variáveis NEW_RELIC_LICENSE_KEY=<license-key> de ambiente e NEW_RELIC_APP_NAME=<app-name> em tempo de execução, se você não as tiver definido em um arquivo de configuração ou quiser substituir os valores em um arquivo de configuração.

Há outra abordagem para integrar um agente APM, que é pré-construir uma imagem de contêiner para o agente APM e executá-la como um contêiner init. Para obter mais informações sobre essa abordagem, consulte Tutorial: Configurar o agente Java do Application Performance Management (APM) com contêineres init nos Aplicativos de Contêiner do Azure.

Use Paketo Buildpacks

Para integrar o agente do Application Insights em sua imagem de contêiner, você precisa de uma ligação. Para obter mais informações sobre associações, consulte Ligações na documentação do Paketo.

Primeiro, use os comandos a seguir para criar uma associação chamada application-insights no diretório bindings em sua máquina local. A associação consiste em apenas um arquivo, tipo nomeado. O conteúdo do arquivo de tipo é o texto ApplicationInsights, indicando uma ligação do Application Insights.

mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type

O diagrama a seguir mostra a estrutura de diretórios:

bindings
└── application-insights
    └── type

Em seguida, use o seguinte comando para criar a imagem. Forneça a associação para sua compilação usando a --volume opção. A CLI do pacote monta o diretório de vinculação no contêiner de compilação. Em seguida, o buildpack do Application Insights deteta 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, você pode usar 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 tempo de execução. 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 ligações. Para obter mais informações, consulte a seção Configurar com ligações .

Configurar com variáveis de ambiente

Para passar uma cadeia de conexão para o --env-vars Application Insights, especifique APPLICATIONINSIGHTS_CONNECTION_STRING na opção, conforme mostrado no exemplo a seguir. Você pode 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, você pode armazenar 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 buildpack do Application Insights possa lê-los em tempo de execução.

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 buildpack procura associações no diretório /bindings porque a SERVICE_BINDING_ROOT variável de ambiente 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ê pode armazenar a cadeia de conexão no Cofre da Chave do Azure e fazer referência a ela em segredos. Para obter mais informações, consulte Gerenciar segredos em aplicativos de contêiner do Azure.

Para implantar a imagem de contêiner no Serviço Kubernetes do Azure, consulte Como usar buildpacks no Kubernetes para Java.

Integre outros agentes de monitoramento de desempenho de aplicativos usando o Paketo Buildpacks

Existem buildpacks para vários agentes APM, incluindo os seguintes agentes. Para obter mais informações sobre a instalação e as configurações de ligação, consulte a documentação de cada agente.