Despliegue del agente Java de APM

Al aprovisionar correctamente el agente Java de APM, puede desplegar el agente Java de APM.

Para desplegar el agente Java de APM en cualquier aplicación Java, debe agregar el parámetro -javaagent al script de inicio de JVM. Según el entorno Java, un servidor de aplicaciones o un microservicio, los usuarios pueden tener scripts de inicio de shell o bate, u otra forma de ejecutar la línea de comandos Java.

Consulte los siguientes ejemplos sobre cómo desplegar el agente Java de APM en las siguientes aplicaciones Java:

Oracle WebLogic Server

A continuación se incluye información sobre cómo desplegar el agente Java de APM en Oracle WebLogic Server.

  1. Defina una variable que apunte al directorio de destino del servidor de aplicaciones. Este es el directorio en el que se aprovisiona el agente Java de APM.

    Defina la variable $DOMAIN_HOME para que apunte al directorio de dominio de Oracle WebLogic Server y confirme que el agente Java de APM se ha aprovisionado en el mismo directorio de destino antes de realizar el siguiente paso.

    Servidor de aplicaciones Información de la variable del directorio de destino
    Oracle WebLogic Server Defina la variable $DOMAIN_HOME para que apunte al dominio de Oracle WebLogic Server.
    export DOMAIN_HOME=<Oracle WebLogic Server Domain>
  2. Realice una copia de seguridad del archivo startWebLogic.sh:
    cd $DOMAIN_HOME/bin
    cp startWebLogic.sh startWebLogic.sh.orig
  3. Utilice un editor de texto para editar el script startWebLogic.sh original y agregar la opción -javaagent.
    1. Si va a desplegar el agente Java de APM en Oracle WebLogic Administration Server y los servidores gestionados, agregue la siguiente opción de -javaagent al juego JAVA_OPTIONS, después de la llamada setDomainEnv.sh:
      JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:$DOMAIN_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
    2. Si va a desplegar el agente Java de APM solo en servidores gestionados, agregue la siguiente opción de -javaagent al juego JAVA_OPTIONS en una sentencia if después de la llamada setDomainEnv.sh:
      if [ "$SERVER_NAME" != "AdminServer" ] ; then
              set JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:$DOMAIN_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
      fi
  4. Pare y reinicie Oracle WebLogic Server:
    cd $DOMAIN_HOME/bin
    ./stopWebLogic.sh
    cd ..
    nohup ./startWebLogic.sh >& startup.log &

    Si tiene servidores gestionados, también debe pararlos y reiniciarlos:

    cd $DOMAIN_HOME/bin
            ./stopManagedWebLogic.sh {SERVER_NAME} {ADMIN_URL} {USER_NAME} {PASSWORD}
            nohup ./startManagedWebLogic.sh {SERVER_NAME} {ADMIN_URL} >& {SERVER_NAME}.log &
    Nota

    Observe que se utiliza la versión $DOMAIN_HOME de startWebLogic.sh, aunque haya editado la versión $DOMAIN_HOME/bin. La llamada al comando desde un nivel superior (desde $DOMAIN_HOME) llama al comando desde un nivel inferior (desde $DOMAIN_HOME/bin). Sin embargo, el comando stopWebLogic.sh se llamará desde el directorio $DOMAIN_HOME/bin.

Una vez que el agente Java de APM se ha desplegado correctamente, aparece el mensaje Oracle APM Agent: Initialized AgentInstance en el log de inicio del servidor.

Apache Tomcat Server

A continuación se incluye información sobre cómo desplegar el agente Java de APM en Apache Tomcat Server.

  1. Defina una variable que apunte al directorio de destino del servidor de aplicaciones. Este es el directorio en el que se aprovisiona el agente Java de APM.

    Defina la variable $CATALINA_HOME para que apunte al directorio de destino de Apache Tomcat Server y confirme que el agente Java de APM se ha aprovisionado en el mismo directorio de destino antes de realizar el siguiente paso.

    Servidor de aplicaciones Información de la variable del directorio de destino
    Apache Tomcat Server Defina la variable $CATALINA_HOME para que apunte al directorio de destino de Apache Tomcat Server.
    • Si utiliza un shell Bash:
      export CATALINA_HOME=<Apache Tomcat Server destination directory>
    • Si utiliza un shell C:
      setenv CATALINA_HOME "<Apache Tomcat Server destination directory>"
  2. Realice una copia de seguridad del archivo catalina.sh.
    $ cd $CATALINA_HOME/bin
    $ cp catalina.sh catalina.sh.orig
  3. Utilice un editor de texto para editar el archivo catalina.sh original y agregar la siguiente opción de -javaagent a CATALINA_OPTS. Realice el cambio fuera de cualquier sentencia if o bloques de código que es posible que no se ejecuten durante el inicio del servidor. Esto garantizará que el indicador -javaagent siempre se agregue a las opciones de inicio del servidor.
    CATALINA_OPTS="${CATALINA_OPTS} -javaagent:$CATALINA_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
  4. Detenga y reinicie Apache Tomcat Server:
    $ cd $CATALINA_HOME/bin                      
    $ ./shutdown.sh
    $ ./startup.sh

Una vez que el agente Java de APM se ha desplegado correctamente, aparece el mensaje Oracle APM Agent: Initialized AgentInstance en el log de inicio del servidor.

Para obtener más información, consulte el tutorial sobre instalación de un agente Java de APM en un servidor de aplicaciones de Tomcat.

Servidor Jetty

Esta es la información sobre cómo desplegar el agente Java de APM en Jetty Server.

  1. Defina una variable que apunte al directorio de destino del servidor de aplicaciones. Este es el directorio en el que se aprovisiona el agente Java de APM.

    Defina la variable JETTY_HOME para que apuntar al directorio del destino de Jetty Server (donde se extrajo el software Jetty) y confirme que el agente Java de APM se ha aprovisionado en el mismo directorio del destino antes de realizar el siguiente paso.

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

Una vez que el agente Java de APM se ha desplegado correctamente, aparece el mensaje Oracle APM Agent: Initialized AgentInstance en el log de inicio del servidor.

Spring Boot

A continuación se incluye información sobre cómo desplegar un agente Java de APM en un microservicio de Spring Boot que ejecuta Apache Tomcat embebido.

Se asume que ha completado las tareas previas necesarias y que ha aprovisionado el agente Java de APM. Además, debe asegurarse de haber agregado las siguientes propiedades al archivo application.properties de la aplicación Spring Boot para activar los beans gestionados de Apache Tomcat:
spring.jmx.enabled=true
server.tomcat.mbeanregistry.enabled=true

También puede agregar las propiedades anteriores: spring.jmx.enabled y server.tomcat.mbeanregistry.enabled como propiedades del sistema en la línea de comandos.

Para desplegar el agente Java de APM, agregue la siguiente opción de -javaagent al script de inicio del microservicio. Tenga en cuenta que <Destination Directory> indica el directorio en el que ha aprovisionado el agente.
java -javaagent:<Destination Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar target/<microservice.jar>

Una vez que el agente Java de APM se ha desplegado correctamente, aparece el mensaje Oracle APM Agent: Initialized AgentInstance en el log de inicio del microservicio.

Servidor JBoss

A continuación, se muestra información sobre cómo desplegar el agente Java de APM en el servidor JBoss.

Las siguientes instrucciones son aplicables para JBoss EAP y Wildfly.

  1. Defina una variable que apunte al directorio de destino del servidor de aplicaciones. Este es el directorio en el que se aprovisiona el agente Java de APM.

    Defina la variable $JBOSS_HOME para que apunte al directorio de destino del servidor JBoss y confirme que el agente Java de APM se ha aprovisionado en el mismo directorio de destino antes de realizar el siguiente paso.

    Servidor de aplicaciones Información de la variable del directorio de destino
    Servidor JBoss

    Defina la variable $JBOSS_HOME para que apunte al directorio de destino del servidor JBoss.

    • Si utiliza un shell Bash:
      export JBOSS_HOME=<JBoss Server destination directory>
    • Si utiliza un shell C:
      setenv JBOSS_HOME "<JBoss Server destination directory>"
  2. Realice una copia de seguridad del archivo standalone.conf:
    cd $JBOSS_HOME/bin
    cp standalone.conf standalone.conf.orig
  3. Utilice un editor de texto y edite el archivo standalone.conf original y agregue las siguientes opciones de Java a JAVA_OPTS. Realice el cambio fuera de cualquier sentencia if o bloques de código que es posible que no se ejecuten durante el inicio del servidor.
    • Agregue la opción -javaagent a JAVA_OPTS.
      JAVA_OPTS="$JAVA_OPTS -javaagent:$JBOSS_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
    • Edite la propiedad Java jboss.modules.system.pkgs para incluir "com.oracle.apm".

      Por ejemplo:

      JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager,com.oracle.apm"
      Nota

      Cada entorno es diferente. La propiedad del servidor Jboss puede incluir diferentes paquetes de los que se muestran en el ejemplo anterior.
  4. Pare y reinicie el servidor JBoss:
    cd $JBOSS_HOME/bin                      
    ./jboss-cli.sh -c :shutdown                        
    nohup ./standalone.sh -b 0.0.0.0&> startup.log &

Una vez que el agente Java de APM se ha desplegado correctamente, aparece el mensaje Oracle APM Agent: Initialized AgentInstance en el log de inicio del servidor.

Docker y Kubernetes

A continuación se incluye información sobre cómo desplegar un agente Java de APM en un contenedor de Docker y en Oracle Container Engine for Kubernetes (OKE).

Hay diferentes opciones disponibles para desplegar el agente Java de APM en entornos de Docker y Kubernetes. Revise lo siguiente y seleccione el escenario que satisfaga las necesidades de su negocio:
  1. Despliegue del agente Java de APM en la imagen de contenedor de Docker
  2. Despliegue del agente Java de APM con el operador OpenTelemetry
  3. Despliegue del agente Java APM en un volumen montado

Despliegue del agente Java de APM en la imagen de contenedor de Docker

A continuación se incluye información sobre cómo desplegar un agente Java de APM en una imagen de contenedor de Docker y en Oracle Container Engine for Kubernetes (OKE).

Figura 3-1 Despliegue del agente Java de APM en la imagen de contenedor de Docker

Despliegue del agente Java de APM en Docker Container Image

Recomendación:

Utilice esta opción cuando sea posible realizar cambios en la imagen de contenedor de Docker.

Por ejemplo, si puede que necesite cambiar la configuración del agente de APM, podrá realizar cambios en la imagen de Docker.

Para desplegar el agente Java de APM, siga estos pasos:

  1. Antes de continuar, confirme que ha completado los requisitos previos y aprovisionado el agente Java de APM.
    Nota

    Al aprovisionar el agente Java de APM, se recomienda aprovisionarlo en cualquier ubicación de la máquina local y, a continuación, copiarlo en una imagen de Docker.
  2. Modifique el archivo Dockerfile para copiar el agente Java de APM en una imagen de Docker:
    COPY <DESTINATION_DIRECTORY>/oracle-apm-agent <Docker_Image_Directory>/oracle-apm-agent/

    Tenga en cuenta que <DESTINATION_DIRECTORY> indica la ubicación en la máquina local en la que ha aprovisionado el agente Java de APM y <Docker_Image_Directory> indica el directorio de la imagen de Docker en la que va a copiar el agente Java de APM. <Docker_Image_Directory> también puede ser el directorio de destino del servidor de aplicaciones en Docker; por ejemplo, $DOMAIN_HOME, si está trabajando con Oracle WebLogic Server.

  3. Agregue la siguiente opción de -javaagent al script de inicio del servidor de aplicaciones:
    java -javaagent:<Docker_Image_Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar target/<appserver.jar>
  4. Cree una nueva imagen de Docker con el agente Java de APM incorporado y el script de inicio modificado, y transfiera la imagen al registro.

Si utiliza Kubernetes para gestionar los contenedores del Docker, actualice la configuración de Kubernetes para utilizar la nueva imagen de Docker y reinicie el pod de Kubernetes.

Además, puede definir las dimensiones adicionales que se notificarán desde el pod de Kubernetes mediante la API descendente copiando la siguiente configuración de volumen y entorno en la especificación de despliegue (archivo yaml) del pod de Kubernetes. Para obtener información sobre la API descendente, consulte la sección correspondiente (The Downward API) en la documentación de Kubernetes.

Configuración del entorno

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

Configuración del volumen

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
Nota

Si el despliegue de Kubernetes no tiene etiquetas, anotaciones o ambas, la API descendente correspondiente provocará un error cuando se despliegue la aplicación. En este caso, debe eliminar la entrada de API descendente que corresponde a metadata.labels, metadata.annotations o ambos.

Despliegue del agente Java de APM con el operador OpenTelemetry

A continuación se muestra información sobre cómo desplegar un agente Java de APM mediante el operador OpenTelemetry para inyectar y configurar automáticamente el agente Java de APM en los pods de aplicación Java que se ejecutan en clusters de Kubernetes (K8s).

Figura 3-2 Despliegue del agente Java de APM con el operador OpenTelemetry

Despliegue del agente Java de APM con el operador OpenTelemetry

Recomendación:

Utilice esta opción si no es posible actualizar la imagen de contenedor de Docker y prefiere realizar cambios en la configuración del agente Java de APM mediante el recurso personalizado (CR) de Kubernetes para inyectar automáticamente el agente de APM en las JVM al iniciar.

Consideraciones sobre Docker y Kubernetes:
  • Para el control de versiones de imágenes de Docker, evite utilizar la etiqueta :latest al desplegar contenedores en producción, ya que es más difícil realizar un seguimiento de qué versión de la imagen se está ejecutando y es más difícil realizar un rollback correctamente. En su lugar, especifique una etiqueta significativa, como v1.12.1.3.
  • Para Kubernetes, realice copias de seguridad de los recursos personalizados (CR) y las asignaciones de configuración de Kubernetes.

Requisito: instale el operador OpenTelemetry en el cluster de Kubernetes.

Hay tres opciones diferentes disponibles: Manifiesto de versión de operador, Gráfico de cabecera de operador o Hub de operador.

En la mayoría de los casos, se debe instalar un cert-manager. Si se utiliza la opción de gráfico de timón, hay una opción para generar un certificado autofirmado.

Para un inicio rápido, si es necesario instalar el gestor de certificados, ejecute el siguiente comando:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.2/cert-manager.yaml

Para instalar el operador OpenTelemetry, ejecute lo siguiente:

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

Desplegar el agente Java de APM

Para desplegar el agente Java de APM, siga estos pasos:

  1. Crear un recurso personalizado (CR) de Kubernetes.

    Para gestionar la instrumentación automática, se debe proporcionar al operador OpenTelemetry información sobre el agente Java de APM y su configuración mediante la definición de recurso personalizado (CRD).

    El operador utilizará este recurso personalizado para copiar el agente en el pod y agregarle la configuración necesaria.

    Para crear la CR, ejecute lo siguiente:
    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
    Donde:
    La CR creada se puede consultar ejecutando el siguiente comando:
    kubectl get otelinst -n opentelemetry-operator-system
    Todos los puntos finales y variables de entorno deben ser correctos para que la instrumentación automática funcione correctamente.
  2. Agregue la anotación de Kubernetes.

    El operador OpenTelemetry utiliza la anotación de Kubernetes para decidir qué pods se deben inyectar automáticamente con el agente Java de APM.

    La anotación se puede agregar a un espacio de nombres. En ese caso, se inyectarán todos los pods dentro de ese espacio de nombres. La anotación también se puede agregar a objetos PodSpec individuales, disponibles como parte de Deployment, Statefulset y otros recursos.

    Nota:
    instrumentation.opentelemetry.io/inject-java: "opentelemetry-operator-system/inst-apm-java"
    Para empezar a editar el espacio de nombres, haga lo siguiente:
    • Ejecute el comando:
      kubectl edit namespace <your-namespace-name>
    • Edite el espacio de nombres una vez abierto el editor. Por ejemplo, editor vi.
    • Agregue la anotación al espacio de nombres. Tenga en cuenta que la sangría es muy importante para que sea un archivo YAML válido.
    Por ejemplo:
    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 el pod de Kubernetes.

    Para reiniciar el pod donde desea inyectar automáticamente el agente Java de APM, ejecute lo siguiente:

    kubectl delete pod <your-pod-name> -n <your-namespace-name>
  4. Verifique el pod de Kubernetes.
    Para verificar que el pod se haya inyectado automáticamente con el agente Java de APM después de reiniciar, ejecute lo siguiente:
    kubectl get pod <your-pod-name> -n <your-namespace-name> -o yaml

Ahora puede ir al siguiente paso: Verificar despliegue de agente Java de APM.

Nota

Para obtener más información sobre cómo desplegar un agente Java de APM mediante el operador OpenTelemetry, consulte el blog: Despliegue automático de un agente Java de APM en entornos de Kubernetes mediante el operador OpenTelemetry

Despliegue del agente Java APM en un volumen montado

A continuación se muestra información sobre cómo desplegar un agente Java de APM en Oracle Container Engine for Kubernetes (OKE) mediante un volumen montado.

Figura 3-3 Despliegue del agente Java de APM en un volumen montado

Despliegue del agente Java de APM en un volumen montado
Recomendación:
  • Utilice esta opción cuando no sea posible realizar cambios en la imagen de contenedor de Docker y prefiera utilizar un volumen montado compartido cuando se necesiten cambios en el agente Java de APM.

    • Ejemplo 1: si necesita realizar cambios de configuración frecuentes en el agente de APM, la imagen de contenedor debe actualizarse, pero no es posible hacerlo.
    • Ejemplo 2: si el usuario que está desplegando el agente de APM no tiene el acceso o los permisos necesarios para reconstruir una imagen de contenedor.
  • Para el control de versiones de imágenes de docker, realice una copia de seguridad de los archivos binarios y de configuración.

Para desplegar el agente Java de APM en un volumen montado, siga estos pasos:

  1. Confirme que ha completado las tareas de requisitos del agente Java de APM.

    Anote el punto final de carga de datos y la clave de datos cuando se haya creado el dominio de APM.

  2. Cree un nuevo sistema de archivos que monte los pods.

    Al crear el sistema de archivos, es importante asegurarse de seleccionar el mismo compartimento de red virtual en la nube (VCN) que utiliza Kubernetes. Haga lo mismo para el compartimento de subred.

  3. Monte el sistema de archivos en los pods.

    Este paso requiere ediciones en los archivos yaml correspondientes.

    Cree PersistentVolume y las entidades relacionadas en Kubernetes mediante el siguiente archivo yaml. Tenga en cuenta los siguientes campos que necesita editar para su entorno: mntTargetId, server y 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 los cambios, ejecute kubectl apply -f <filename.yaml>

    A continuación, actualice el archivo yaml que gestiona los pods y agregue el montaje de volumen y volumen.

    Para que surta efecto, vuelva a crear los pods.

  4. Descargue el archivo de agente de Java APM.

    Descargue y copie el archivo en el volumen montado.

    Para obtener instrucciones de descarga, consulte Descarga del software del agente Java de APM.

    Después de descargarlo, cópielo en el volumen montado.

  5. Aprovisionamiento del agente Java de APM.

    Conéctese a uno de los contenedores para aprovisionar el agente Java de APM, busque el archivo jar apm-java-agent-installer y ejecute lo siguiente:

    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 obtener instrucciones de aprovisionamiento, consulte Aprovisionamiento del agente Java de APM.

  6. Despliegue del agente Java de APM.

    Despliegue el agente Java de APM proporcionando la ubicación oracle-apm-agent al microservicio en el archivo yaml.

    Agregue el argumento -javaagent y la ubicación del archivo jar del agente de APM al comando java de cada microservicio:

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

    Vuelva a crear los pods ejecutando: kubectl apply -f <filename.yaml>.

    Ahora puede ir al siguiente paso: Verificar despliegue de agente Java de APM.

Nota

Para obtener más información sobre cómo desplegar un agente Java de APM en un volumen montado, vea el vídeo: Kubernetes Spring Boot Instrumentation for Distributed Tracing o consulte el blog: Application Performance Monitoring: Instrument Java on Kubernetes for Monitoring and Diagnostics.