Implantar o Agente Java do APM

Ao provisionar com sucesso o agente Java do APM, você pode implantá-lo.

Para implantar o agente Java do APM em qualquer aplicativo Java, adicione o parâmetro -javaagent ao script de inicialização da JVM. Dependendo do ambiente Java, um servidor de aplicativos ou um microsserviço, os usuários podem ter scripts de inicialização de shell ou de bastidores ou outra forma de executar a linha de comando Java.

Veja abaixo exemplos de como implantar o agente Java do APM nos seguintes aplicativos Java:

Oracle WebLogic Server

Veja aqui as informações sobre como implantar o agente Java do APM no Oracle WebLogic Server.

  1. Defina uma variável para apontar para o diretório de destino do servidor de aplicativos. Este é o diretório no qual o agente Java do APM é provisionado.

    Defina a variável $DOMAIN_HOME para apontar para o diretório de Domínio do Oracle WebLogic Server e confirme se o agente Java do APM foi provisionado no mesmo diretório de destino antes de executar a próxima etapa.

    Servidor de Aplicativos Informações da Variável do Diretório de Destino
    Oracle WebLogic Server Defina a variável $DOMAIN_HOME para apontar para o Domínio do Oracle WebLogic Server.
    export DOMAIN_HOME=<Oracle WebLogic Server Domain>
  2. Faça uma cópia de backup do arquivo startWebLogic.sh:
    cd $DOMAIN_HOME/bin
    cp startWebLogic.sh startWebLogic.sh.orig
  3. Use um editor de texto e edite o script startWebLogic.sh original e adicione a opção -javaagent.
    1. Se você estiver implantando o agente Java do APM no Servidor de Administração do Oracle WebLogic e em Servidores Gerenciados, adicione a seguinte opção -javaagent ao conjunto JAVA_OPTIONS, após a chamada setDomainEnv.sh:
      JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:$DOMAIN_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
    2. Se você estiver implantando o agente Java do APM apenas em Servidores Gerenciados, adicione a seguinte opção -javaagent ao conjunto de JAVA_OPTIONS em uma instrução if após a chamada setDomainEnv.sh:
      if [ "$SERVER_NAME" != "AdminServer" ] ; then
              set JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:$DOMAIN_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
      fi
  4. Interrompa e reinicie o Oracle WebLogic Server:
    cd $DOMAIN_HOME/bin
    ./stopWebLogic.sh
    cd ..
    nohup ./startWebLogic.sh >& startup.log &

    Se você tiver Servidores Gerenciados, interrompa e reinicie-os também:

    cd $DOMAIN_HOME/bin
            ./stopManagedWebLogic.sh {SERVER_NAME} {ADMIN_URL} {USER_NAME} {PASSWORD}
            nohup ./startManagedWebLogic.sh {SERVER_NAME} {ADMIN_URL} >& {SERVER_NAME}.log &
    Observação

    Observe que a versão $DOMAIN_HOME de startWebLogic.sh é usada, mesmo que você tenha editado a versão $DOMAIN_HOME/bin. Chamar o comando de um nível superior (de $DOMAIN_HOME) chama o comando de um nível inferior (de $DOMAIN_HOME/bin). No entanto, o comando stopWebLogic.sh será chamado do diretório $DOMAIN_HOME/bin.

Depois que o agente Java do APM for implantado com sucesso, a mensagem Oracle APM Agent: Initialized AgentInstance será exibida no log de inicialização do servidor.

Servidor Apache Tomcat

Veja aqui as informações sobre como implantar o agente Java do APM no Servidor Apache Tomcat.

  1. Defina uma variável para apontar para o diretório de destino do servidor de aplicativos. Este é o diretório no qual o agente Java do APM é provisionado.

    Defina a variável $CATALINA_HOME para apontar para o diretório de destino do Servidor Apache Tomcat e confirme se o agente Java do APM foi provisionado no mesmo diretório de destino antes de executar a próxima etapa.

    Servidor de Aplicativos Informações da Variável do Diretório de Destino
    Servidor Apache Tomcat Defina a variável $CATALINA_HOME para apontar para o diretório de destino do Servidor Apache Tomcat.
    • Se você estiver usando um shell Bash:
      export CATALINA_HOME=<Apache Tomcat Server destination directory>
    • Se estiver usando um shell C:
      setenv CATALINA_HOME "<Apache Tomcat Server destination directory>"
  2. Faça uma cópia de backup do arquivo catalina.sh.
    $ cd $CATALINA_HOME/bin
    $ cp catalina.sh catalina.sh.orig
  3. Use um editor de texto e edite o arquivo catalina.sh original e adicione a seguinte opção -javaagent a CATALINA_OPTS. Faça a alteração fora de qualquer instrução if ou bloco de código que não possa ser executado durante a inicialização do servidor. Isso garantirá que o flag -javaagent seja sempre adicionado às opções de inicialização do servidor.
    CATALINA_OPTS="${CATALINA_OPTS} -javaagent:$CATALINA_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
  4. Interrompa e reinicie o Servidor Apache Tomcat:
    $ cd $CATALINA_HOME/bin                      
    $ ./shutdown.sh
    $ ./startup.sh

Depois que o agente Java do APM for implantado com sucesso, a mensagem Oracle APM Agent: Initialized AgentInstance será exibida no log de inicialização do servidor.

Para obter mais informações, consulte Instalar um Agente Java do APM em um Tutorial do Servidor de Aplicativos Tomcat.

Servidor Jetty

Veja aqui as informações sobre como implantar o agente Java do APM no Servidor Jetty.

  1. Defina uma variável para apontar para o diretório de destino do servidor de aplicativos. Este é o diretório no qual o agente Java do APM é provisionado.

    Defina a variável JETTY_HOME para apontar para o diretório de destino do Jetty Server (onde o software Jetty foi extraído) e confirme se o agente Java do APM foi provisionado no mesmo diretório antes de executar a próxima etapa.

  2. Inicie o servidor Jetty.
    java -javaagent:/<Destination_Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar $JETTY_HOME/start.jar

Depois que o agente Java do APM for implantado com sucesso, a mensagem Oracle APM Agent: Initialized AgentInstance será exibida no log de inicialização do servidor.

Spring Boot

Veja aqui as informações sobre como implantar um agente Java do APM em um microsserviço Spring Boot executando o Apache Tomcat incorporado.

Supõe-se que você tenha concluído as tarefas de pré-requisito e provisionado o agente Java do APM. Além disso, você deve ter adicionado as seguintes propriedades ao arquivo application.properties do aplicativo Spring Boot para ativar o Apache Tomcat Mbeans:
spring.jmx.enabled=true
server.tomcat.mbeanregistry.enabled=true

Como alternativa, adicione as propriedades acima: spring.jmx.enabled e server.tomcat.mbeanregistry.enabled como propriedades do sistema na linha de comando.

Para implantar o agente Java do APM, adicione a opção -javaagent a seguir ao script de inicialização do seu microsserviço. Observe que <Destination Directory> denota o diretório no qual você provisionou o agente.
java -javaagent:<Destination Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar target/<microservice.jar>

Depois que o agente Java do APM for implantado com sucesso, a mensagem Oracle APM Agent: Initialized AgentInstance será exibida no log de inicialização do microsserviço.

JBoss Servidor

Aqui estão informações sobre como implantar o agente APM Java no Servidor JBoss.

As instruções abaixo são aplicáveis para JBoss EAP e Wildfly.

  1. Defina uma variável para apontar para o diretório de destino do servidor de aplicativos. Este é o diretório no qual o agente Java do APM é provisionado.

    Defina a variável $JBOSS_HOME para apontar para o diretório de destino do Servidor JBoss e confirme se o agente Java do APM foi provisionado no mesmo diretório de destino antes de executar a próxima etapa.

    Servidor de Aplicativos Informações da Variável do Diretório de Destino
    JBoss Servidor

    Defina a variável $JBOSS_HOME para apontar para o diretório de destino do Servidor JBoss.

    • Se você estiver usando um shell Bash:
      export JBOSS_HOME=<JBoss Server destination directory>
    • Se estiver usando um shell C:
      setenv JBOSS_HOME "<JBoss Server destination directory>"
  2. Faça uma cópia de backup do arquivo standalone.conf:
    cd $JBOSS_HOME/bin
    cp standalone.conf standalone.conf.orig
  3. Use um editor de texto e edite o arquivo standalone.conf original e adicione as seguintes opções Java a JAVA_OPTS. Faça a alteração fora de qualquer instrução if ou bloco de código que não possa ser executado durante a inicialização do servidor.
    • Adicione a opção -javaagent a JAVA_OPTS.
      JAVA_OPTS="$JAVA_OPTS -javaagent:$JBOSS_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
    • Edite a propriedade jboss.modules.system.pkgs Java para incluir "com.oracle.apm".

      Por exemplo:

      JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager,com.oracle.apm"
      Observação

      Cada ambiente é diferente. A propriedade do servidor Jboss pode incluir pacotes diferentes dos mostrados no exemplo acima.
  4. Pare e reinicie o Servidor JBoss:
    cd $JBOSS_HOME/bin                      
    ./jboss-cli.sh -c :shutdown                        
    nohup ./standalone.sh -b 0.0.0.0&> startup.log &

Depois que o agente Java do APM for implantado com sucesso, a mensagem Oracle APM Agent: Initialized AgentInstance será exibida no log de inicialização do servidor.

Docker e Kubernetes

Veja aqui as informações sobre como implantar um agente Java do APM em um contêiner do Docker e no Oracle Container Engine for Kubernetes (OKE).

Há diferentes opções disponíveis para implantar o Agente Java do APM em ambientes Docker e Kubernetes. Revise o quadro a seguir e selecione o cenário que atenda às suas necessidades de negócios:
  1. Implantar o Agente Java do APM na Imagem do Contêiner do Docker
  2. Implantar o Agente Java do APM usando o Operador OpenTelemetry
  3. Implantar o Agente Java do APM em um Volume Montado

Implantar o Agente Java do APM na Imagem do Contêiner do Docker

Veja aqui as informações sobre como implantar um agente Java do APM em uma imagem de contêiner do Docker e no Oracle Container Engine for Kubernetes (OKE).

Figura 3-1 Implantar o Agente Java do APM na Imagem do Contêiner do Docker

Implantar o Agente Java do APM na Imagem do Contêiner do Docker

Recomendação:

Use essa opção quando for possível fazer alterações na imagem do contêiner do Docker.

Por exemplo, se você precisar alterar a configuração do agente do APM, poderá fazer alterações na imagem do Docker.

Para implantar o agente Java do APM, siga as etapas abaixo:

  1. Antes de continuar, confirme se você concluiu os pré-requisitos e o agente Java do APM provisionado.
    Observação

    Ao provisionar o agente Java do APM, é recomendável provisioná-lo em qualquer local da sua máquina local e, em seguida, copiá-lo para uma imagem do Docker.
  2. Modifique seu Dockerfile para copiar o agente Java do APM para uma imagem do Docker:
    COPY <DESTINATION_DIRECTORY>/oracle-apm-agent <Docker_Image_Directory>/oracle-apm-agent/

    Observe que <DESTINATION_DIRECTORY> denota o local em sua máquina local na qual você provisionou o agente Java do APM e <Docker_Image_Directory> denota o diretório na imagem do Docker para o qual você está copiando o agente Java do APM. O <Docker_Image_Directory> também poderia ser o diretório de destino do servidor de aplicativos no Docker, por exemplo, $DOMAIN_HOME, se você estiver trabalhando com o Oracle WebLogic Server.

  3. Adicione a seguinte opção -javaagent ao script de inicialização do servidor de aplicativos:
    java -javaagent:<Docker_Image_Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar target/<appserver.jar>
  4. Crie uma nova imagem do Docker com o agente Java do APM incorporado e o script de inicialização modificado e envie a imagem para o registro.

Se você usar o Kubernetes para gerenciar seus contêineres do Docker, atualize a sua configuração do Kubernetes para usar a nova imagem do Docker e reinicie o pod do Kubernetes.

Além disso, você pode definir dimensões adicionais a serem reportadas do pod do Kubernetes usando a API Downward, copiando as seguintes definições de ambiente e volume na especificação de implantação (arquivo yaml) do pod do Kubernetes. Para obter informações sobre a API Downward, consulte The Downward API na documentação do Kubernetes.

Definições de Ambiente

spec:
  containers:
  - name: <container-name>
    image: image: <your-registry>/<your-docker-image>:latest
    env:
      - name: APM_ATTRIBUTES_K8S_POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
      - name: APM_ATTRIBUTES_K8S_NAMESPACE_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace
      - name: APM_ATTRIBUTES_K8S_NODE_NAME
        valueFrom:
          fieldRef:
            fieldPath: spec.nodeName

Definições de Volume

spec:
  containers:
  - name: <container-name>
    image: image: <your-registry>/<your-docker-image>:latest
    volumeMounts:
      - name: apm-attributes-k8s
        mountPath: /etc/apm-attributes-k8s
    volumes:
      - name: apm-attributes-k8s
        downwardAPI:
         items:
           - path: "labels"
             fieldRef:
               fieldPath: metadata.labels
           - path: "annotations"
             fieldRef:
               fieldPath: metadata.annotations
Observação

Se a implantação do Kubernetes não tiver labels, anotações ou ambos, a API Downward para o mesmo causará um erro quando o aplicativo for implantado. Nesse caso, você deve remover a entrada da API Downward correspondente a metadata.labels, metadata.annotations ou ambos.

Implantar o Agente Java do APM usando o Operador OpenTelemetry

Veja informações sobre como implantar um agente Java do APM usando o operador OpenTelemetry para injetar e configurar automaticamente o agente Java do APM em seus pods de aplicativos Java em execução nos clusters do Kubernetes (K8s).

Figura 3-2 Implantar Agente Java do APM usando o Operador OpenTelemetry

Implantar Agente Java do APM usando o Operador OpenTelemetry

Recomendação:

Use essa opção se não for possível atualizar a imagem do contêiner do Docker e você preferir fazer alterações na configuração do agente Java do APM usando o recurso personalizado (CR) do Kubernetes para injetar automaticamente o agente do APM nas JVMs na inicialização.

Considerações do Docker e do Kubernetes:
  • Para o controle de versão da imagem do Docker, evite usar a tag :latest ao implantar contêineres em produção, pois é mais difícil rastrear qual versão da imagem está em execução e mais difícil fazer rollback corretamente. Em vez disso, especifique uma tag significativa, como v1.12.1.3.
  • Para o Kubernetes, faça backups dos recursos personalizados (CRs) e dos mapas de configuração do Kubernetes.

Pré-requisito: Instale o Operador OpenTelemetry no cluster do Kubernetes.

Há três opções diferentes disponíveis: Manifesto de release do operador, Gráfico helm do operador ou Hub do Operador.

Na maioria dos casos, um cert-manager deve ser instalado. Se a opção de gráfico helm for usada, haverá uma opção para gerar um certificado autoassinado.

Para um início rápido, se o gerenciador de certificados precisar ser instalado, execute o comando abaixo:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.2/cert-manager.yaml

Para instalar o operador OpenTelemetry, execute o seguinte:

kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

Implantar o agente Java do APM

Para implantar o agente Java do APM, siga estas etapas:

  1. Criar um Recurso Personalizado (CR) do Kubernetes.

    Para gerenciar a instrumentação automática, o Operador OpenTelemetry precisa receber informações sobre o agente Java do APM e sua configuração, que é feita usando a Definição de Recurso Personalizado (CRD).

    Este Recurso Personalizado será usado pelo operador para copiar o agente no pod e adicionar a ele a configuração necessária.

    Para criar o CR, execute o seguinte:
    kubectl apply -f - <<EOF
    apiVersion: opentelemetry.io/v1alpha1
    kind: Instrumentation
    metadata:
      name: inst-apm-java
      namespace: opentelemetry-operator-system
    spec:
      java:
        image: container-registry.oracle.com/oci_observability_management/oci-apm-java-agent:1.15.0.516
        env:
          - name: OTEL_com_oracle_apm_agent_data_upload_endpoint
            value: <data-upload-endpoint>
          - name: OTEL_com_oracle_apm_agent_private_data_key
            value: <private-data-key>
    EOF
    Em que:
    O CR criado pode ser consultado executando o seguinte comando:
    kubectl get otelinst -n opentelemetry-operator-system
    Todos os pontos finais e variáveis de ambiente devem estar corretos para que a instrução automática funcione corretamente.
  2. Adicione a anotação do Kubernetes.

    O operador OpenTelemetry usa a anotação do Kubernetes para decidir quais pods devem ser injetados automaticamente com o agente Java do APM.

    A anotação pode ser adicionada a um namespace. Nesse caso, todos os pods dentro desse namespace serão injetados. A anotação também pode ser adicionada a objetos PodSpec individuais, disponíveis como parte da Implantação, Statefulset e outros recursos.

    Nota:
    instrumentation.opentelemetry.io/inject-java: "opentelemetry-operator-system/inst-apm-java"
    Para começar a editar seu namespace, faça o seguinte:
    • Execute o comando:
      kubectl edit namespace <your-namespace-name>
    • Edite o namespace assim que o editor for aberto. Por exemplo, editor vi.
    • Adicione a anotação ao namespace. Tenha em mente que o recuo é muito importante para torná-lo um arquivo YAML válido.
    Exemplo:
    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        kubernetes.io/metadata.name: mynamespace
      annotations:
        instrumentation.opentelemetry.io/inject-java: "opentelemetry-operator-system/inst-apm-java"
      name: mynamespace
    spec:
  3. Reinicie o pod do Kubernetes.

    Para reiniciar o pod no qual você deseja injetar automaticamente o agente Java do APM, execute o seguinte:

    kubectl delete pod <your-pod-name> -n <your-namespace-name>
  4. Verifique o pod do Kubernetes.
    Para verificar se seu pod foi injetado automaticamente com o agente Java do APM depois que ele foi reiniciado, execute o seguinte:
    kubectl get pod <your-pod-name> -n <your-namespace-name> -o yaml

Agora você pode ir para a próxima etapa: Verificar Implantação do Agente Java do APM.

Observação

Para obter mais informações sobre como implantar um agente Java do APM usando o Operador OpenTelemetry, confira o blog: Implante automaticamente um agente Java do APM em Ambientes Kubernetes usando o Operador OpenTelemetry

Implantar o Agente Java do APM em um Volume Montado

Veja informações sobre como implantar um agente Java do APM no Oracle Container Engine for Kubernetes (OKE) usando um volume montado.

Figura 3-3 Implantar o Agente Java do APM em um Volume Montado

Implantar o Agente Java do APM em um Volume Montado
Recomendação:
  • Use essa opção quando não for possível fazer alterações na imagem do contêiner do Docker e você preferir usar um volume montado compartilhado quando forem necessárias alterações no agente Java do APM.

    • Exemplo 1: Se você precisar fazer alterações frequentes na configuração do agente do APM, a imagem do contêiner precisará ser atualizada, mas não é viável fazer isso.
    • Exemplo 2: Se o usuário que está implantando o agente do APM não tiver o acesso ou as permissões necessárias para reconstruir uma imagem de contêiner.
  • Para o controle de versão da imagem do docker, faça backup dos arquivos binários e de configuração.

Para implantar o agente Java do APM em um volume montado, siga estas etapas:

  1. Confirme se você concluiu as tarefas de pré-requisito do agente Java do APM.

    Anote o ponto final de upload de dados e a chave de dados quando o Domínio do APM tiver sido criado.

  2. Crie um novo sistema de arquivos que montará os pods.

    Ao criar o sistema de arquivos, é importante garantir a seleção do mesmo Compartimento de Rede Virtual na Nuvem (VCN) que o Kubernetes está usando. Faça o mesmo para o Compartimento de Sub-rede.

  3. Monte o sistema de arquivos nos pods.

    Esta etapa requer edições nos arquivos yaml correspondentes.

    Crie o PersistentVolume e as entidades relacionadas no Kubernetes, usando o arquivo yaml abaixo. Observe os seguintes campos que você precisa editar para seu ambiente: mntTargetId, server e path.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: oci-fss
    provisioner: oracle.com/oci-fss
    parameters:
      mntTargetId: ocid1.mounttarget.oc1.iad.xxxxxxxxxxxxxxxxxxxxxx
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
     name: oke-fsspv
    spec:
     storageClassName: oci-fss
     capacity:
      storage: 10Gi
     accessModes:
      - ReadWriteMany
     mountOptions:
      - nosuid
     nfs:
    # Replace this with the IP of your FSS file system in OCI
      server: 10.0.10.39
    # Replace this with the Path of your FSS file system in OCI
      path: "/fss-for-kub"
      readOnly: false
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: oke-fsspvc
    spec:
     storageClassName: oci-fss
     accessModes:
     - ReadWriteMany
     resources:
      requests:
     # Although storage is provided here it is not used for FSS file systems
        storage: 10Gi
     volumeName: oke-fsspv

    Para aplicar as alterações, execute kubectl apply -f <filename.yaml>

    Em seguida, atualize o arquivo yaml que gerencia os pods e adicione a montagem de volume e volume.

    Para entrar em vigor, recrie os pods.

  4. Faça download do arquivo do agente Java do APM.

    Faça download do arquivo e copie-o para o volume montado.

    Para obter instruções de download, consulte Fazer Download do Software do Agente Java do APM.

    Após o download, copie-o para o volume montado.

  5. Provisionar o Agente Java do APM.

    Faça log-in em um dos contêineres para provisionar o Agente Java do APM, localize o arquivo jar apm-java-agent-installer e execute o seguinte:

    java -jar ./apm-java-agent-installer-<version>.jar provision-agent -service-name=<Name of the Service> -destination=<Destination_Directory> -private-data-key=<Agent installation key generated during APM domain creation> -data-upload-endpoint=<dataUploadEndpoint URL generated during APM domain creation>

    Para obter instruções de provisionamento, consulte Provisionar o Agente Java do APM.

  6. Implantar o Agente Java do APM.

    Implante o Java Agent do APM fornecendo o local oracle-apm-agent para o microsserviço no arquivo yaml.

    Adicione o argumento -javaagent e o local do arquivo jar do agente do APM ao comando java de cada microsserviço:

    java -javaagent:<Mounted Volume>/oracle-apm-agent/bootstrap/ApmAgent.jar
  7. Reinicie o Kubernetes.

    Recrie os pods executando: kubectl apply -f <filename.yaml>.

    Agora você pode ir para a próxima etapa: Verificar Implantação do Agente Java do APM.

Observação

Para obter mais informações sobre como implantar um agente Java do APM em um volume montado, assista ao vídeo: Instrumentação de Inicialização do Kubernetes Spring para Rastreamento Distribuído ou confira o blog: Application Performance Monitoring: Instrumentar o Java no Kubernetes para Monitoramento e Diagnóstico.