Modifica impostazioni non operative

È possibile modificare o disabilitare le impostazioni predefinite della sonda oppure abilitare una sonda personalizzata per monitorare le classi aggiuntive.

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, utilizzare enable_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 e capture_response_payload nel file ProbeConfig.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 e ResponsePayload. 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 parametro httpclient_async_one_span nella sezione HTTP_CLIENT del file ProbeConfig.acml e impostarlo su false.
    #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.

Nota

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.

Se lo scenario specifico lo richiede ancora, aggiungere di nuovo il seguente contenuto nel file dopo l'aggiornamento dell'agente Java APM:
# 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.

  1. Configurare un file DirectivesConfig.acml per specificare quali classes, methods o annotations devono essere monitorati. Per maggiori informazioni, vedere DirectivesConfig.acml File Configuration.
  2. Aggiungere il file DirectivesConfig.acml alla directory oracle-apm-agent/config.
    Ora non è più valido specificare il file DirectivesConfig.acml utilizzando quanto segue nello script di avvio del server applicazioni:
    -Dcom.oracle.apm.agent.customDirectivesFile=<Path_to_DirectivesConfig.acml_file>
    Rimuovere l'argomento precedente dallo script di avvio dell'applicazione se il file DirectivesConfig.acml è stato specificato in precedenza in questo modo.
  3. 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 file DirectivesConfig.acml esistente già attivo.
    Il riavvio di Application Server è necessario se si modificano altri parametri dalla tabella riportata di seguito in DirectivesConfig.acml Parametri.

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.

Test:
  ...
Test2:
  ...
Test3:
  ...
class_name

Il nome della classe da monitorare. È necessario specificare il nome completo della classe, incluso il pacchetto.

Test:  
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
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 a.b.c.d.ClassName, il pattern regex deve corrispondere a a/b/c/d/ClassName.

Se vengono specificati sia class_name_regex che class_name, class_name viene ignorato.

Test:
  # Monitor all classes under the com.oracle.apm.test package
  class_name_regex: "com/oracle/apm/test/.*"
method_name

Il nome del metodo da monitorare. Non sono inclusi i parametri del metodo.

Se method_name non viene specificato, vengono monitorati tutti i metodi.

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  method_name "performHttpURLConnectionCall"
method_name_regex

Pattern regex per monitorare qualsiasi metodo corrispondente.

Se method_name_regex non viene specificato, vengono monitorati tutti i metodi.

Se vengono specificati sia method_name_regex che method_name, method_name viene ignorato.

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  # Monitor all methods that start with "perform"
  method_name_regex: "perform.*"
class_annotation

Il nome completo della classe dell'annotazione che si desidera monitorare. Qualsiasi class con l'annotazione specificata viene monitorato.

Test:
  class_annotation: "javax.jws.WebService"
method_annotation

Il nome completo della classe dell'annotazione che si desidera monitorare. Qualsiasi method con l'annotazione specificata viene monitorato.

Test:
  method_annotation: "javax.jws.WebMethod"
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 a.b.c.d.Annotation, il pattern regex deve corrispondere a La/b/c/d/Annotation;.

Se vengono specificati sia class_annotation_regex che class_annotation, class_annotation viene ignorato.

Test:
  # Monitor all Path annotations in javax
  class_annotation_regex: "Ljavax/.*/Path;"
Test2:
  # Monitor all annotations that end with "Path"
  # The L in the beginning is not required since .* includes it
  class_annotation_regex: ".*/Path;"
Test3:
  # Monitor all annotations with the javax.jws package
  # The ; at the end is not required since .* includes it
  class_annotation_regex: "Ljavax/jws/.*"
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 a.b.c.d.Annotation, il pattern regex deve corrispondere a La/b/c/d/Annotation;.

Se vengono specificati sia method_annotation_regex che method_annotation, method_annotation viene ignorato.

Test:
  # Monitor all Path annotations in javax
  method_annotation_regex: "Ljavax/.*/Path;"
Test2:
  # Monitor all annotations that end with "Path"
  # The L in the beginning is not required since .* includes it
  method_annotation_regex: ".*/Path;"
Test3:
  # Monitor all annotations with the javax.jws package
  # The ; at the end is not required since .* includes it
  method_annotation_regex: "Ljavax/jws/.*"
include_sub_classes

Specificare se le sottoclassi della classe di destinazione devono essere monitorate. L'impostazione predefinita è false.

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  method_name "performHttpURLConnectionCall"
  include_sub_classes: true
span_name

Nome dell'intervallo creato durante il monitoraggio. Se span_name non viene specificato, viene utilizzato il valore predefinito "${class_name}.${method_name}".

Si noti che è possibile specificare un nome per l'intervallo, come mostrato sotto l'etichetta Test nell'esempio corrispondente, che verrà quindi utilizzato ogni volta che viene richiamata la destinazione monitorata.

Quando si specifica il parametro span_name, è possibile utilizzare anche variabili, ${variable_name} e Variabili avanzate per acquisire informazioni aggiuntive sui parametri che si stanno monitorando e visualizzarli nel nome dell'intervallo. Nell'esempio corrispondente, sotto l'etichetta Test2, la variabile param# indica i parametri allineati al metodo che si sta monitorando.

Test:
  ...
  # The same name will be used every time the target class/method is invoked
  span_name: "SpecialName"
Test2:
  ...
  # Use the toString result of the first parameter passed to the monitored method
  span_name: "${param1}"
tags

Tag (nomi e valori) da includere nell'intervallo.

Come nel caso del parametro span_name, è possibile utilizzare le variabili quando si specificano i valori per tags per acquisire e visualizzare ulteriori informazioni sui parametri che si stanno monitorando.

Si noti che il valore tags specificato viene visualizzato come Dimensioni nell'interfaccia utente di Trace Explorer.

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.

Test:
  ...
  tags:
    importantInfo: "${param1}"
    consistentTag: "AlwaysTheSame"
    returnValue: "${return}"
    #The below tag will have value of default type String since no type was specified
    defaultTagType: "${param1}"
    #The below tag will have value of type Integer
    integerTag: "${param1} | integer"
    #The below tag will have value of type String, because the actual value type String, and the specified type Double are incompatible. Therefore it will default to String.
    booleanTag: "${param2} | double"
logs

I log (nomi e valori) che si desidera includere nell'intervallo.

Come nel caso dei parametri span_name e tags, è anche possibile utilizzare le variabili quando si specificano valori per il parametro logs per acquisire e visualizzare ulteriori informazioni sui parametri che si stanno monitorando.

Si noti che il valore logs specificato viene visualizzato come Log di intervallo nell'interfaccia utente di Trace Explorer.

Test:
  ...
  logs:
    importantInfoLog: "${param1}"
    consistentLog: "AlwaysTheSame"
    returnValueLog: "${return}"
  ...

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 cui param1 indica il primo parametro, param2 il secondo parametro e così via.
  • this: oggetto monitorato. Tenere presente che se la variabile method monitorata è static, la variabile this non sarà disponibile.
  • return: restituisce il valore del metodo monitorato.
    Nota

    La variabile return può essere utilizzata solo per il parametro tags e non per span_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 e port verranno aggiunte all'intervallo e utilizzeranno i valori del primo e del secondo parametro del metodo performHttpURLConnectionCall.

Di seguito sono riportati un esempio di pagina non operativa personalizzata.

Screenshot 1 - Esempio di sonda personalizzata

Esempio di sonda personalizzato - Screenshot 2

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.

Flusso di lavoro generale per l'utilizzo di variabili avanzate
  1. Rivedere come configurare la sonda personalizzata. Vedere Configure a Custom Probe.
  2. Controllare la sintassi della catena di comandi. Vedere Sintassi della catena di comandi.
  3. Rivedere gli esempi. Vedere Esempi di variabili avanzate.

Sintassi della catena di comandi

Una catena di comando è costituita dalle tre parti seguenti:

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 e param#.

  • 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 ())

param1 indica il primo parametro.

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"))

var1UsedAsStartObject: after var1 | method (public getAddress ()) | field(private street)

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 metodo getAddress 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

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.
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.

La sintassi dovrebbe essere la seguente:
<static_method_command> ::= static method((<starting_class>)(<visibility> <java_identifier> (<parameter_sequence>)))

La classe iniziale è la classe in cui viene trovato il metodo statico.

Esempi di comandi del 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:

La sintassi dovrebbe essere la seguente:
<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:

La catena 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.

ACMLValidate è una utility dell'agente Java APM che può essere utilizzata per controllare e verificare la sintassi dei seguenti file acml:
  • ProbeConfig.acml
  • DirectivesConfig.acml
  • CircuitBreaker.acml
Nota

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:

Per richiamare ACMLValidate, utilizzare quanto segue:
  • Per Windows: ACMLValidate.bat

  • Per Linux: ACMLValidate.sh

Sintassi:
ACMLValidate.[bat|sh] <path to the acml file>
Esempio1:
oracle-apm-agent/bin % sh ACMLvalidate.sh  ../config/1.16.0.560/ProbeConfig.acml
L'output è simile al seguente:
===============================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: PASSED
===============================================================================
Esempio2:
oracle-apm-agent/bin % sh ACMLvalidate.sh ../config/1.16.0.560/ProbeConfig.acml  
L'output è simile al seguente:
===========================================================================
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]
===========================================================================