Modificación de configuración de sondeo

Puede modificar o desactivar la configuración de sondeo por defecto o activar un sondeo personalizado para supervisar clases adicionales.

Modificación o desactivación de la configuración de sondeo por defecto

Puede modificar o desactivar los valores de sondeo predeterminados mediante el archivo ProbeConfig.acml.

Después de aprovisionar un agente Java de APM, el archivo ProbeConfig.acml está disponible con el directorio oracle-apm-agent/config. Para obtener información sobre cómo acceder al archivo ProbeConfig.acml, consulte Aprovisionamiento del agente Java de APM.

El archivo ProbeConfig.acml permite realizar lo siguiente:

  • Activar o desactivar sondeos concretos.
  • Desactive la supervisión de patrones específicos de rastreos/espacios basados en información como URL, extensión de archivo, etc.
  • Active la captura de etiquetas/dimensiones adicionales. Por ejemplo, captura cabeceras y parámetros específicos para el sondeo SERVLET.
  • Manipular el nombre del período. Por ejemplo, manipular la URL para los sondeos SERVLET o HTTP_CLIENT.
  • Capture sentencias de consulta SQL de base de datos con más de 1.000 caracteres de longitud como log de período.

    Para activar o desactivar el registro de todas las sentencias de consulta SQL en el log de intervalo de jdbc, utilice el parámetro enable_complete_sql_span_log_jdbc. Esta función resulta útil cuando una consulta SQL larga se trunca a 1.000 caracteres. Por ejemplo, utilice: enable_complete_sql_span_log_jdbc: true para activarlo.

  • Capture el nombre de usuario conectado.

    Los nombres de usuario hash se capturan para las sesiones autenticadas con la intención de permitir la generación de informes sobre el número de usuarios únicos, sin exponer la información de identificación personal (PII). Sin embargo, puede ser necesario informar el nombre de usuario en formato de texto sin formato. En ese caso, vaya a la sección general y defina track_plain_username: true.

  • Capture cargas útiles.

    La carga útil incluye el contenido tanto de la solicitud HTTP como de la respuesta.

    Puede realizar un seguimiento del flujo completo de las solicitudes de la aplicación y enviar los datos recopilados al Explorador de rastreo para su análisis activando la carga útil.

    El soporte de captura de carga útil incluye servlet, servidor JAX-RS, servicio de proxy OSB y servicio de negocio OSB.

    A partir de la versión 1.16 del agente Java de APM, también están soportados los clientes Http de Apache (4.x y 5.x), el cliente Http de JDK 11+, el cliente Http del SDK de OCI (2.x y 3.x), Spring Web Client 5.x y los clientes 2.x y 3.x de OkHttp.

    Activar carga útil: para activar las cargas útiles de solicitud y respuesta HTTP, defina los parámetros: capture_request_payload y capture_response_payload en el archivo ProbeConfig.acml.

    • Para capturar un subjuego de la carga útil, se pueden aplicar expresiones xpath/jsonpath/regex según el nombre de la operación.
    • Después de activarla, las cargas útiles capturadas están disponibles como dimensiones: RequestPayload y ResponsePayload respectivamente. La longitud máxima predeterminada es de 1000 caracteres.
    • Se pueden capturar varias dimensiones de la misma carga útil especificando tag_name junto con la expresión.
  • Cambie el modelado de llamadas asíncronas HttpClient.

    A partir de la versión 1.16 del agente Java de APM, un único intervalo representa la solicitud saliente, el tiempo de espera y la devolución de llamada.

    Para mantener el comportamiento anterior de las versiones anteriores del agente (un intervalo para la llamada saliente y otro para la devolución de llamada), modifique el parámetro httpclient_async_one_span en la sección HTTP_CLIENT del archivo ProbeConfig.acml y defínalo en false.
    #Enables capturing async client invocations as a single span. No separate callback spans will be reported
    httpclient_async_one_span: false

El comportamiento de la configuración de sondeo por defecto se puede actualizar mediante el archivo ProbeConfig.acml del agente Java de APM.

Para realizar cambios en la configuración predeterminada del sondeo, siga las instrucciones disponibles en el archivo ProbeConfig.acml.

Los cambios en el archivo ProbeConfig.acml se pueden realizar cuando se está ejecutando el servidor de aplicaciones y no es necesario reiniciarlo para que se apliquen los cambios.

Nota

A partir de la versión 1.12 del agente Java de APM, hay una operación mejorada y simplificada de la convención de nomenclatura para los sondeos de Servlet, HttpClient y OSB. Por lo tanto, la regla replace_all_patterns para eliminar números e ID hexadecimales ya no se incluye por defecto en el archivo ProbeConfig.acml. Esto se aplica a las secciones SERVLET, HTTP_CLIENT y OSB.

Si el escenario específico aún lo necesita, vuelva a agregar lo siguiente en el archivo después de actualizar el agente Java de APM:
# Hex ID and numbers
-
      pattern: "([a-fA-F\._\:-]*[0-9]+){2,}[a-fA-F_\:-]*([/\.])?"
      replacement: "*$2"

Configuración de un sondeo personalizado

Puede configurar un sondeo personalizado para supervisar clases adicionales y obtener detalles específicos de la aplicación.

El sondeo personalizado es útil si el juego incorporado de sondeos disponibles en el archivo ProbeConfig.acml no cumple con los requisitos de supervisión. Por ejemplo, si desea supervisar un thread en segundo plano que no se supervisa mediante los sondeos por defecto, puede configurar un sondeo personalizado para supervisarlo.

Para configurar un sondeo personalizado, haga lo siguiente:

  1. Configure un archivo DirectivesConfig.acml para especificar qué classes, methods o annotations se deben supervisar. Para obtener más información, consulte DirectivesConfig.acml File Configuration.
  2. Agregue el archivo DirectivesConfig.acml al directorio oracle-apm-agent/config.
    Ahora está en desuso especificar el archivo DirectivesConfig.acml utilizando lo siguiente en el script de inicio del servidor de aplicaciones:
    -Dcom.oracle.apm.agent.customDirectivesFile=<Path_to_DirectivesConfig.acml_file>
    Elimine el argumento anterior de la secuencia de comandos de inicio de la aplicación si ha especificado previamente el archivo DirectivesConfig.acml de esta forma.
  3. Reinicie el servidor de aplicaciones si se especifica un nuevo archivo DirectivesConfig.acml.

    Los cambios realizados en el archivo DirectivesConfig.acml se aplican después de reiniciar el servidor de aplicaciones.

    El reinicio del servidor de aplicaciones es necesario al especificar un nuevo archivo DirectivesConfig.acml o suprimir el archivo.

    No es necesario reiniciar el servidor de aplicaciones si se realiza alguna de las siguientes acciones:
    • Edite span_name.
    • Agregue, edite o suprima tags, logs o Variables avanzadas en un archivo DirectivesConfig.acml existente que ya está en vigor.
    El reinicio del servidor de aplicaciones es necesario si se cambia cualquier otro parámetro de la siguiente tabla en DirectivesConfig.acml Parameters.

Configuración de archivos DirectivesConfig.acml

Para configurar el archivo DirectivesConfig.acml, revise lo siguiente:

Parámetros DirectivesConfig.acml

A continuación se incluye información sobre los parámetros que puede especificar en el archivo DirectivesConfig.acml.

Se debe especificar al menos uno de los siguientes parámetros MUST en el archivo DirectivesConfig.acml:

  • class_name
  • class_name_regex
  • class_annotation
  • method_annotation
  • class_annotation_regex
  • method_annotation_regex
Parámetro Descripción Ejemplo
label

Etiqueta única para la directiva. Este parámetro es obligatorio.

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

Nombre de la clase que desea supervisar. Debe especificar el nombre completo de la clase, incluido el paquete.

Test:  
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
class_name_regex

Patrón de expresión regular (regex) para supervisar cualquier clase que coincida con él.

Para el patrón de regex, en lugar de utilizar "." para el paquete, utilice "/". Por ejemplo, si desea supervisar una clase denominada a.b.c.d.ClassName, el patrón de regex debe coincidir con a/b/c/d/ClassName.

Si se especifican class_name_regex y class_name, se ignora class_name.

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

Nombre del método que desea supervisar. Esto no incluye los parámetros de método.

Si no se especifica method_name, se supervisan todos los métodos.

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

Patrón de regex para supervisar cualquier método que coincida con él.

Si no se especifica method_name_regex, se supervisan todos los métodos.

Si se especifican method_name_regex y method_name, se ignora method_name.

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

Nombre de clase completo de la anotación que desea supervisar. Se supervisa cualquier class con la anotación especificada.

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

Nombre de clase completo de la anotación que desea supervisar. Se supervisa cualquier method con la anotación especificada.

Test:
  method_annotation: "javax.jws.WebMethod"
class_annotation_regex

Patrón de regex para supervisar cualquier anotación de clase que coincida con él.

Para el patrón de regex, en lugar de utilizar "." para el paquete, utilice "/". Además, el valor debe empezar por "L" y terminar por ";". Por ejemplo, si desea supervisar una anotación denominada a.b.c.d.Annotation, el patrón de regex debe coincidir con La/b/c/d/Annotation;.

Si se especifican class_annotation_regex y class_annotation, se ignora class_annotation.

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

Patrón de regex para supervisar cualquier anotación de método que coincida con él.

Para el patrón de regex, en lugar de utilizar "." para el paquete, utilice "/". Además, el valor debe empezar por "L" y terminar por ";". Por ejemplo, si desea supervisar una anotación denominada a.b.c.d.Annotation, el patrón de regex debe coincidir con La/b/c/d/Annotation;.

Si se especifican method_annotation_regex y method_annotation, se ignora method_annotation.

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

Especifique si se deben supervisar las subclases de la clase de destino. Por defecto, se define en false.

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

Nombre del período creado durante la supervisión. Si no se especifica span_name, se utiliza "${class_name}.${method_name}" por defecto.

Tenga en cuenta que puede especificar un nombre para el período, como se muestra bajo la etiqueta Test del ejemplo correspondiente, el cual se utilizará cada vez que se llame al destino supervisado.

Al especificar el parámetro span_name, también puede utilizar variables, ${variable_name} y Variables avanzadas para adquirir información adicional sobre los parámetros que está supervisando y mostrarlos en el nombre del intervalo. En el ejemplo correspondiente, en la etiqueta Test2, la variable param# indica los parámetros alineados con el método que está supervisando.

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

Etiquetas (nombres y valores) que se van a incluir en el período.

Como en el caso del parámetro span_name, puede utilizar variables al especificar valores para tags para obtener y mostrar información adicional sobre los parámetros que está supervisando.

Tenga en cuenta que el valor tags que especifique se mostrará como Dimensiones en la interfaz de usuario del Explorador de rastreo.

Para los valores de etiqueta, se puede especificar un tipo opcional. Puede especificar que el valor de etiqueta sea de tipo String, Boolean, Integer, Long, Float o Double mediante la sintaxis y la palabra clave adecuadas (como se muestra en el ejemplo). El tipo de valor de etiqueta por defecto será Cadena. Se utilizará si no se especifica ningún tipo o un tipo incompatible. Si se especifica un tipo incompatible para un valor de etiqueta, el tipo volverá al valor por defecto de Cadena y aparecerá un mensaje de log sobre la incompatibilidad. El valor de dimensión de periodo se puede confirmar mediante consultas con agregaciones que aprovechan los valores numéricos (si procede) en el explorador de rastreo.

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 (Fin de creación)

Logs (nombres y valores) que desea incluir en el período.

Como en el caso de los parámetros span_name y tags, también puede utilizar variables al especificar valores para el parámetro logs para obtener y mostrar información adicional sobre los parámetros que está supervisando.

Tenga en cuenta que el valor logs especificado se muestra como Logs de intervalo en la interfaz de usuario del explorador de rastreo.

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

Variables de span_name, etiquetas y logs

Al especificar los parámetros span_name, tags y logs, se pueden utilizar las siguientes variables para obtener información adicional:

  • class_name: nombre de la clase que se está supervisando, incluyendo el paquete.
  • short_class_name: nombre de la clase que se está supervisando, excluyendo el paquete.
  • method_name: nombre del método que se está supervisando.
  • method_descriptor: formato de descriptor de la firma del método que se está supervisando.
  • param#: parámetros del método que se está supervisando, en los que param1 indica el primer parámetro, param2 el segundo parámetro, etc.
  • this: objeto que se está supervisando. Tenga en cuenta que si el method que se está supervisando es static, la variable this no estará disponible.
  • return: valor de devolución del método que se está supervisando.
    Nota

    La variable return solo se puede utilizar para el parámetro tags y no para span_name.

Ejemplo de DirectivesConfig.acml

A continuación, se muestra un ejemplo del archivo 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}"

Según el ejemplo anterior:

  • Se supervisará com.oracle.apm.samples.servlet.OutboundTestServlet.performHttpURLConnectionCall junto con sus subclases.
  • El nombre del período que se muestra en el explorador de rastreo será OutboundTestServlet.performHttpURLConnectionCall.
  • Las etiquetas targetURL y port se agregarán al período y utilizarán los valores de los parámetros primero y segundo del método performHttpURLConnectionCall.

Las siguientes capturas de pantalla son un ejemplo de la página de sondeo personalizada:

Captura de pantalla de ejemplo de sondeo personalizado 1

Captura de pantalla de ejemplo de sondeo personalizado 2

Variables avanzadas para sondeo personalizado

Al utilizar un sondeo personalizado, puede configurar la sintaxis avanzada de comandos para construir variables de forma dinámica mediante el encadenamiento de métodos y la manipulación de cadenas mediante expresiones regulares. Se puede hacer referencia a estas variables avanzadas en las secciones span_name, tags y logs, al igual que el resto de variables mencionadas anteriormente.

Flujo de trabajo general para utilizar variables avanzadas
  1. Revise cómo configurar el sondeo personalizado. Consulte Configure a Custom Probe.
  2. Revise la sintaxis de la cadena de comandos. Consulte Command Chain Syntax.
  3. Revise los ejemplos. Consulte Ejemplos de variables avanzadas.

Sintaxis de la cadena de comandos

Una cadena de comandos consta de las tres partes siguientes:

El símbolo de tubería "|" se utiliza para indicar la canalización del objeto de inicio al primer comando de cadena y el objeto de salida de canalización de un comando de cadena al siguiente.

Tiempo de Ejecución

Las cadenas de comandos se ejecutan antes o después de que se llame al método supervisado del sondeo personalizado. Esto se especifica mediante el tiempo de ejecución, que aparece antes de la SOI.

<execution time> ::= [before || after]

No todas las cadenas de comandos son compatibles con ambos tiempos de ejecución: cuando se utiliza return como SOI o como parámetro en un comando de método, se debe utilizar el tiempo posterior a la ejecución. Esto se debe a que el objeto de devolución solo está disponible después de que se llame al método supervisado. Cuando se utilizan otras variables como SOI o parámetros en comandos de método, los tiempos de ejecución dependen de las cadenas a las que se hace referencia.

Por ejemplo, definamos chain1 y chain2, donde chain2 utiliza chain1 como SOI o parámetro para un comando de método. Tenga en cuenta que chain1 se debe definir antes que chain2 si ambas cadenas utilizan el mismo tiempo de ejecución. De lo contrario, chain1 debe tener tiempo de ejecución antes y chain2 debe tener tiempo de ejecución después.

Puede encontrar más información sobre el uso de las SOI y los comandos del método en la sección siguiente Identificador de objeto de inicio.

Identificador de objeto inicial

Un identificador de objeto de inicio (SOI) puede ser objetos asociados con:

  • Palabras clave predefinidas: this, return y param#.

  • Salida de una cadena identificada por su clave.

Los tiempos de ejecución se pueden emparejar con la sintaxis de SOI.

SOI Descripción Posible tiempo de ejecución Sintaxis Ejemplo
ThisSOI La cadena se ejecuta en el objeto especificado por class_name en el archivo DirectivesConfig.acml. before o after <this SOI> ::= [before || after] this thisSOIchain: before this | method (public getAddress ())
ParamSOI La cadena se ejecuta en el objeto especificado por param# en el archivo DirectivesConfig.acml.

Estos son parámetros del método que se está supervisando.

before or after <param_SOI> ::= [before || after] param# paramSOIchain: before param1 | method (public getAddress ())

param1 indica el primer parámetro.

ReturnSOI La cadena se ejecuta en el objeto especificado por return en el archivo DirectivesConfig.acml.

Valor de retorno del método que se está supervisando.

after <return_SOI> ::= [after] return returnSOIchain: after return | method (public getAddress ())
StaticSOI La cadena no se ha iniciado con ningún objeto. before or after <static SOI> ::= [before || after] static staticSOIchain: before static | static method((com.test.beans.Employee)(public getLevel()))
VariableSOI La cadena se ejecuta en el objeto especificado por una de las variables anteriores definidas en el archivo 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)

Secuencia de comandos de cadena

Una secuencia de comandos de cadena consta de uno o más comandos de cadena.

Sintaxis: <chain_command_sequence> ::= <chain_command> || <chain_command> | <chain_command_sequence>

Tipos de comandos de cadena

Sintaxis: <chain_command> ::= <method_command> || <field_command> || <regex_command>

Comando de método

Se utiliza un comando method para llamar a un método. La salida de un comando method es el objeto de retorno de ese método específico.

Un comando de método consta de visibilidad de método, nombre de método y secuencia de parámetros. Esto imita la firma del método.

La sintaxis debe ser similar a la siguiente:

<method_command> ::= method(<visibility> <java_identifier> (<parameter_sequence>))

<visibility> ::= private || public || protected || package

El valor package se utiliza para especificar un campo o método de visibilidad de paquete privado (sin modificador).

<scalar_parameter_type> ::= int || double || float || String

<parameter> ::=<scalar_parameter_type> value || this || return || param<index> || variable-key

<parameter_sequence> ::= <parameter> || <parameter> , <parameter_sequence>

Ejemplos de comandos de método

  • Esta cadena muestra this como objeto de usuario. Esta cadena llama al método getAddress público en la clase User. La salida de esta cadena será la representación de cadena de esta dirección de usuario.
    addresschain: this | method (public getAddress ())
  • Esta cadena llama al método public setName en el usuario y define el nombre en "John Smith". Puesto que este método set no tiene ningún valor de retorno, la salida de esta cadena será nula. Esta cadena muestra cómo utilizar parámetros escalares en comandos de método.
    testSetupVar: this | method(public setName(String "John", String "Smith"))
  • Esta cadena utiliza param1 (el primer parámetro del método que se está supervisando) como parámetro para el método que estamos invocando.
    testParamAsParam: this | method(public incUserId(param1))
  • Esta cadena utiliza otra variable, en este caso testParamAsParam, como parámetro para el método.
    testVarAsParam: this | method(public incUserId(testParamAsParam))
  • Esta cadena llama al supermétodo explícitamente.
    invokeUsingSuper: this | method(private super.overloadPrivate(String "string3", int 2222))

Comando de campo

Se utiliza un comando de campo para inspeccionar los valores de campo. La salida de un comando de campo es el objeto de ese campo específico.

Un comando de método consta de visibilidad de campo y nombre de campo.

Sintaxis: <field_command> ::= field (<visibility> <java_identifier>)

Ejemplos de comandos de campo

En el siguiente ejemplo, se asume que this es un objeto de usuario. Aquí estamos accediendo a campos de diversa visibilidad en la clase User. La salida de cada cadena es el valor del campo respectivo.
fieldPublic: this | field(public firstName)
fieldProtected: this | field (protected lastName) 
fieldPackagePrivate: this | field (package middleName)
fieldPrivate: this | field (private maidenName)

Comando de Método Estático

Se utiliza un comando de método estático para llamar a un método estático. La salida de un comando de método estático es el objeto de retorno de ese método específico.

Un comando de método consta de una clase inicial, visibilidad de método, nombre de método y secuencia de parámetros. Esto imita la firma del método.

La sintaxis debe ser similar a la siguiente:
<static_method_command> ::= static method((<starting_class>)(<visibility> <java_identifier> (<parameter_sequence>)))

La clase inicial es la clase en la que se encuentra el método estático.

Ejemplos de comandos de método estático
  • Esta cadena comienza sin ningún objeto. Esta cadena llama al método getlevel público en la clase Employee. La salida de esta cadena será la representación de cadena del nivel de este empleado.
  • staticMethodPublic: static | static method((com.test.beans.Employee)(public getLevel()))
  • El uso de otras visibilidades y diferentes tipos de parámetros de método son los mismos que en los ejemplos de Method Command.

Comando de campo estático

Se utiliza un comando de campo estático para inspeccionar los valores de campo estático. La salida de un comando de campo estático es el objeto de ese campo específico.

Un comando de método consta de una clase inicial, visibilidad de campo y nombre de campo.

Sintaxis:

La sintaxis debe ser similar a la siguiente:
<static_field_command> ::= static field ((<starting_class>)(<visibility> <java_identifier>))

Ejemplos de comandos de campo estático:

En el ejemplo siguiente se asume que this es un objeto de usuario. Aquí estamos accediendo a campos de diversa visibilidad en la clase User. La salida de cada cadena es el valor del campo correspondiente.

staticFieldPublic: static field((com.test.beans.Employee)(public role))

El uso de otras visibilidades es el mismo que en los ejemplos de comando de campo.

Comando Regex

Se utiliza un comando regex para buscar y/o sustituir cadenas resultantes de la SOI, los valores de retorno de los comandos de método o los valores de campo. La salida de un comando regex es una cadena.

Un comando regex consta de la cadena regex. Opcionalmente, también puede consistir en una cadena de sustitución, junto con si se deben sustituir la primera o todas las incidencias.

Sintaxis: <regex_command> ::=regex (string [,<replace-string> [, first || all]])

Ejemplos de comandos Regex

  • Después de obtener la dirección "100 Oracle Pkway, Redwood City, CA 94065", sustituya la primera "Pk" por "This" para obtener "100 Oracle Thatway, Redwood City, CA 94065".
    replaceFirstChain : this | method (public getStreet()) | regex(Pk, This, first)
  • Después de obtener la dirección "100 Oracle Pkway, Redwood City, CA 94065", sustituya todos los "0" por "1" para obtener "111 Oracle Pkway, Redwood City, CA 94165"
    replaceAllChain: this | method (public getStreet()) | regex(0, 1, all)

Ejemplos de variables avanzadas

A continuación, se muestra un ejemplo de una cadena de comandos en el archivo 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) 

Revisión de la ejecución de la cadena de variables exampleVar:

La cadena exampleVar empieza por el objeto de usuario especificado en "class_name". XX
  • El primer comando de cadena es un comando de método que devuelve un objeto Address. Por ejemplo: "100 Oracle Pkway, Redwood City, CA 94065".

  • El segundo comando de cadena es un comando de campo que obtiene la calle de la dirección del comando de campo anterior. Será "Oracle Pkway".

  • El comando de la tercera cadena es un comando regex que sustituye todas las instancias de "Pk" por "This" y devuelve "Oracle Thisway".

  • El último comando de cadena es un comando regex que sustituye la primera instancia de "This" por "That", que devuelve "OracleThatway".

Resultado final: al consultar las dimensiones de este período, verá una etiqueta denominada exampleVarTag con el valor "OracleThatway". Tenga en cuenta que la especificación de exampleVarTag: "${exampleVar}" en la sección de etiquetas era necesaria para ver esta dimensión de período.

Utilice ACMLValidate para comprobar la sintaxis del archivo

Al trabajar con archivos de tipo acml, puede utilizar la utilidad ACMLValidate para comprobar la sintaxis de los archivos acml.

ACMLValidate es una utilidad de agente Java de APM que se puede utilizar para comprobar y verificar la sintaxis de los siguientes archivos acml:
  • ProbeConfig.acml
  • DirectivesConfig.acml
  • CircuitBreaker.acml
Nota

La utilidad ACMLValidate valida la sintaxis, pero no valida los valores. Está disponible a partir de la versión 1.16 del agente Java de APM.

Requisito:

JDK disponible en PATH o defina la variable de entorno JAVA_HOME.

Ubicación:

La utilidad ACMLValidate se encuentra en el directorio oracle-apm-agent/bin.

Ejecute ACMLValidate:

Para llamar a ACMLValidate, utilice lo siguiente:
  • Para Windows: ACMLValidate.bat

  • Para Linux: ACMLValidate.sh

Sintaxis:
ACMLValidate.[bat|sh] <path to the acml file>
Ejemplo1:
oracle-apm-agent/bin % sh ACMLvalidate.sh  ../config/1.16.0.560/ProbeConfig.acml
El resultado es similar al siguiente:
===============================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: PASSED
===============================================================================
Ejemplo2:
oracle-apm-agent/bin % sh ACMLvalidate.sh ../config/1.16.0.560/ProbeConfig.acml  
El resultado es similar al siguiente:
===========================================================================
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]
===========================================================================