Modification des paramètres de sonde

Vous pouvez modifier ou désactiver les paramètres de sonde par défaut, ou activer une sonde personnalisée pour surveiller des classes supplémentaires.

Modification ou désactivation des paramètres de sonde par défaut

Vous pouvez modifier ou désactiver les paramètres de sonde par défaut à l'aide du fichier ProbeConfig.acml.

Une fois que vous avez provisionné un agent Java APM, le fichier ProbeConfig.acml est disponible sous le répertoire oracle-apm-agent/config. Pour obtenir des informations sur l'accès au fichier ProbeConfig.acml, reportez-vous à la section Provisionnement de l'agent Java APM.

Le fichier ProbeConfig.acml vous permet d'effectuer les opérations suivantes :

  • Activez ou désactivez des sondes particulières.
  • Désactivez la surveillance de modèles spécifiques de traces/espaces en fonction d'informations telles que l'URL, l'extension de fichier, etc.
  • Activer la capture des balises/dimensions supplémentaires. Par exemple, capture d'en-têtes et de paramètres spécifiques pour la sonde SERVLET.
  • Manipulez le nom de la plage. Par exemple, manipuler l'URL des sondes SERVLET ou HTTP_CLIENT.
  • Capturez les instructions de requête SQL de base de données comportant plus de 1 000 caractères dans un journal d'étendue.

    Pour activer ou désactiver la journalisation de l'ensemble des instructions de requête SQL dans le journal d'étendue JDBC, utilisez le paramètre enable_complete_sql_span_log_jdbc. Cette fonctionnalité est utile lorsqu'une longue requête SQL est tronquée à 1 000 caractères. Par exemple, utilisez : enable_complete_sql_span_log_jdbc: true pour l'activer.

  • Capturez le nom utilisateur connecté.

    Les noms d'utilisateur hachés sont capturés pour les sessions authentifiées dans le but de permettre la génération de rapports sur le nombre d'utilisateurs uniques, sans exposer les informations personnelles identifiables (PII). Cependant, il peut être nécessaire de signaler le nom d'utilisateur au format texte brut. Dans ce cas, accédez à la section générale et définissez track_plain_username: true.

  • Capturer les charges utiles.

    La charge utile inclut le contenu de la demande et de la réponse HTTP.

    Vous pouvez suivre le flux complet des demandes d'application et envoyer les données collectées à l'explorateur de traces pour analyse en activant la charge utile.

    La prise en charge de la capture de charge utile inclut le servlet, le serveur JAX-RS, le service proxy OSB et le service fonctionnel OSB.

    A partir de la version 1.16 de l'agent Java APM, les clients HTTP Apache (4.x et 5.x), le client HTTP JDK 11+, le client HTTP OCI SDK (2.x et 3.x), les clients Web Spring 5.x et OkHttp 2.x et 3.x sont également pris en charge.

    Activer la charge utile : pour activer les charges utiles de demande et de réponse HTTP, définissez les paramètres capture_request_payload et capture_response_payload dans le fichier ProbeConfig.acml.

    • Pour capturer un sous-ensemble de la charge utile, vous pouvez appliquer des expressions xpath/jsonpath/regex en fonction du nom de l'opération.
    • Après l'activation, les charges utiles capturées sont disponibles en tant que dimensions : RequestPayload et ResponsePayload respectivement. La longueur maximale par défaut est de 1000 caractères.
    • Vous pouvez capturer plusieurs dimensions à partir de la même charge utile en indiquant tag_name avec l'expression.
  • Modifiez la modélisation des appels asynchrones HttpClient.

    A partir de la version 1.16 de l'agent Java APM, une seule étendue représente la demande sortante, le temps d'attente et le callback.

    Pour conserver le comportement précédent des versions antérieures de l'agent (une étendue pour l'appel sortant et une seconde pour le callback), modifiez le paramètre httpclient_async_one_span dans la section HTTP_CLIENT du fichier ProbeConfig.acml et définissez-le sur false.
    #Enables capturing async client invocations as a single span. No separate callback spans will be reported
    httpclient_async_one_span: false

Le comportement par défaut des paramètres de sonde peut être mis à jour à l'aide du fichier ProbeConfig.acml de l'agent Java APM.

Pour modifier les paramètres de sonde par défaut, suivez les instructions disponibles dans le fichier ProbeConfig.acml.

Vous pouvez apporter des modifications au fichier ProbeConfig.acml lorsque le serveur d'applications est exécuté. Celui-ci n'a pas besoin d'être redémarré pour que les modifications soient appliquées.

Remarque

A partir de la version 1.12 de l'agent Java APM, la convention de dénomination des sondes Servlet, HttpClient et OSB est améliorée et simplifiée. Par conséquent, la règle replace_all_patterns de suppression de l'ID hexadécimal et des numéros n'est plus incluse par défaut dans le fichier ProbeConfig.acml. Cela s'applique aux sections SERVLET, HTTP_CLIENT et OSB.

Si votre scénario spécifique le nécessite encore, ajoutez à nouveau ce qui suit dans le fichier après la mise à niveau de l'agent Java APM :
# Hex ID and numbers
-
      pattern: "([a-fA-F\._\:-]*[0-9]+){2,}[a-fA-F_\:-]*([/\.])?"
      replacement: "*$2"

Configuration d'une sonde personnalisée

Vous pouvez configurer une sonde personnalisée pour surveiller des classes supplémentaires et obtenir des détails propres à l'application.

Une sonde personnalisée est utile lorsque l'ensemble de sondes intégré disponible dans le fichier ProbeConfig.acml ne répond pas aux exigences de surveillance. Par exemple, pour surveiller un thread d'arrière-plan qui n'est pas surveillé à l'aide des sondes par défaut, vous pouvez configurer une sonde personnalisée.

Pour configurer une sonde personnalisée, procédez comme suit :

  1. Configurez un fichier DirectivesConfig.acml pour indiquer les éléments (classes, methods ou annotations) à surveiller. Pour plus d'informations, reportez-vous à la section DirectivesConfig.acml File Configuration.
  2. Ajoutez le fichier DirectivesConfig.acml au répertoire oracle-apm-agent/config.
    Il est désormais en phase d'abandon de spécifier le fichier DirectivesConfig.acml à l'aide des éléments suivants dans le script de démarrage du serveur d'applications :
    -Dcom.oracle.apm.agent.customDirectivesFile=<Path_to_DirectivesConfig.acml_file>
    Supprimez l'argument ci-dessus du script de démarrage de votre application si vous avez précédemment spécifié le fichier DirectivesConfig.acml de cette manière.
  3. Redémarrez le serveur d'applications si un nouveau fichier DirectivesConfig.acml est spécifié.

    Les modifications apportées au fichier DirectivesConfig.acml prennent effet après le redémarrage du serveur d'applications.

    Le redémarrage du serveur d'applications est requis lors de la spécification d'un nouveau fichier DirectivesConfig.acml ou de la suppression du fichier.

    Le redémarrage du serveur d'applications n'est pas nécessaire si vous effectuez l'une des opérations suivantes :
    • Modifiez span_name.
    • Ajoutez, modifiez ou supprimez tags, logs ou Variables avancées dans un fichier DirectivesConfig.acml existant déjà en vigueur.
    Le redémarrage du serveur d'applications est requis si vous modifiez d'autres paramètres du tableau ci-dessous sous DirectivesConfig.acml Parameters.

Configuration du fichier DirectivesConfig.acml

Pour configurer le fichier DirectivesConfig.acml, vérifiez les éléments suivants :

Paramètres DirectivesConfig.acml

Voici des informations sur les paramètres que vous pouvez spécifier dans le fichier DirectivesConfig.acml.

Au moins un des paramètres suivants, MUST, doit être spécifié dans le fichier DirectivesConfig.acml :

  • class_name
  • class_name_regex
  • class_annotation
  • method_annotation
  • class_annotation_regex
  • method_annotation_regex
Paramètre Description Exemple
label

Libellé unique pour la directive. Ce paramètre est obligatoire.

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

Nom de la classe à surveiller. Vous devez indiquer le nom complet de la classe, en incluant le package.

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

Modèle d'expression régulière permettant de surveiller toutes les classes correspondantes.

Pour le modèle d'expression régulière, au lieu d'utiliser "." pour le package, utilisez "/". Par exemple, si vous voulez surveiller une classe nommée a.b.c.d.ClassName, le modèle d'expression régulière doit correspondre à a/b/c/d/ClassName.

Si class_name_regex et class_name sont spécifiés, class_name est ignoré.

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

Nom de la méthode à surveiller. Cela n'inclut pas les paramètres de méthode.

Si method_name n'est pas spécifié, toutes les méthodes sont surveillées.

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

Modèle d'expression régulière permettant de surveiller toutes les méthodes correspondantes.

Si method_name_regex n'est pas spécifié, toutes les méthodes sont surveillées.

Si method_name_regex et method_name sont spécifiés, method_name est ignoré.

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

Nom complet de la classe de l'annotation à surveiller. Tous les éléments class avec l'annotation spécifiée sont surveillés.

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

Nom complet de la classe de l'annotation à surveiller. Tous les éléments method avec l'annotation spécifiée sont surveillés.

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

Modèle d'expression régulière permettant de surveiller toutes les annotations de classe correspondantes.

Pour le modèle d'expression régulière, au lieu d'utiliser "." pour le package, utilisez "/". La valeur doit également commencer par "L" et se terminer par " ;". Par exemple, si vous voulez surveiller une annotation nommée a.b.c.d.Annotation, le modèle d'expression régulière doit correspondre à La/b/c/d/Annotation;.

Si class_annotation_regex et class_annotation sont spécifiés, class_annotation est ignoré.

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

Modèle d'expression régulière permettant de surveiller toutes les annotations de méthode correspondantes.

Pour le modèle d'expression régulière, au lieu d'utiliser "." pour le package, utilisez "/". La valeur doit également commencer par "L" et se terminer par " ;". Par exemple, si vous voulez surveiller une annotation nommée a.b.c.d.Annotation, le modèle d'expression régulière doit correspondre à La/b/c/d/Annotation;.

Si method_annotation_regex et method_annotation sont spécifiés, method_annotation est ignoré.

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

Indiquez si les sous-classes de la classe cible doivent être surveillées. La valeur par défaut est false.

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

Nom de l'étendue créée lors de la surveillance. Si span_name n'est pas spécifié, "${class_name}.${method_name}" est utilisé par défaut.

Vous pouvez indiquer le nom de l'étendue, comme indiqué sous le libellé Test dans l'exemple ci-contre. Ce nom sera utilisé chaque fois que la cible surveillée est appelée.

Lorsque vous spécifiez le paramètre span_name, vous pouvez également utiliser les variables, ${variable_name} et Variables avancées pour obtenir des informations supplémentaires sur les paramètres que vous surveillez et les afficher au nom de l'étendue. Dans l'exemple ci-contre, sous le libellé Test2, la variable param# indique les paramètres correspondant à la méthode que vous surveillez.

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

Balises (noms et valeurs) à inclure dans l'étendue.

Comme pour le paramètre span_name, vous pouvez utiliser des variables lorsque vous spécifiez des valeurs pour tags afin d'obtenir et d'afficher des informations supplémentaires sur les paramètres que vous surveillez.

Les paramètres tags que vous définissez sont affichés sous la forme de dimensions dans l'interface utilisateur de l'explorateur de traces.

Pour les valeurs de balise, un type facultatif peut être spécifié. Vous pouvez spécifier une valeur de balise de type String, Boolean, Integer, Long, Float ou Double à l'aide de la syntaxe et du mot-clé appropriés (comme illustré dans l'exemple). La valeur de balise par défaut sera de type chaîne. Il sera utilisé si aucun type ou un type incompatible n'est spécifié. Si un type incompatible est spécifié pour une valeur de balise, le type sera rétabli à la valeur par défaut de String et un message de journal concernant l'incompatibilité sera affiché. La valeur de dimension d'étendue peut être confirmée via des requêtes avec des agrégations qui exploitent des valeurs numériques (le cas échéant) dans l'explorateur de traces.

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

Journaux (noms et valeurs) à inclure dans l'étendue.

Comme pour les paramètres span_name et tags, vous pouvez également utiliser des variables lorsque vous spécifiez des valeurs pour le paramètre logs afin d'obtenir et d'afficher des informations supplémentaires sur les paramètres que vous surveillez.

La valeur logs que vous indiquez apparaît sous la forme Journaux d'étendue dans l'interface utilisateur de l'explorateur de traces.

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

span_name, variables de balises et de journaux

Lorsque vous spécifiez les paramètres span_name, tags et logs, vous pouvez utiliser les variables suivantes pour obtenir des informations supplémentaires :

  • class_name : nom de la classe surveillée, en incluant le package.
  • short_class_name : nom de la classe surveillée, en excluant le package.
  • method_name : nom de la méthode surveillée.
  • method_descriptor : format du descripteur de la signature de la méthode surveillée.
  • param# : paramètres de la méthode surveillée, où param1 désigne le premier paramètre, param2 le deuxième paramètre, etc.
  • this : objet surveillé. Si l'élément method surveillé est de type static, la variable this n'est pas disponible.
  • return : valeur renvoyée de la méthode surveillée.
    Remarque

    La variable return peut uniquement être utilisée pour le paramètre tags et non pour le paramètre span_name.

Exemple DirectivesConfig.acml

Voici un exemple de fichier 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}"

En fonction de l'exemple ci-dessus :

  • La classe com.oracle.apm.samples.servlet.OutboundTestServlet.performHttpURLConnectionCall et ses sous-classes sont surveillées.
  • Le nom de l'étendue affiché dans l'explorateur de traces est OutboundTestServlet.performHttpURLConnectionCall.
  • Les balises targetURL et port sont ajoutées à l'étendue et utilisent les valeurs des premier et second paramètres de la méthode performHttpURLConnectionCall.

Les captures d'écran suivantes donnent un exemple de page de sonde personnalisée :

Capture d'écran de l'exemple de sonde personnalisée 1

Capture d'écran de l'exemple de sonde personnalisée 2

Variables avancées pour le sondage personnalisé

Lorsque vous utilisez une sonde personnalisée, vous pouvez configurer une syntaxe de commande avancée pour construire dynamiquement des variables à l'aide du chaînage de méthodes et de la manipulation de chaînes via des expressions régulières. Ces variables avancées peuvent être référencées dans les sections span_name, tags et logs, tout comme les autres variables mentionnées ci-dessus.

Workflow général pour l'utilisation des variables avancées
  1. Vérifiez comment configurer la sonde personnalisée. Reportez-vous à Configuration d'une sonde personnalisée.
  2. Vérifiez la syntaxe de la chaîne de commandes. Reportez-vous à Syntaxe de la chaîne de commande.
  3. Voyez les exemples. Reportez-vous à Exemples de variables avancées.

Syntaxe de chaîne de commande

Une chaîne de commandes se compose des trois parties suivantes :

Le symbole de barre verticale "|" est utilisé pour indiquer la canalisation de l'objet de départ vers la première commande de chaîne et la canalisation de l'objet de sortie d'une commande de chaîne vers la suivante.

Heure d'exécution

Les chaînes de commandes sont exécutées avant ou après l'appel de la méthode surveillée de la sonde personnalisée. Cette valeur est spécifiée par l'heure d'exécution, qui apparaît avant le SOI.

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

Les chaînes de commande ne sont pas toutes compatibles avec les deux temps d'exécution : lorsque return est utilisé en tant que SOI ou en tant que paramètre dans une commande de méthode, le temps d'exécution suivant doit être utilisé. En effet, l'objet renvoyé n'est disponible qu'après l'appel de la méthode surveillée. Lorsque d'autres variables sont utilisées en tant que SOI ou paramètres dans les commandes de méthode, les temps d'exécution dépendent des chaînes référencées.

Par exemple, définissez chain1 et chain2, où chain2 utilise chain1 comme SOI ou paramètre pour une commande de méthode. chain1 doit être défini avant chain2 si les deux chaînes utilisent la même durée d'exécution. Sinon, chain1 doit avoir une durée d'exécution antérieure et chain2 doit avoir une durée d'exécution postérieure.

Pour plus d'informations sur l'utilisation des SOI et des commandes de méthode, reportez-vous à la section Identifiant de l'objet de début ci-dessous.

Identifiant de l'objet de début

Un identifiant d'objet de début (SOI) peut être des objets associés à :

  • Mots-clés prédéfinis : this, return et param#.

  • Sortie d'une chaîne identifiée par sa clé.

Les durées d'exécution peuvent être associées à la syntaxe SOI.

SOI Description Heure d'exécution possible Syntaxe Exemple
ThisSOI La chaîne est exécutée sur l'objet spécifié par class_name dans le fichier DirectivesConfig.acml. before ou after <this SOI> ::= [before || after] this thisSOIchain: before this | method (public getAddress ())
ParamSOI La chaîne est exécutée sur l'objet spécifié par param# dans le fichier DirectivesConfig.acml.

Il s'agit de paramètres du procédé surveillé.

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

param1 indique le premier paramètre.

ReturnSOI La chaîne est exécutée sur l'objet spécifié par return dans le fichier DirectivesConfig.acml.

Il s'agit de la valeur renvoyée par la méthode surveillée.

after <return_SOI> ::= [after] return returnSOIchain: after return | method (public getAddress ())
StaticSOI La chaîne n'est démarrée avec aucun objet. before or after <static SOI> ::= [before || after] static staticSOIchain: before static | static method((com.test.beans.Employee)(public getLevel()))
VariableSOI La chaîne est exécutée sur l'objet spécifié par l'une des variables ci-dessus définies dans le fichier 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)

Séquence de commande de chaîne

Une séquence de commandes de chaîne se compose d'une ou de plusieurs commandes de chaîne.

Syntaxe : <chain_command_sequence> ::= <chain_command> || <chain_command> | <chain_command_sequence>

Types de commande de chaîne

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

Commande de méthode

Une commande de méthode est utilisée pour appeler une méthode. La sortie d'une commande de méthode est l'objet de retour de cette méthode spécifique.

Une commande de méthode consiste en une visibilité de méthode, un nom de méthode et une séquence de paramètres. Cette opération imite la signature de méthode.

La syntaxe doit ressembler à ce qui suit :

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

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

La valeur package permet d'indiquer une méthode ou un champ de visibilité privé (sans modificateur) de package.

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

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

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

Exemples de commandes de méthode

  • Cette chaîne affiche this en tant qu'objet utilisateur. Cette chaîne appelle la méthode getAddress publique dans la classe Utilisateur. La sortie de cette chaîne sera la représentation sous forme de chaîne de l'adresse de cet utilisateur.
    addresschain: this | method (public getAddress ())
  • Cette chaîne appelle la méthode public setName sur l'utilisateur et définit le nom sur "John Smith". Etant donné que cette méthode set n'a pas de valeur renvoyée, la sortie de cette chaîne sera NULL. Cette chaîne montre comment utiliser les paramètres scalaires dans les commandes de méthode.
    testSetupVar: this | method(public setName(String "John", String "Smith"))
  • Cette chaîne utilise param1 (premier paramètre de la méthode surveillée) en tant que paramètre pour la méthode que nous appelons.
    testParamAsParam: this | method(public incUserId(param1))
  • Cette chaîne utilise une autre variable, dans ce cas testParamAsParam, en tant que paramètre pour la méthode.
    testVarAsParam: this | method(public incUserId(testParamAsParam))
  • Cette chaîne appelle explicitement la méthode super.
    invokeUsingSuper: this | method(private super.overloadPrivate(String "string3", int 2222))

Commande de champ

Une commande de champ est utilisée pour inspecter les valeurs de champ. La sortie d'une commande de champ est l'objet dans ce champ spécifique.

Une commande de méthode consiste en la visibilité des champs et le nom des champs.

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

Exemples de commandes sur site

L'exemple ci-dessous suppose que this est un objet utilisateur. Nous accédons ici aux champs de visibilité variée dans la classe Utilisateur. La sortie de chaque chaîne correspond à la valeur du champ respectif.
fieldPublic: this | field(public firstName)
fieldProtected: this | field (protected lastName) 
fieldPackagePrivate: this | field (package middleName)
fieldPrivate: this | field (private maidenName)

Commande de méthode statique

Une commande de méthode statique est utilisée pour appeler une méthode statique. Le résultat d'une commande de méthode statique est l'objet de retour de cette méthode spécifique.

Une commande de méthode se compose d'une classe de début, d'une visibilité de méthode, d'un nom de méthode et d'une séquence de paramètres. Cela imite la signature de la méthode.

La syntaxe doit ressembler à ce qui suit :
<static_method_command> ::= static method((<starting_class>)(<visibility> <java_identifier> (<parameter_sequence>)))

La classe de départ est la classe dans laquelle se trouve la méthode statique.

Exemples de commandes de méthode statique
  • Cette chaîne commence sans objet. Cette chaîne appelle la méthode getlevel publique dans la classe Employee. La sortie de cette chaîne sera la représentation en chaîne du niveau de cet employé.
  • staticMethodPublic: static | static method((com.test.beans.Employee)(public getLevel()))
  • L'utilisation d'autres visibilités et de différents types de paramètres de méthode est la même que dans les exemples de commande de méthode.

Commande de champ statique

Une commande de champ statique est utilisée pour inspecter les valeurs de champ statique. La sortie d'une commande de champ statique est l'objet de ce champ spécifique.

Une commande de méthode se compose d'une classe de début, d'une visibilité de champ et d'un nom de champ.

Syntaxe :

La syntaxe doit ressembler à ce qui suit :
<static_field_command> ::= static field ((<starting_class>)(<visibility> <java_identifier>))

Exemples de commandes de champ statique :

L'exemple ci-dessous suppose que this est un objet utilisateur. Nous accédons ici aux champs de visibilité variée dans la classe User. La sortie de chaque chaîne est la valeur du champ respectif.

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

L'utilisation d'autres visibilités est la même que dans les exemples de commande sur le terrain.

Commande Regex

Une commande regex est utilisée pour rechercher et/ou remplacer les chaînes résultant du SOI, les valeurs renvoyées par les commandes de méthode ou les valeurs de champ. La sortie d'une commande regex est une chaîne.

Une commande regex se compose de la chaîne regex. Le cas échéant, il peut également s'agir d'une chaîne de remplacement et indiquer si toutes les occurrences doivent être remplacées.

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

Exemples de commandes Regex

  • Après avoir obtenu l'adresse " 100 Oracle Pkway, Redwood City, CA 94065 ", remplacez le premier " Pk " par " This " pour obtenir " 100 Oracle Thatway, Redwood City, CA 94065
    replaceFirstChain : this | method (public getStreet()) | regex(Pk, This, first)
  • Après avoir obtenu l'adresse " 100 Oracle Pkway, Redwood City, CA 94065 ", remplacez tous les " 0 " par " 1 " pour obtenir " 111 Oracle Pkway, Redwood City, CA 94165 "
    replaceAllChain: this | method (public getStreet()) | regex(0, 1, all)

Exemples de variables avancées

Voici un exemple de chaîne de commandes dans le fichier 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) 

Vérification de l'exécution de la chaîne de variables exampleVar :

La chaîne exampleVar commence par l'objet Utilisateur spécifié dans "class_name". XX
  • La première commande de chaîne est une commande de méthode qui renvoie un objet Address. Par exemple : "100 Oracle Pkway, Redwood City, CA 94065".

  • La deuxième commande de chaîne est une commande de champ qui obtient la rue de l'adresse de la commande de champ précédente. Ce sera "Oracle Pkway".

  • La troisième commande de chaîne est une commande d'expression régulière qui remplace toutes les instances de "Pk" par "This" et renvoie "Oracle Thisway".

  • La dernière commande de chaîne est une commande d'expression régulière qui remplace la première instance de "This" par "That", renvoyant "OracleThatway".

Résultat final : lorsque vous examinez les dimensions de cette étendue, vous voyez une balise appelée exampleVarTag avec la valeur "OracleThatway". La spécification de exampleVarTag: "${exampleVar}" dans la section Balises était nécessaire pour visualiser cette dimension d'étendue.

Utilisez ACMLValidate pour vérifier la syntaxe du fichier

Lorsque vous utilisez des fichiers de type acml, vous pouvez utiliser l'utilitaire ACMLValidate pour vérifier la syntaxe des fichiers acml.

ACMLValidate est un utilitaire d'agent Java APM qui peut être utilisé pour vérifier et vérifier la syntaxe des fichiers acml suivants :
  • ProbeConfig.acml
  • DirectivesConfig.acml
  • CircuitBreaker.acml
Remarque

L'utilitaire ACMLValidate valide la syntaxe, mais pas les valeurs. Il est disponible à partir de la version 1.16 de l'agent Java APM.

Conditions préalables :

JDK disponible dans PATH ou définissez la variable d'environnement JAVA_HOME.

Emplacement:

L'utilitaire ACMLValidate se trouve sous le répertoire oracle-apm-agent/bin.

Exécutez ACMLValidate :

Pour appeler ACMLValidate, utilisez la commande suivante :
  • Sous Windows : ACMLValidate.bat

  • Pour Linux : ACMLValidate.sh

Syntaxe :
ACMLValidate.[bat|sh] <path to the acml file>
Exemple 1 :
oracle-apm-agent/bin % sh ACMLvalidate.sh  ../config/1.16.0.560/ProbeConfig.acml
Vous obtenez une sortie similaire à ce qui suit :
===============================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: PASSED
===============================================================================
Exemple 2 :
oracle-apm-agent/bin % sh ACMLvalidate.sh ../config/1.16.0.560/ProbeConfig.acml  
Vous obtenez une sortie similaire à ce qui suit :
===========================================================================
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]
===========================================================================