Distribuire l'agente Java APM
Al provisioning dell'agente Java APM riuscito, è possibile distribuire l'agente Java APM.
Per distribuire l'agente Java APM su qualsiasi applicazione Java, è necessario aggiungere il parametro -javaagent
allo script di avvio JVM. A seconda dell'ambiente Java, di un server applicazioni o di un microservizio, gli utenti possono disporre di script di avvio shell o batch o di un altro modo per eseguire la riga di comando Java.
Di seguito sono riportati alcuni esempi su come distribuire l'agente Java APM nelle seguenti applicazioni Java:
Oracle WebLogic Server
Di seguito sono riportate informazioni su come distribuire l'agente Java APM in Oracle WebLogic Server.
- Impostare una variabile per puntare alla directory di destinazione del server applicazioni. Questa è la directory in cui viene eseguito il provisioning dell'agente Java APM.
Impostare la variabile
$DOMAIN_HOME
in modo che punti alla directory del dominio di Oracle WebLogic Server e confermare che il provisioning dell'agente Java APM è stato eseguito nella stessa directory di destinazione prima di eseguire il passo successivo.Application server Informazioni variabili directory di destinazione Oracle WebLogic Server Impostare la variabile $DOMAIN_HOME
in modo che punti al dominio di Oracle WebLogic Server.export DOMAIN_HOME=<Oracle WebLogic Server Domain>
- Eseguire una copia di backup del file
startWebLogic.sh
:cd $DOMAIN_HOME/bin cp startWebLogic.sh startWebLogic.sh.orig
- Utilizzare un editor di testo, modificare lo script
startWebLogic.sh
originale e aggiungere l'opzione-javaagent
.- Se si sta distribuendo l'agente Java APM su Oracle WebLogic Administration Server e sui server gestiti, aggiungere la seguente opzione
-javaagent
al set diJAVA_OPTIONS
, dopo la chiamatasetDomainEnv.sh
:JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:$DOMAIN_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
- Se si sta distribuendo l'agente Java APM solo sui server gestiti, aggiungere la seguente opzione
-javaagent
al set diJAVA_OPTIONS
in un'istruzioneif
dopo la chiamatasetDomainEnv.sh
:if [ "$SERVER_NAME" != "AdminServer" ] ; then set JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:$DOMAIN_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar" fi
- Se si sta distribuendo l'agente Java APM su Oracle WebLogic Administration Server e sui server gestiti, aggiungere la seguente opzione
- Arrestare e riavviare Oracle WebLogic Server:
cd $DOMAIN_HOME/bin ./stopWebLogic.sh cd .. nohup ./startWebLogic.sh >& startup.log &
Se si dispone di server gestiti, arrestarli e riavviarli:
cd $DOMAIN_HOME/bin ./stopManagedWebLogic.sh {SERVER_NAME} {ADMIN_URL} {USER_NAME} {PASSWORD} nohup ./startManagedWebLogic.sh {SERVER_NAME} {ADMIN_URL} >& {SERVER_NAME}.log &
Nota
Si noti che viene utilizzata la versione$DOMAIN_HOME
distartWebLogic.sh
, anche se è stata modificata la versione$DOMAIN_HOME/bin
. Il richiamo del comando da un livello superiore (da$DOMAIN_HOME
) richiama il comando da un livello inferiore (da$DOMAIN_HOME/bin
). Tuttavia, il comandostopWebLogic.sh
verrà richiamato dalla directory$DOMAIN_HOME/bin
.
Dopo la distribuzione riuscita dell'agente Java APM, il messaggio Oracle APM Agent: Initialized AgentInstance
viene visualizzato nel log di avvio del server.
Server Apache Tomcat
Di seguito sono riportate informazioni su come distribuire l'agente Java APM sul server Apache Tomcat.
- Impostare una variabile per puntare alla directory di destinazione del server applicazioni. Questa è la directory in cui viene eseguito il provisioning dell'agente Java APM.
Impostare la variabile
$CATALINA_HOME
in modo che punti alla directory di destinazione del server Apache Tomcat e confermare che il provisioning dell'agente Java APM è stato eseguito nella stessa directory di destinazione prima di eseguire il passo successivo.Application server Informazioni variabili directory di destinazione Server Apache Tomcat Impostare la variabile $CATALINA_HOME
in modo che punti alla directory di destinazione del server Apache Tomcat.- Se si utilizza una shell Bash:
export CATALINA_HOME=<Apache Tomcat Server destination directory>
- Se si utilizza una shell C:
setenv CATALINA_HOME "<Apache Tomcat Server destination directory>"
- Se si utilizza una shell Bash:
- Eseguire una copia di backup del file
catalina.sh
.$ cd $CATALINA_HOME/bin $ cp catalina.sh catalina.sh.orig
- Utilizzare un editor di testo e modificare il file
catalina.sh
originale e aggiungere l'opzione-javaagent
seguente aCATALINA_OPTS
. Apportare la modifica al di fuori delle istruzioniif
o dei blocchi di codice che potrebbero non essere eseguiti durante l'avvio del server. In questo modo, il flag-javaagent
verrà sempre aggiunto alle opzioni di avvio del server.CATALINA_OPTS="${CATALINA_OPTS} -javaagent:$CATALINA_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
- Arrestare e riavviare il server Apache Tomcat:
$ cd $CATALINA_HOME/bin $ ./shutdown.sh $ ./startup.sh
Dopo la distribuzione riuscita dell'agente Java APM, il messaggio Oracle APM Agent: Initialized AgentInstance
viene visualizzato nel log di avvio del server.
Per ulteriori informazioni, vedere Installazione di un agente Java APM in un'esercitazione su Tomcat Application Server.
Server Jetty
Di seguito sono riportate informazioni su come distribuire l'agente Java APM nel Jetty Server.
- Impostare una variabile per puntare alla directory di destinazione del server applicazioni. Questa è la directory in cui viene eseguito il provisioning dell'agente Java APM.
Impostare la variabile
JETTY_HOME
in modo che punti alla directory di destinazione di Jetty Server (dove è stato estratto il software Jetty) e confermare che è stato eseguito il provisioning dell'agente Java APM nella stessa directory di destinazione prima di eseguire il passo successivo. - Avviare il server Jetty.
java -javaagent:/<Destination_Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar $JETTY_HOME/start.jar
Dopo la distribuzione riuscita dell'agente Java APM, il messaggio Oracle APM Agent: Initialized AgentInstance
viene visualizzato nel log di avvio del server.
Spring Boot
Di seguito sono riportate informazioni su come distribuire un agente APM Java in un microservizio Spring Boot con Apache Tomcat incorporato.
application.properties
dell'applicazione Spring Boot per abilitare i bean Apache Tomcat:spring.jmx.enabled=true
server.tomcat.mbeanregistry.enabled=true
In alternativa, aggiungere le proprietà spring.jmx.enabled
e server.tomcat.mbeanregistry.enabled
come proprietà di sistema nella riga di comando.
-javaagent
allo script di avvio del microservizio. Si noti che <Destination Directory>
indica la directory in cui è stato eseguito il provisioning dell'agente.java -javaagent:<Destination Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar target/<microservice.jar>
Dopo la distribuzione riuscita dell'agente Java APM, il messaggio Oracle APM Agent: Initialized AgentInstance
viene visualizzato nel log di avvio del microservizio.
Server JBoss
Di seguito sono riportate informazioni su come distribuire l'agente Java APM sul server JBoss.
Le seguenti istruzioni sono applicabili per JBoss EAP e Wildfly.
- Impostare una variabile per puntare alla directory di destinazione del server applicazioni. Questa è la directory in cui viene eseguito il provisioning dell'agente Java APM.
Impostare la variabile
$JBOSS_HOME
in modo che punti alla directory di destinazione del server JBoss e confermare che il provisioning dell'agente Java APM è stato eseguito nella stessa directory di destinazione prima di eseguire il passo successivo.Application server Informazioni variabili directory di destinazione Server JBoss Impostare la variabile
$JBOSS_HOME
in modo che punti alla directory di destinazione del server JBoss.- Se si utilizza una shell Bash:
export JBOSS_HOME=<JBoss Server destination directory>
- Se si utilizza una shell C:
setenv JBOSS_HOME "<JBoss Server destination directory>"
- Se si utilizza una shell Bash:
- Eseguire una copia di backup del file
standalone.conf
:cd $JBOSS_HOME/bin cp standalone.conf standalone.conf.orig
- Utilizzare un editor di testo e modificare il file
standalone.conf
originale e aggiungere le seguenti opzioni Java aJAVA_OPTS
. Apportare la modifica al di fuori delle istruzioniif
o dei blocchi di codice che potrebbero non essere eseguiti durante l'avvio del server.- Aggiungere l'opzione
-javaagent
aJAVA_OPTS
.JAVA_OPTS="$JAVA_OPTS -javaagent:$JBOSS_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"
- Modificare la proprietà Java
jboss.modules.system.pkgs
per includere"com.oracle.apm"
.Ad esempio:
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager,com.oracle.apm"
Nota
Ogni ambiente è diverso. La proprietà del server Jboss può includere pacchetti diversi da quelli mostrati nell'esempio precedente.
- Aggiungere l'opzione
- Arrestare e riavviare il server JBoss:
cd $JBOSS_HOME/bin ./jboss-cli.sh -c :shutdown nohup ./standalone.sh -b 0.0.0.0&> startup.log &
Dopo la distribuzione riuscita dell'agente Java APM, il messaggio Oracle APM Agent: Initialized AgentInstance
viene visualizzato nel log di avvio del server.
Docker e Kubernetes
Ecco le informazioni su come distribuire un agente Java APM in un container Docker e Oracle Container Engine for Kubernetes (OKE).
Distribuisci agente Java APM nell'immagine contenitore Docker
Di seguito sono riportate informazioni su come distribuire un agente Java APM in un'immagine container Docker e in Oracle Container Engine for Kubernetes (OKE).
Figura 3-1 Distribuisci agente Java APM nell'immagine del contenitore Docker

Raccomandazione:
Utilizzare questa opzione quando è possibile apportare modifiche all'immagine del contenitore Docker.
Ad esempio, se potrebbe essere necessario modificare la configurazione dell'agente APM, è possibile apportare modifiche all'immagine Docker.
Per distribuire l'agente Java APM, effettuare le operazioni riportate di seguito.
- Prima di continuare, confermare di aver completato i prerequisiti e di aver effettuato il provisioning dell'agente Java APM.
Nota
Quando si esegue il provisioning dell'agente Java APM, si consiglia di eseguirne il provisioning in qualsiasi posizione del computer locale e di copiarlo in un'immagine Docker. - Modificare
Dockerfile
per copiare l'agente Java APM in un'immagine Docker:COPY <DESTINATION_DIRECTORY>/oracle-apm-agent <Docker_Image_Directory>/oracle-apm-agent/
Si noti che
<DESTINATION_DIRECTORY>
indica la posizione sul computer locale in cui è stato eseguito il provisioning dell'agente Java APM e<Docker_Image_Directory>
indica la directory nell'immagine Docker in cui si sta copiando l'agente Java APM.<Docker_Image_Directory>
potrebbe anche essere la directory di destinazione del server applicazioni in Docker, ad esempio$DOMAIN_HOME
, se si utilizza Oracle WebLogic Server. - Aggiungere la seguente opzione
-javaagent
allo script di avvio del server applicazioni:java -javaagent:<Docker_Image_Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar target/<appserver.jar>
- Crea una nuova immagine Docker con l'agente Java APM integrato e lo script di avvio modificato, quindi esegui il PUSH dell'immagine nel registro.
Se utilizzi Kubernetes per gestire i container Docker, aggiorna la configurazione Kubernetes in modo che utilizzi la nuova immagine Docker e riavvia il pod Kubernetes.
Inoltre, puoi impostare dimensioni aggiuntive da segnalare dal pod Kubernetes utilizzando l'API verso il basso, copiando le seguenti impostazioni di ambiente e volume nella specifica di distribuzione (file yaml
) del pod Kubernetes. Per informazioni sull'API verso il basso, consulta la sezione relativa all'API verso il basso nella documentazione di Kubernetes.
Impostazioni di 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
Impostazioni 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
Se la distribuzione Kubernetes non dispone di etichette, annotazioni o entrambi, l'API verso il basso genererà un errore durante la distribuzione dell'applicazione. In questo caso, è necessario rimuovere la voce API verso il basso corrispondente a metadata.labels
, metadata.annotations
o entrambi.
Distribuisci agente Java APM mediante l'operatore OpenTelemetry
Di seguito sono riportate informazioni su come distribuire un agente Java APM utilizzando l'operatore OpenTelemetry per inserire e configurare automaticamente l'agente Java APM nei pod dell'applicazione Java in esecuzione sui cluster Kubernetes (K8s).
Figura 3-2 Distribuire l'agente Java APM utilizzando l'operatore OpenTelemetry

Raccomandazione:
Utilizzare questa opzione se non è possibile aggiornare l'immagine del contenitore Docker e si preferisce apportare modifiche alla configurazione dell'agente Java APM utilizzando la risorsa personalizzata (CR) Kubernetes per inserire automaticamente l'agente APM nelle JVM all'avvio.
- Per il controllo delle versioni delle immagini Docker, evitare di utilizzare la tag
:latest
durante la distribuzione dei container in produzione poiché è più difficile tenere traccia della versione dell'immagine in esecuzione e risulta più difficile eseguire il rollback corretto. Specificare invece un tag significativo, ad esempiov1.12.1.3
. -
Per Kubernetes, esegui i backup delle risorse (CR) e delle configurazioni personalizzate Kubernetes.
Prerequisito: installare l'operatore OpenTelemetry nel cluster Kubernetes.
Sono disponibili tre diverse opzioni: File manifesto di rilascio dell'operatore, Grafico helm dell'operatore o Hub dell'operatore.
Nella maggior parte dei casi, è necessario installare cert-manager. Se si utilizza l'opzione del grafico helm, è possibile generare un certificato con firma automatica.
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.2/cert-manager.yaml
Per installare l'operatore OpenTelemetry, eseguire le operazioni riportate di seguito.
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
Distribuire l'agente Java APM
Per distribuire l'agente Java APM, effettuare le operazioni riportate di seguito.
- Crea una risorsa personalizzata (CR) Kubernetes.
Per gestire la strumentazione automatica, all'operatore OpenTelemetry devono essere fornite informazioni sull'agente Java APM e sulla relativa configurazione che vengono eseguite utilizzando la definizione di risorse personalizzate (CRD).
Questa risorsa personalizzata verrà utilizzata dall'operatore per copiare l'agente nel pod e aggiungervi la configurazione richiesta.
Per creare il CR, eseguire le operazioni riportate di seguito.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
dove:- <data-upload-endpoint> è l'URL dell'endpoint di caricamento dati generato quando viene creato il dominio APM. Per informazioni, vedere Ottenere endpoint di caricamento dati e chiavi dati.
- <private-data-key> è la chiave dati privata di installazione dell'agente Java APM generata quando viene creato il dominio APM. Per informazioni, vedere Ottenere endpoint di caricamento dati e chiavi dati.
È possibile eseguire la query sulla CR creata eseguendo il seguente comando:
Tutti gli endpoint e le variabili di ambiente devono essere corretti affinché la strumentazione automatica funzioni correttamente.kubectl get otelinst -n opentelemetry-operator-system
- Aggiungere l'annotazione Kubernetes.
L'operatore OpenTelemetry utilizza l'annotazione Kubernetes per decidere quali pod devono essere inseriti automaticamente con l'agente Java APM.
L'annotazione può essere aggiunta a uno spazio di nomi. In tal caso, tutti i pod all'interno di tale spazio di nomi verranno iniettati. L'annotazione può essere aggiunta anche a singoli oggetti PodSpec, disponibili come parte di Distribuzione, Statefulset e altre risorse.
Annotazione:instrumentation.opentelemetry.io/inject-java: "opentelemetry-operator-system/inst-apm-java"
Per iniziare a modificare lo spazio di nomi, effettuare le operazioni riportate di seguito.- Eseguire il comando:
kubectl edit namespace <your-namespace-name>
- Modificare lo spazio di nomi una volta aperto l'editor. ad esempio, l'editor
vi
. - Aggiungere l'annotazione allo spazio di nomi. Tenere presente che il rientro è molto importante per renderlo un file YAML valido.
Ad esempio: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:
- Eseguire il comando:
- Riavviare il pod Kubernetes.
Per riavviare il pod in cui si desidera inserire automaticamente l'agente Java APM, eseguire le operazioni riportate di seguito.
kubectl delete pod <your-pod-name> -n <your-namespace-name>
- Verificare il pod Kubernetes.
Per verificare che il pod sia stato inserito automaticamente con l'agente Java APM dopo il riavvio, eseguire le operazioni riportate di seguito.
kubectl get pod <your-pod-name> -n <your-namespace-name> -o yaml
È ora possibile passare al passo successivo: Verifica distribuzione agente Java APM.
Per ulteriori informazioni su come distribuire un agente Java APM utilizzando OpenTelemetry Operator, consultare il blog: Distribuire automaticamente un agente Java APM negli ambienti Kubernetes utilizzando l'operatore OpenTelemetry
Distribuisci agente Java APM su un volume attivato
Di seguito sono riportate informazioni su come distribuire un agente Java APM in Oracle Container Engine for Kubernetes (OKE) utilizzando un volume attivato.
Figura 3-3 Distribuisci agente Java APM su un volume attivato

-
Utilizzare questa opzione quando non è possibile apportare modifiche all'immagine del contenitore Docker e si preferisce utilizzare un volume con MOUNT condiviso quando sono necessarie modifiche all'agente Java APM.
- Esempio 1: se è necessario apportare modifiche frequenti alla configurazione dell'agente APM, l'immagine del contenitore deve essere aggiornata, ma non è possibile eseguirla.
- Esempio 2: se l'utente che sta distribuendo l'agente APM non dispone dell'accesso o delle autorizzazioni necessarie per ricreare un'immagine contenitore.
-
Per il controllo delle versioni dell'immagine docker, eseguire il backup dei file binari e di configurazione.
Per distribuire l'agente Java APM su un volume di cui è stato eseguito il MOUNT, attenersi alla procedura riportata di seguito.
- Confermare di aver completato i task dei prerequisiti dell'agente Java APM.
Prendere nota dell'endpoint e della chiave dati di caricamento dati al momento della creazione del dominio APM.
- Crea un nuovo file system che monterà i pod.
Quando si crea il file system, è importante assicurarsi di selezionare lo stesso compartimento VCN (Virtual Cloud Network) utilizzato da Kubernetes. Eseguire le stesse operazioni per il compartimento della subnet.
- Installa il file system nei pod.
Questo passaggio richiede modifiche ai file yaml corrispondenti.
Creare il file
PersistentVolume
e le entità correlate in Kubernetes utilizzando il file yaml riportato di seguito. Tenere presenti i seguenti campi da modificare per l'ambiente in uso:mntTargetId
,server
epath
.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
Per applicare le modifiche, eseguire
kubectl apply -f <filename.yaml>
Quindi, aggiornare il file yaml che gestisce i pod e aggiungere il volume e il MOUNT del volume.
Per avere effetto, ricreare i pod.
- Scaricare il file dell'agente Java APM.
Scaricare e copiare il file nel volume di cui è stato eseguito il MOUNT.
Per istruzioni sul download, vedere Scaricare il software APM Java Agent.
Dopo il download, copiarlo nel volume installato.
- Eseguire il provisioning dell'agente Java APM.
Eseguire il login a uno dei contenitori per eseguire il provisioning dell'agente Java APM, individuare il file jar apm-java-agent-installer ed eseguire le operazioni riportate di seguito.
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>
Per istruzioni sul provisioning, vedere Eseguire il provisioning dell'agente Java APM.
- Distribuire l'agente Java APM.
Distribuire l'agente Java APM fornendo la posizione oracle-apm-agent al microservizio nel file yaml.
Aggiungere l'argomento
-javaagent
e la posizione del file jar dell'agente APM al comando java di ogni microservizio:java -javaagent:<Mounted Volume>/oracle-apm-agent/bootstrap/ApmAgent.jar
- Riavviare Kubernetes.
Ricreare i pod eseguendo:
kubectl apply -f <filename.yaml>
.È ora possibile passare al passo successivo: Verifica distribuzione agente Java APM.
Per ulteriori informazioni su come distribuire un agente Java APM su un volume montato, guarda il video: Strumentazione di avvio di primavera di Kubernetes per il trace distribuito o consulta il blog: Application Performance Monitoring: Instrument Java on Kubernetes for Monitoring and Diagnostics.