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.
Les tâches de test suivantes sont traitées dans cette rubrique :
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
etcapture_response_payload
dans le fichierProbeConfig.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
etResponsePayload
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ètrehttpclient_async_one_span
dans la section HTTP_CLIENT du fichierProbeConfig.acml
et définissez-le surfalse
.#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.
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.
# 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 :
- Configurez un fichier
DirectivesConfig.acml
pour indiquer les éléments (classes
,methods
ouannotations
) à surveiller. Pour plus d'informations, reportez-vous à la section DirectivesConfig.acml File Configuration. - Ajoutez le fichier
DirectivesConfig.acml
au répertoireoracle-apm-agent/config
.Il est désormais en phase d'abandon de spécifier le fichierSupprimez l'argument ci-dessus du script de démarrage de votre application si vous avez précédemment spécifié le fichierDirectivesConfig.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>
DirectivesConfig.acml
de cette manière. - 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 fichierDirectivesConfig.acml
existant déjà en vigueur.
- Modifiez
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. |
|
class_name |
Nom de la classe à surveiller. Vous devez indiquer le nom complet de la classe, en incluant le package. |
|
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 Si |
|
method_name |
Nom de la méthode à surveiller. Cela n'inclut pas les paramètres de méthode. Si |
|
method_name_regex |
Modèle d'expression régulière permettant de surveiller toutes les méthodes correspondantes. Si Si |
|
class_annotation |
Nom complet de la classe de l'annotation à surveiller. Tous les éléments |
|
method_annotation |
Nom complet de la classe de l'annotation à surveiller. Tous les éléments |
|
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 Si |
|
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 Si |
|
include_sub_classes |
Indiquez si les sous-classes de la classe cible doivent être surveillées. La valeur par défaut est |
|
span_name |
Nom de l'étendue créée lors de la surveillance. Si Vous pouvez indiquer le nom de l'étendue, comme indiqué sous le libellé Lorsque vous spécifiez le paramètre |
|
tags |
Balises (noms et valeurs) à inclure dans l'étendue. Comme pour le paramètre Les paramètres 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. |
|
logs |
Journaux (noms et valeurs) à inclure dans l'étendue. Comme pour les paramètres La valeur |
|
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émentmethod
surveillé est de typestatic
, la variablethis
n'est pas disponible.return
: valeur renvoyée de la méthode surveillée.Remarque
La variablereturn
peut uniquement être utilisée pour le paramètretags
et non pour le paramètrespan_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
etport
sont ajoutées à l'étendue et utilisent les valeurs des premier et second paramètres de la méthodeperformHttpURLConnectionCall
.
Les captures d'écran suivantes donnent un exemple de page de sonde personnalisée :
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.
- Vérifiez comment configurer la sonde personnalisée. Reportez-vous à Configuration d'une sonde personnalisée.
- Vérifiez la syntaxe de la chaîne de commandes. Reportez-vous à Syntaxe de la chaîne de commande.
- Voyez les exemples. Reportez-vous à Exemples de variables avancées.
Syntaxe de chaîne de commande
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
etparam#
. -
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 ())
|
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"))
|
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éthodegetAddress
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
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.
<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.
- 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 :
<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
:
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
.
acml
suivants :
- ProbeConfig.acml
- DirectivesConfig.acml
- CircuitBreaker.acml
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 :
ACMLValidate
, utilisez la commande suivante :
-
Sous Windows :
ACMLValidate.bat
-
Pour 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]
===========================================================================