Modifica impostazioni non operative
È possibile modificare o disabilitare le impostazioni predefinite della sonda oppure abilitare una sonda personalizzata per monitorare le classi aggiuntive.
In questo argomento vengono descritte le attività di indagine riportate di seguito.
Modifica o disattiva impostazioni non operative predefinite
È possibile modificare o disabilitare le impostazioni probe predefinite utilizzando il file ProbeConfig.acml
.
Dopo aver eseguito il provisioning di un agente Java APM, il file ProbeConfig.acml
è disponibile nella directory oracle-apm-agent/config
. Per informazioni su come accedere al file ProbeConfig.acml
, vedere Eseguire il provisioning dell'agente Java APM.
Il file ProbeConfig.acml
consente di effettuare le operazioni riportate di seguito.
- Attiva o disattiva sonde particolari.
- Disabilita il monitoraggio di pattern specifici di trace/span in base a informazioni quali URL, estensione file e così via.
- Abilita l'acquisizione di tag/dimensioni aggiuntive. Ad esempio, l'acquisizione di intestazioni e parametri specifici per la sonda SERVLET.
- Manipolare il nome dell'intervallo. Ad esempio, manipolazione dell'URL per le sonde SERVLET o HTTP_CLIENT.
- Acquisisci istruzioni query SQL DB con più di 1.000 caratteri di lunghezza come log intervallo.
Per abilitare o disabilitare il log delle intere istruzioni query SQL nel log dell'intervallo JDBC, utilizzare il parametro
enable_complete_sql_span_log_jdbc
. Questa funzione è utile quando una query SQL lunga viene troncata a 1.000 caratteri. Ad esempio, utilizzareenable_complete_sql_span_log_jdbc: true
per abilitarlo. - Acquisisci il nome utente connesso.
I nomi utente hash vengono acquisiti per le sessioni autenticate con l'intenzione di consentire la generazione di report sul numero di utenti univoci, senza esporre le informazioni di identificazione personale (PII). Tuttavia, potrebbe essere necessario segnalare il nome utente in formato testo normale. In tal caso, andare alla sezione generale e impostare
track_plain_username: true
. - Acquisisce i payload.
Il payload include il contenuto sia della richiesta HTTP che della risposta.
È possibile tenere traccia del flusso completo delle richieste dell'applicazione e inviare i dati raccolti a Trace Explorer per l'analisi abilitando il payload.
Il supporto per l'acquisizione del payload include Servlet, JAX-RS Server, OSB Proxy Service e OSB Business Service.
A partire dall'agente Java APM versione 1.16, sono supportati anche i client Apache Http (4.x e 5.x), il client JDK 11+ Http, il client Http SDK OCI (2.x e 3.x), il client Web Spring 5.x e i client OkHttp 2.x e 3.x.
Abilita payload: per abilitare i payload di richiesta e risposta HTTP, impostare i parametri
capture_request_payload
ecapture_response_payload
nel fileProbeConfig.acml
.- Per acquisire un subset del payload, è possibile applicare le espressioni xpath/jsonpath/regex in base al nome dell'operazione.
- Dopo averlo abilitato, i payload acquisiti sono disponibili come dimensioni, rispettivamente
RequestPayload
eResponsePayload
. La lunghezza massima predefinita è di 1000 caratteri. - È possibile acquisire più dimensioni dallo stesso payload specificando tag_name insieme all'espressione.
- Modificare la modellazione delle chiamate asincrone HttpClient.
A partire dall'agente Java APM versione 1.16, un singolo intervallo rappresenta la richiesta in uscita, il tempo di attesa e il callback.
Per mantenere il comportamento precedente rispetto alle versioni precedenti dell'agente (un intervallo per la chiamata in uscita e un secondo per il callback), modificare il parametrohttpclient_async_one_span
nella sezione HTTP_CLIENT del fileProbeConfig.acml
e impostarlo sufalse
.#Enables capturing async client invocations as a single span. No separate callback spans will be reported httpclient_async_one_span: false
Il funzionamento predefinito delle impostazioni di probe può essere aggiornato utilizzando il file ProbeConfig.acml
dell'agente Java APM.
Per apportare modifiche alle impostazioni di controllo predefinite, seguire le istruzioni disponibili nel file ProbeConfig.acml
.
È possibile apportare modifiche al file ProbeConfig.acml
quando il server applicazioni è in esecuzione e non è necessario riavviare il server applicazioni per rendere effettive le modifiche.
A partire dall'agente Java APM versione 1.12, è disponibile un'operazione migliorata e semplificata di convenzione di denominazione per le sonde Servlet, HttpClient e OSB. Pertanto, la regola replace_all_patterns
per la rimozione di ID esadecimale e numeri non viene più inclusa per impostazione predefinita nel file ProbeConfig.acml
. Questo vale per le sezioni SERVLET, HTTP_CLIENT e OSB.
# Hex ID and numbers
-
pattern: "([a-fA-F\._\:-]*[0-9]+){2,}[a-fA-F_\:-]*([/\.])?"
replacement: "*$2"
Configurare un'indagine personalizzata
È possibile configurare un'indagine personalizzata per monitorare classi aggiuntive e ottenere dettagli specifici dell'applicazione.
La sonda personalizzata è utile se il set di sonde incorporato disponibile nel file ProbeConfig.acml
non soddisfa i requisiti di monitoraggio. Ad esempio, se si desidera monitorare un thread in background non monitorato utilizzando le sonde predefinite, è possibile configurare un'indagine personalizzata per monitorarlo.
Per configurare una sonda personalizzata, procedere come segue.
- Configurare un file
DirectivesConfig.acml
per specificare qualiclasses
,methods
oannotations
devono essere monitorati. Per maggiori informazioni, vedere DirectivesConfig.acml File Configuration. - Aggiungere il file
DirectivesConfig.acml
alla directoryoracle-apm-agent/config
.Ora non è più valido specificare il fileRimuovere l'argomento precedente dallo script di avvio dell'applicazione se il fileDirectivesConfig.acml
utilizzando quanto segue nello script di avvio del server applicazioni:-Dcom.oracle.apm.agent.customDirectivesFile=<Path_to_DirectivesConfig.acml_file>
DirectivesConfig.acml
è stato specificato in precedenza in questo modo. - Riavviare l'Application Server se viene specificato un nuovo file
DirectivesConfig.acml
.Le modifiche apportate al file
DirectivesConfig.acml
diventano effettive dopo il riavvio dell'Application Server.Il riavvio dell'Application Server è necessario quando si specifica un nuovo file
DirectivesConfig.acml
o si elimina il file.Il riavvio dell'Application Server non è necessario se si esegue una delle operazioni riportate di seguito.- Modificare
span_name
. - Aggiungere, modificare o eliminare
tags
,logs
o Variabili avanzate in un fileDirectivesConfig.acml
esistente già attivo.
- Modificare
Configurazione file DirectivesConfig.acml
Per configurare il file DirectivesConfig.acml
, vedere:
Parametri DirectivesConfig.acml
Di seguito sono riportate informazioni sui parametri che è possibile specificare nel file DirectivesConfig.acml
.
Nel file DirectivesConfig.acml
è necessario specificare almeno uno dei seguenti parametri:
class_name
class_name_regex
class_annotation
method_annotation
class_annotation_regex
method_annotation_regex
Parametro | descrizione; | Esempio |
---|---|---|
label |
Un'etichetta univoca per la direttiva. Questo è un parametro obbligatorio. |
|
class_name |
Il nome della classe da monitorare. È necessario specificare il nome completo della classe, incluso il pacchetto. |
|
class_name_regex |
Pattern di espressione regolare (regex) per monitorare qualsiasi classe corrispondente. Per il modello regex, invece di utilizzare "." per il pacchetto, utilizzare "/". Ad esempio, se si desidera monitorare una classe denominata Se vengono specificati sia |
|
method_name |
Il nome del metodo da monitorare. Non sono inclusi i parametri del metodo. Se |
|
method_name_regex |
Pattern regex per monitorare qualsiasi metodo corrispondente. Se Se vengono specificati sia |
|
class_annotation |
Il nome completo della classe dell'annotazione che si desidera monitorare. Qualsiasi |
|
method_annotation |
Il nome completo della classe dell'annotazione che si desidera monitorare. Qualsiasi |
|
class_annotation_regex |
Pattern regex per monitorare qualsiasi annotazione di classe corrispondente. Per il modello regex, invece di utilizzare "." per il pacchetto, utilizzare "/". Inoltre, il valore deve iniziare con "L" e terminare con ";". Ad esempio, se si desidera monitorare un'annotazione denominata Se vengono specificati sia |
|
method_annotation_regex |
Pattern regex per monitorare qualsiasi annotazione del metodo corrispondente. Per il modello regex, invece di utilizzare "." per il pacchetto, utilizzare "/". Inoltre, il valore deve iniziare con "L" e terminare con ";". Ad esempio, se si desidera monitorare un'annotazione denominata Se vengono specificati sia |
|
include_sub_classes |
Specificare se le sottoclassi della classe di destinazione devono essere monitorate. L'impostazione predefinita è |
|
span_name |
Nome dell'intervallo creato durante il monitoraggio. Se Si noti che è possibile specificare un nome per l'intervallo, come mostrato sotto l'etichetta Quando si specifica il parametro |
|
tags |
Tag (nomi e valori) da includere nell'intervallo. Come nel caso del parametro Si noti che il valore Per i valori tag è possibile specificare un tipo facoltativo. È possibile specificare il valore del tag di tipo String, Boolean, Integer, Long, Float o Double utilizzando la sintassi e la parola chiave appropriate (come mostrato nell'esempio). Il tipo di valore di tag predefinito sarà String. Verrà utilizzato se non viene specificato alcun tipo o tipo non compatibile. Se viene specificato un tipo non compatibile per un valore di tag, il tipo verrà ripristinato sul valore predefinito String e verrà visualizzato un messaggio di log sull'incompatibilità. Il valore della dimensione intervallo può essere confermato tramite query con aggregazioni che utilizzano valori numerici (se applicabile) in Trace Explorer. |
|
logs |
I log (nomi e valori) che si desidera includere nell'intervallo. Come nel caso dei parametri Si noti che il valore |
|
span_name, tag e log Variabili
Quando si specificano i parametri span_name
, tags
e logs
, è possibile utilizzare le seguenti variabili per acquisire ulteriori informazioni:
class_name
: nome della classe monitorata, incluso il pacchetto.short_class_name
: nome della classe monitorata, escluso il pacchetto.method_name
: nome del metodo monitorato.method_descriptor
: formato descrittore della firma del metodo monitorata.param#
: parametri del metodo monitorato, in cuiparam1
indica il primo parametro,param2
il secondo parametro e così via.this
: oggetto monitorato. Tenere presente che se la variabilemethod
monitorata èstatic
, la variabilethis
non sarà disponibile.return
: restituisce il valore del metodo monitorato.Nota
La variabilereturn
può essere utilizzata solo per il parametrotags
e non perspan_name
.
DirectivesConfig.acml Esempio
Di seguito è riportato un esempio del file DirectivesConfig.acml
.
Test:
class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
method_name: "performHttpURLConnectionCall"
include_sub_classes: true
span_name: "${short_class_name}.${method_name}"
tags:
targetURL: "${param2}"
port: "${param1}"
In base all'esempio precedente:
- Verrà monitorato
com.oracle.apm.samples.servlet.OutboundTestServlet.performHttpURLConnectionCall
insieme alle relative sottoclassi. - Il nome dell'intervallo visualizzato in Trace Explorer sarà
OutboundTestServlet.performHttpURLConnectionCall
. - Le tag
targetURL
eport
verranno aggiunte all'intervallo e utilizzeranno i valori del primo e del secondo parametro del metodoperformHttpURLConnectionCall
.
Di seguito sono riportati un esempio di pagina non operativa personalizzata.
Variabili avanzate per prova personalizzata
Quando si utilizza una sonda personalizzata, è possibile configurare la sintassi dei comandi avanzati per creare dinamicamente le variabili utilizzando il concatenamento dei metodi e la manipolazione delle stringhe tramite espressioni regolari. È possibile fare riferimento a queste variabili avanzate nelle sezioni span_name
, tags
e logs
, proprio come le altre variabili sopra menzionate.
- Rivedere come configurare la sonda personalizzata. Vedere Configure a Custom Probe.
- Controllare la sintassi della catena di comandi. Vedere Sintassi della catena di comandi.
- Rivedere gli esempi. Vedere Esempi di variabili avanzate.
Sintassi della catena di comandi
Il simbolo di pipe "|" viene utilizzato per indicare la tubazione dell'oggetto iniziale al primo comando di catena e l'oggetto di uscita di tubazione di un comando di catena al successivo.
Tempo di esecuzione
Le catene di comandi vengono eseguite prima o dopo che viene richiamato il metodo monitorato della sonda personalizzata. Ciò è specificato dal tempo di esecuzione, che viene visualizzato prima dell'indice di disponibilità.
<execution time> ::= [before || after]
Non tutte le catene di comandi sono compatibili con entrambi i tempi di esecuzione: quando return
viene utilizzato come SOI o come parametro in un comando di metodo, è necessario utilizzare il tempo di esecuzione successivo. Questo perché l'oggetto restituito è disponibile solo dopo il richiamo del metodo monitorato. Quando altre variabili vengono utilizzate come SOI o parametri nei comandi del metodo, i tempi di esecuzione dipendono dalle catene di riferimento.
Ad esempio, definire chain1
e chain2
, dove chain2
utilizza chain1
come SOI o parametro per un comando di metodo. Si noti che chain1
deve essere definito prima di chain2
se entrambe le catene utilizzano lo stesso tempo di esecuzione. In caso contrario, chain1
deve avere un tempo di esecuzione precedente e chain2
deve avere un tempo di esecuzione successivo.
Per ulteriori informazioni sull'uso delle interfacce SOI e dei comandi del metodo, vedere la sezione Identificativo oggetto iniziale riportata di seguito.
Identificativo oggetto iniziale
Un SOA (Start Object Identifier) può essere un oggetto associato a:
-
Parole chiave predefinite:
this
,return
eparam#
. -
Produzione di una catena identificata dalla sua chiave.
I tempi di esecuzione possono essere associati alla sintassi SOI.
SOI | descrizione; | Tempo di esecuzione possibile | Sintassi | Esempio |
---|---|---|---|---|
ThisSOI | La catena viene eseguita sull'oggetto specificato da class_name nel file DirectivesConfig.acml.
|
before o after |
<this SOI> ::= [before || after] this |
thisSOIchain: before this | method (public getAddress ()) |
ParamSOI | La catena viene eseguita sull'oggetto specificato da param# nel file DirectivesConfig.acml.
Questi sono i parametri del metodo monitorato. |
before or after |
<param_SOI> ::= [before || after] param# |
paramSOIchain: before param1 | method (public getAddress ())
|
ReturnSOI | La catena viene eseguita sull'oggetto specificato da return nel file DirectivesConfig.acml.
Questo è il valore restituito del metodo monitorato. |
after |
<return_SOI> ::= [after] return |
returnSOIchain: after return | method (public getAddress ()) |
StaticSOI | La catena non viene avviata con alcun oggetto. | before or after |
<static SOI> ::= [before || after] static |
staticSOIchain: before static | static method((com.test.beans.Employee)(public getLevel())) |
VariableSOI | La catena viene eseguita sull'oggetto specificato da una delle variabili sopra definite nel file DirectivesConfig.acml. | before or after |
<variable_SOI> ::= [before || after] variable-key |
var1: this | method (public setNewAddress (string "Variable Street", string "Redwood City", string "California", int 94065, string "US"))
|
Sequenza di comandi catena
Una sequenza di comandi catena è costituita da uno o più comandi catena.
Sintassi: <chain_command_sequence> ::= <chain_command> || <chain_command> | <chain_command_sequence>
Tipi di comando catena
Sintassi: <chain_command> ::= <method_command> || <field_command> || <regex_command>
Comando metodo
Un comando di metodo viene utilizzato per richiamare un metodo. L'output di un comando di metodo è l'oggetto restituito di quel metodo specifico.
Un comando metodo è costituito da visibilità del metodo, nome del metodo e sequenza dei parametri. Questo imita la firma del metodo.
La sintassi dovrebbe essere la seguente:
<method_command> ::= method(<visibility> <java_identifier> (<parameter_sequence>))
<visibility> ::= private || public || protected || package
Il valore package
viene utilizzato per specificare un metodo o un campo di visibilità pacchetto-privato (senza modificatore).
<scalar_parameter_type> ::= int || double || float || String
<parameter> ::=<scalar_parameter_type> value || this || return || param<index> || variable-key
<parameter_sequence> ::= <parameter> || <parameter> , <parameter_sequence>
Esempi di comandi del metodo
-
Questa catena mostra
this
come oggetto utente. Questa catena richiama il metodogetAddress
pubblico nella classe Utente. L'output di questa catena sarà la rappresentazione stringa dell'indirizzo di questo utente.addresschain: this | method (public getAddress ())
-
Questa catena richiama il metodo
public setName
sull'utente e imposta il nome su "Mario Rossi". Poiché questo metodo set non ha alcun valore restituito, l'output di questa catena sarà nullo. Questa catena illustra come utilizzare i parametri scalari nei comandi del metodo.testSetupVar: this | method(public setName(String "John", String "Smith"))
-
Questa catena utilizza
param1
(il primo parametro del metodo monitorato) come parametro per il metodo che si sta richiamando.testParamAsParam: this | method(public incUserId(param1))
-
Questa catena utilizza un'altra variabile, in questo caso
testParamAsParam
, come parametro per il metodo.testVarAsParam: this | method(public incUserId(testParamAsParam))
-
Questa catena richiama esplicitamente il metodo Super.
invokeUsingSuper: this | method(private super.overloadPrivate(String "string3", int 2222))
Comando campo
Un comando di campo viene utilizzato per ispezionare i valori dei campi. L'output di un comando di campo è l'oggetto in quel campo specifico.
Un comando metodo è costituito da visibilità campo e nome campo.
Sintassi: <field_command> ::= field (<visibility> <java_identifier>)
Esempi di comandi di campo
this
sia un oggetto utente. Qui stiamo accedendo a campi di varia visibilità nella classe Utente. L'output di ogni catena è il valore del rispettivo campo.
fieldPublic: this | field(public firstName)
fieldProtected: this | field (protected lastName)
fieldPackagePrivate: this | field (package middleName)
fieldPrivate: this | field (private maidenName)
Comando del metodo statico
Un comando di metodo statico viene utilizzato per richiamare un metodo statico. L'output di un comando di metodo statico è l'oggetto restituito di quel metodo specifico.
Un comando metodo è costituito da una classe iniziale, visibilità del metodo, nome del metodo e sequenza dei parametri. Questo imita la firma del metodo.
<static_method_command> ::= static method((<starting_class>)(<visibility> <java_identifier> (<parameter_sequence>)))
La classe iniziale è la classe in cui viene trovato il metodo statico.
- Questa catena inizia senza oggetto. Questa catena richiama il metodo
getlevel
pubblico nella classe Dipendente. L'output di questa catena sarà la rappresentazione stringa del livello di questo dipendente. staticMethodPublic: static | static method((com.test.beans.Employee)(public getLevel()))
- L'uso di altre visibilità e di diversi tipi di parametri di metodo è lo stesso degli esempi per Comando metodo.
Comando campo statico
Un comando di campo statico viene utilizzato per ispezionare i valori dei campi statici. L'output di un comando di campo statico è l'oggetto in quel campo specifico.
Un comando metodo è costituito da una classe iniziale, una visibilità campo e un nome campo.
Sintassi:
<static_field_command> ::= static field ((<starting_class>)(<visibility> <java_identifier>))
Esempi di comandi di campo statico:
Nell'esempio seguente si presume che this
sia un oggetto utente. Qui stiamo accedendo a campi di varia visibilità nella classe Utente. L'output di ogni catena è il valore del rispettivo campo.
staticFieldPublic: static field((com.test.beans.Employee)(public role))
L'uso di altre visibilità è lo stesso degli esempi per Comando campo.
Comando Regex
Un comando regex viene utilizzato per trovare e/o sostituire le stringhe risultanti dal SOI, restituire i valori dei comandi del metodo o i valori dei campi. L'output di un comando regex è una stringa.
Un comando regex è costituito dalla stringa regex. Facoltativamente può anche consistere in una stringa di sostituzione, insieme all'eventuale sostituzione della prima o di tutte le occorrenze.
Sintassi: <regex_command> ::=regex (string [,<replace-string> [, first || all]])
Esempi di comandi Regex
- Dopo aver ricevuto l'indirizzo "100 Oracle Pkway, Redwood City, CA 94065", sostituire il primo "Pk" con "This" per ottenere "100 Oracle Thatway, Redwood City, CA 94065
replaceFirstChain : this | method (public getStreet()) | regex(Pk, This, first)
- Dopo aver ricevuto l'indirizzo "100 Oracle Pkway, Redwood City, CA 94065", sostituire tutti gli "0" con "1" per ottenere "111 Oracle Pkway, Redwood City, CA 94165"
replaceAllChain: this | method (public getStreet()) | regex(0, 1, all)
Esempi di variabili avanzate
Di seguito è riportato un esempio di catena di comandi nel file DirectivesConfig.acml
.
test: class_name: "com.test.beans.User"
method_name: "incAge"
span_name: "${short_class_name}.${method_name}"
tags:
t: "${this}"
params: "${param1}"
r: "${return}"
exampleVarTag: "${exampleVar}"
variables:
exampleVar: before this | method (public getAddress ()) | field(private street) | regex(Pk,This, all) | regex(This, That, first)
Revisione dell'esecuzione della catena di variabili exampleVar
:
exampleVar
inizia con l'oggetto User specificato in "class_name". XX
-
Il primo comando chain è un comando method che restituisce un oggetto Address. Ad esempio: "100 Oracle Pkway, Redwood City, CA 94065".
-
Il secondo comando di catena è un comando di campo che ottiene la via dell'indirizzo dal comando di campo precedente. Questo sarà "Oracle Pkway".
-
Il terzo comando catena è un comando regex che sostituisce tutte le istanze di "Pk" con "This" e restituisce "Oracle Thisway".
-
L'ultimo comando a catena è un comando regex che sostituisce la prima istanza di "This" con "That", restituendo "OracleThatway".
Risultato finale: quando si esaminano le dimensioni di questo intervallo, viene visualizzata una tag denominata exampleVarTag con il valore "OracleThatway". Per visualizzare questa dimensione di intervallo è necessario specificare exampleVarTag: "${exampleVar}"
nella sezione Tag.
Usare ACMLValidate per controllare la sintassi dei file
Quando si utilizzano i file di tipo acml
, è possibile utilizzare la utility ACMLValidate per controllare la sintassi dei file acml
.
acml
:
- ProbeConfig.acml
- DirectivesConfig.acml
- CircuitBreaker.acml
La utility ACMLValidate
convalida la sintassi, ma non convalida i valori. È disponibile a partire dall'agente Java APM versione 1.16.
Requisito:
JDK disponibile nel file PATH
o definire la variabile di ambiente JAVA_HOME
.
Posizione:
La utility ACMLValidate
si trova nella directory oracle-apm-agent/bin
.
Eseguire ACMLValidate:
ACMLValidate
, utilizzare quanto segue:
-
Per Windows:
ACMLValidate.bat
-
Per Linux:
ACMLValidate.sh
ACMLValidate.[bat|sh] <path to the acml file>
oracle-apm-agent/bin % sh ACMLvalidate.sh ../config/1.16.0.560/ProbeConfig.acml
===============================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: PASSED
===============================================================================
oracle-apm-agent/bin % sh ACMLvalidate.sh ../config/1.16.0.560/ProbeConfig.acml
===========================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: FAILED
Exception: Failed to parse line [5][ SERVLET: true]
Caused by: Tab detected in the following line. Please replace '\t' with spaces: [ \tSERVLET: true]
===========================================================================