Processeurs de télémétrie (préversion) – Azure Monitor Application Insights pour Java
Notes
La fonctionnalité de processeurs de télémétrie est désignée comme étant en préversion, car nous ne pouvons pas garantir la compatibilité descendante d’une version à l’autre en raison de l’état expérimental des conventions sémantiques d’attributs. Toutefois, la fonctionnalité a été testée et est prise en charge en production.
Application Insights Java 3.x peut traiter des données de télémétrie avant leur exportation.
Voici quelques cas d’utilisation :
- Masquer des données sensibles.
- Ajouter de manière conditionnelle des dimensions personnalisées.
- Mettre à jour le nom de l’étendue, qui est utilisé pour agréger des données de télémétrie similaires dans le portail Azure.
- Supprimer les attributs d’étendue spécifiques pour contrôler les coûts d’ingestion.
- Filtrer certaines métriques pour contrôler les coûts d’ingestion.
Notes
Si vous envisagez d’annuler des étendues spécifiques (entières) pour contrôler le coût d’ingestion, consultez Remplacements d’échantillonnage.
Terminologie
Avant d’en savoir plus sur les processeurs de télémétrie, vous devez comprendre les termes étendue et journal.
Une étendue est un type de télémétrie qui représente un des éléments suivants :
- Une requête entrante.
- Une dépendance sortante (par exemple, un appel distant à un autre service).
- Une dépendance « in-process » (par exemple, une tâche effectuée par les sous-composants du service).
Un journal est un type de télémétrie qui représente :
- des données de journal capturées à partir de Log4j, Logback et java.util.logging
Pour les processeurs de télémétrie, ces composants d’étendue/de journal sont importants :
- Nom
- Corps
- Attributs
Le nom de l’étendue est l’affichage principal utilisé pour les requêtes et les dépendances dans le portail Azure. Les attributs d’étendue représentent à la fois les propriétés standard et personnalisées d’une requête ou d’une dépendance donnée.
Le message ou le corps de la trace est l’affichage principal des journaux dans le portail Azure. Les attributs de journal représentent à la fois les propriétés standard et personnalisées d’un journal donné.
Types de processeurs de télémétrie
Actuellement, les quatre types de processeurs de télémétrie sont
- Processeurs d’attributs
- Processeurs d’étendue
- Processeurs de journaux
- Filtres de métriques
Un processeur d’attributs peut insérer, mettre à jour, supprimer ou hacher les attributs d’un élément de télémétrie (span
ou log
).
Il peut également utiliser une expression régulière pour extraire un ou plusieurs nouveaux attributs d’un attribut existant.
Un processeur d’étendues peut mettre à jour le nom de la télémétrie des requêtes et des dépendances. Il peut également utiliser une expression régulière pour extraire un ou plusieurs nouveaux attributs du nom de l’étendue.
Un processeur de journaux peut mettre à jour le nom de la télémétrie des journaux. Il peut également utiliser une expression régulière pour extraire un ou plusieurs nouveaux attributs du nom de journal.
Un filtre de métriques peut filtrer les métriques pour vous aider à contrôler le coût d’ingestion.
Notes
Actuellement, les processeurs de télémétrie traitent uniquement les attributs de type chaîne. Ils ne traitent pas les attributs de type booléen ou nombre.
Prise en main
Pour commencer, créez un fichier de configuration nommé applicationinsights.json. Enregistrez-le dans le même répertoire que le fichier applicationinsights-agent-*.jar. Utilisez le modèle suivant.
{
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
"preview": {
"processors": [
{
"type": "attribute",
...
},
{
"type": "attribute",
...
},
{
"type": "span",
...
},
{
"type": "log",
...
},
{
"type": "metric-filter",
...
}
]
}
}
Processeur d’attributs
Le processeur d’attributs modifie les attributs d’un élément span
ou log
. Il peut prendre en charge la possibilité d’inclure ou d’exclure span
ou log
. Il prend une liste d’actions qui sont exécutées dans l’ordre spécifié par le fichier de configuration. Le processeur prend en charge les actions suivantes :
insert
update
delete
hash
extract
mask
insert
L’action insert
insère un nouvel attribut dans l’élément de télémétrie où la key
n’existe pas encore.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "value1",
"action": "insert"
}
]
}
]
L’action insert
nécessite les paramètres suivants :
key
value
oufromAttribute
action
:insert
update
L’action update
met à jour un attribut dans un élément de télémétrie où la key
existe déjà.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"value": "newValue",
"action": "update"
}
]
}
]
L’action update
nécessite les paramètres suivants :
key
value
oufromAttribute
action
:update
delete
L’action delete
supprime un attribut d’un élément de télémétrie.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"action": "delete"
}
]
}
]
L’action delete
nécessite les paramètres suivants :
key
action
:delete
hash
L’action hash
hache (SHA1) une valeur d’attribut existante.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"action": "hash"
}
]
}
]
L’action hash
nécessite les paramètres suivants :
key
action
:hash
extract
Notes
La fonctionnalité extract
est disponible uniquement dans la version 3.0.2 et les versions ultérieures.
L’action extract
extrait des valeurs en suivant une règle d’expression régulière de la clé d’entrée vers les clés cibles spécifiées dans la règle. Si une clé cible existe déjà, l’action extract
remplace la clé cible. Cette action se comporte comme le paramètre toAttributes
du processeur d’étendue, où l’attribut existant est la source.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attribute1",
"pattern": "<regular pattern with named matchers>",
"action": "extract"
}
]
}
]
L’action extract
nécessite les paramètres suivants :
key
pattern
action
:extract
mask
Remarque
La fonctionnalité mask
est disponible uniquement dans la version 3.2.5 et les versions ultérieures.
L’action mask
masque les valeurs d’attribut à l’aide d’une règle d’expression régulière spécifiée dans pattern
et replace
.
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "attributeName",
"pattern": "<regular expression pattern>",
"replace": "<replacement value>",
"action": "mask"
}
]
}
]
L’action mask
nécessite les paramètres suivants :
key
pattern
replace
action
:mask
pattern
peut contenir un groupe nommé placé entre ?<
et >:
. Exemple : (?<userGroupName>[a-zA-Z.:\/]+)\d+
? Le groupe est (?<userGroupName>[a-zA-Z.:\/]+)
et le nom du groupe est userGroupName
. pattern
peut ensuite contenir le même groupe nommé placé entre ${
et }
suivi du masque. Exemple dans lequel le masque est ** : ${userGroupName}**
.
Pour obtenir des exemples de masquage, consultez Exemples de processeur de télémétrie.
Inclure des critères et exclure des critères
Les processeurs d’attributs prennent en charge les critères include
et exclude
facultatifs.
Un processeur d’attributs est appliqué uniquement à la télémétrie qui correspond à ses critères include
(si disponibles) et qui ne correspond pas à ses critères exclude
(si disponibles).
Pour configurer cette option, sous include
ou exclude
(ou les deux), spécifiez au moins un matchType
et spanNames
ou attributes
.
La configuration include
ou exclude
autorise plusieurs conditions spécifiées.
Pour qu’une correspondance soit établie, toutes les conditions spécifiées doivent prendre la valeur true.
Champs obligatoires :
matchType
contrôle la façon dont les éléments des tableauxspanNames
etattributes
sont interprétés. Les valeurs possibles sontregexp
etstrict
. Les correspondances des expressions régulières sont effectuées par rapport à la valeur entière de l’attribut. Par conséquent, si vous souhaitez faire correspondre une valeur contenantabc
n’importe où dans celle-ci, vous devez utiliser.*abc.*
.
Champs facultatifs :
spanNames
doit correspondre au moins à l’un des éléments.attributes
spécifie la liste des attributs par rapport auxquels établir une correspondance. Tous ces attributs doivent correspondre exactement pour qu’une correspondance soit établie.
Notes
Si les attributs include
et exclude
sont tous deux spécifiés, les propriétés include
sont vérifiées avant les propriétés exclude
.
Notes
Si la configuration include
ou exclude
n’a pas de spanNames
spécifiés, le critère de correspondance est appliqué à la fois sur les spans
et les logs
.
Exemple d’utilisation
"processors": [
{
"type": "attribute",
"include": {
"matchType": "strict",
"spanNames": [
"spanA",
"spanB"
]
},
"exclude": {
"matchType": "strict",
"attributes": [
{
"key": "redact_trace",
"value": "false"
}
]
},
"actions": [
{
"key": "credit_card",
"action": "delete"
},
{
"key": "duplicate_key",
"action": "delete"
}
]
}
]
Pour plus d’informations, consultez Exemples de processeurs de télémétrie.
Processeur d’étendue
Le processeur d’étendue modifie le nom ou les attributs d’une étendue en fonction de son nom. Il peut prendre en charge la possibilité d’inclure ou d’exclure des étendues.
Nommer une étendue
La name
section requiert le paramètre fromAttributes
. Les valeurs de ces attributs sont utilisées pour créer un nouveau nom, concaténées dans l’ordre spécifié par la configuration. Le processeur ne modifie le nom de l’étendue que si tous ces attributs sont présents sur l’étendue.
Le paramètre separator
est facultatif. Ce paramètre est une chaîne et vous pouvez utiliser des valeurs fractionnées.
Remarque
Si le changement de nom dépend du processeur d’attributs pour modifier les attributs, assurez-vous que le processeur d’étendue est spécifié après le processeur d’attributs dans la spécification du pipeline.
"processors": [
{
"type": "span",
"name": {
"fromAttributes": [
"attributeKey1",
"attributeKey2",
],
"separator": "::"
}
}
]
Extraire des attributs du nom d’étendue
La section toAttributes
répertorie les expressions régulières à mettre en correspondance avec le nom de l’étendue. Elle extrait des attributs en fonction des sous-expressions.
Le paramètre rules
est obligatoire. Ce paramètre répertorie les règles utilisées pour extraire des valeurs d’attribut du nom d’étendue.
Les noms d’attributs extraits remplacent les valeurs dans le nom de l’étendue. Chaque règle de la liste est une chaîne de modèle d’expression régulière (regex).
Voici comment les noms d’attributs extraits remplacent les valeurs :
- Le nom d’étendue est vérifié par rapport à l’expression régulière.
- Si l’expression régulière correspond, toutes les sous-expressions nommées de l’expression régulière sont extraites en tant qu’attributs.
- Les attributs extraits sont ajoutés à l’étendue.
- Chaque nom de sous-expression devient un nom d’attribut.
- La portion correspondante de la sous-expression devient la valeur de l’attribut.
- Le nom d’attribut extrait remplace la portion correspondante dans le nom de l’étendue. Si les attributs existent déjà dans l’étendue, ils sont remplacés.
Le processus est répété pour toutes les règles dans l’ordre spécifié. Chaque règle subséquente fonctionne sur le nom d’étendue qui est la sortie de la règle précédente.
"processors": [
{
"type": "span",
"name": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Attributs d’étendue courants
Cette section répertorie certains attributs d’étendue courants que les processeurs de télémétrie peuvent utiliser.
Étendues HTTP
Attribut | Type | Description |
---|---|---|
http.request.method (anciennement http.method ) |
string | Méthode de requête HTTP. |
url.full (étendue de client) ou url.path (étendue de serveur) (anciennement http.url ) |
string | URL complète de la requête HTTP sous la forme scheme://host[:port]/path?query[#fragment] . Le fragment n’est généralement pas transmis via HTTP. Toutefois, si le fragment est connu, il doit être inclus. |
http.response.status_code (anciennement http.status_code ) |
number | Code de statut de la réponse HTTP. |
network.protocol.version (anciennement http.flavor ) |
string | Type de protocole HTTP. |
user_agent.original (anciennement http.user_agent ) |
string | Valeur de l’en-tête HTTP User-Agent envoyé par le client. |
Étendues Java Database Connectivity
Le tableau suivant décrit les attributs que vous pouvez utiliser dans les étendues JDBC (Java Database Connectivity) :
Attribut | Type | Description |
---|---|---|
db.system |
string | Identificateur du produit SGBD (système de gestion de base de données) utilisé. Consultez les Conventions sémantiques pour les opérations de base de données. |
db.connection_string |
string | Chaîne de connexion utilisée pour se connecter à la base de données. Nous vous recommandons de supprimer les informations d’identification incorporées. |
db.user |
string | Nom d’utilisateur utilisé pour accéder à la base de données. |
db.name |
string | Chaîne utilisée pour signaler le nom de la base de données qui fait l’objet de l’accès. Dans les commandes qui changent de base de données, cette chaîne doit être définie sur la base de données cible, même en cas d’échec de la commande. |
db.statement |
string | Instruction de base de données en cours d’exécution. |
Inclure des critères et exclure des critères
Les processeurs d’étendues prennent en charge les critères include
et exclude
facultatifs.
Un processeur d’étendues est appliqué uniquement à la télémétrie qui correspond à ses critères include
(si disponibles) et qui ne correspond pas à ses critères exclude
(si disponibles).
Pour configurer cette option, sous include
ou exclude
(ou les deux), spécifiez au moins un matchType
et spanNames
ou l’étendue attributes
.
La configuration include
ou exclude
autorise plusieurs conditions spécifiées.
Pour qu’une correspondance soit établie, toutes les conditions spécifiées doivent prendre la valeur true.
Champs obligatoires :
matchType
contrôle la façon dont les éléments des tableauxspanNames
etattributes
sont interprétés. Les valeurs possibles sontregexp
etstrict
. Les correspondances des expressions régulières sont effectuées par rapport à la valeur entière de l’attribut. Par conséquent, si vous souhaitez faire correspondre une valeur contenantabc
n’importe où dans celle-ci, vous devez utiliser.*abc.*
.
Champs facultatifs :
spanNames
doit correspondre au moins à l’un des éléments.attributes
spécifie la liste des attributs par rapport auxquels établir une correspondance. Tous ces attributs doivent correspondre exactement pour qu’une correspondance soit établie.
Notes
Si les attributs include
et exclude
sont tous deux spécifiés, les propriétés include
sont vérifiées avant les propriétés exclude
.
Exemple d’utilisation
"processors": [
{
"type": "span",
"include": {
"matchType": "strict",
"spanNames": [
"spanA",
"spanB"
]
},
"exclude": {
"matchType": "strict",
"attributes": [
{
"key": "attribute1",
"value": "attributeValue1"
}
]
},
"name": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Pour plus d’informations, consultez Exemples de processeurs de télémétrie.
Processeur de journaux
Notes
Les processeurs de journaux sont disponibles à partir de la version 3.1.1.
Le processeur de journaux modifie soit le corps du message du journal, soit les attributs d’un journal en fonction du corps du message du journal. Il peut prendre en charge la possibilité d’inclure ou d’exclure des journaux.
Mettre à jour le corps du message du journal
La body
section requiert le paramètre fromAttributes
. Les valeurs de ces attributs sont utilisées pour créer un nouveau corps, concaténées dans l’ordre spécifié par la configuration. Le processeur change le corps du journal uniquement si tous ces attributs sont présents dans le journal.
Le paramètre separator
est facultatif. Ce paramètre est une chaîne. Vous pouvez le spécifier pour fractionner les valeurs.
Remarque
Si le changement de nom dépend du processeur d’attributs pour modifier les attributs, assurez-vous que le processeur de journaux est spécifié après le processeur d’attributs dans la spécification du pipeline.
"processors": [
{
"type": "log",
"body": {
"fromAttributes": [
"attributeKey1",
"attributeKey2",
],
"separator": "::"
}
}
]
Extraire les attributs du corps du message du journal
La section toAttributes
répertorie les expressions régulières à faire correspondre au corps du message du journal. Elle extrait des attributs en fonction des sous-expressions.
Le paramètre rules
est obligatoire. Ce paramètre répertorie les règles utilisées pour extraire des valeurs d’attribut du corps.
Les noms d’attributs extraits remplacent les valeurs dans le corps du message du journal. Chaque règle de la liste est une chaîne de modèle d’expression régulière (regex).
Voici comment les noms d’attributs extraits remplacent les valeurs :
- Le corps du message du journal est comparé à l’expression régulière.
- Si l’expression régulière correspond, toutes les sous-expressions nommées de l’expression régulière sont extraites en tant qu’attributs.
- Les attributs extraits sont ajoutés au journal.
- Chaque nom de sous-expression devient un nom d’attribut.
- La portion correspondante de la sous-expression devient la valeur de l’attribut.
- Le nom d’attribut extrait remplace la partie correspondante dans le nom du journal. Si les attributs existent déjà dans le journal, ils sont remplacés.
Le processus est répété pour toutes les règles dans l’ordre spécifié. Chaque règle subséquente fonctionne sur le nom de journal qui est le résultat de la règle précédente.
"processors": [
{
"type": "log",
"body": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Inclure des critères et exclure des critères
Les processeurs de journaux prennent en charge les critères include
et exclude
facultatifs.
Un processeur de journaux est appliqué uniquement à la télémétrie qui correspond à ses critères include
(si disponibles) et qui ne correspond pas à ses critères exclude
(si disponibles).
Pour configurer cette option, sous include
ou exclude
(ou les deux), spécifiez matchType
et attributes
.
La configuration include
ou exclude
autorise plusieurs conditions spécifiées.
Pour qu’une correspondance soit établie, toutes les conditions spécifiées doivent prendre la valeur true.
- Champ obligatoire :
matchType
contrôle la façon dont les éléments des tableauxattributes
sont interprétés. Les valeurs possibles sontregexp
etstrict
. Les correspondances des expressions régulières sont effectuées par rapport à la valeur entière de l’attribut. Par conséquent, si vous souhaitez faire correspondre une valeur contenantabc
n’importe où dans celle-ci, vous devez utiliser.*abc.*
.attributes
spécifie la liste des attributs par rapport auxquels établir une correspondance. Tous ces attributs doivent correspondre exactement pour qu’une correspondance soit établie.
Notes
Si les attributs include
et exclude
sont tous deux spécifiés, les propriétés include
sont vérifiées avant les propriétés exclude
.
Notes
Les processeurs de journaux ne prennent pas en charge spanNames
.
Exemple d’utilisation
"processors": [
{
"type": "log",
"include": {
"matchType": "strict",
"attributes": [
{
"key": "attribute1",
"value": "value1"
}
]
},
"exclude": {
"matchType": "strict",
"attributes": [
{
"key": "attribute2",
"value": "value2"
}
]
},
"body": {
"toAttributes": {
"rules": [
"rule1",
"rule2",
"rule3"
]
}
}
}
]
Pour plus d’informations, consultez Exemples de processeurs de télémétrie.
Filtre de métriques
Notes
Les filtres de métriques sont disponibles à partir de la version 3.1.1.
Les filtres de métriques sont utilisés pour exclure certaines métriques afin de contrôler le coût d’ingestion.
Les filtres de métriques prennent en charge uniquement les critères exclude
. Les métriques qui correspondent à ses critères exclude
ne sont pas exportées.
Pour configurer cette option, sous exclude
, spécifiez le matchType
d’un ou de plusieurs metricNames
.
- Champ obligatoire :
matchType
contrôle la façon dont les éléments dansmetricNames
sont mis en correspondance. Les valeurs possibles sontregexp
etstrict
. Les correspondances des expressions régulières sont effectuées par rapport à la valeur entière de l’attribut. Par conséquent, si vous souhaitez faire correspondre une valeur contenantabc
n’importe où dans celle-ci, vous devez utiliser.*abc.*
.metricNames
doit correspondre au moins à l’un des éléments.
Exemple d’utilisation
L’exemple suivant montre comment exclure des métriques nommées « metricA » et « metricB » :
"processors": [
{
"type": "metric-filter",
"exclude": {
"matchType": "strict",
"metricNames": [
"metricA",
"metricB"
]
}
}
]
L’exemple suivant montre comment désactiver toutes les métriques, y compris les métriques de performances collectées automatiquement par défaut, comme le processeur et la mémoire.
"processors": [
{
"type": "metric-filter",
"exclude": {
"matchType": "regexp",
"metricNames": [
".*"
]
}
}
]
Métriques par défaut capturées par l’agent Java
Nom de métrique | Type de métrique | Description | Filtrable |
---|---|---|---|
Current Thread Count |
métriques personnalisées | Voir ThreadMXBean.getThreadCount(). | Oui |
Loaded Class Count |
métriques personnalisées | Voir ClassLoadingMXBean.getLoadedClassCount(). | Oui |
GC Total Count |
métriques personnalisées | Somme des nombres sur toutes les instances GarbageCollectorMXBean (diff depuis le dernier rapport). Voir GarbageCollectorMXBean.getCollectionCount(). | Oui |
GC Total Time |
métriques personnalisées | Somme du temps entre toutes les instances GarbageCollectorMXBean (diff depuis le dernier rapport). Voir GarbageCollectorMXBean.getCollectionTime(). | Oui |
Heap Memory Used (MB) |
métriques personnalisées | Voir MemoryMXBean.getHeapMemoryUsage().getUsed(). | Oui |
% Of Max Heap Memory Used |
métriques personnalisées | java.lang:type=Memory : quantité maximale de mémoire en octets. Voir MemoryUsage. | Oui |
\Processor(_Total)\% Processor Time |
métriques par défaut | Différence entre les compteurs du nombre de cycles de la charge du processeur à l’échelle du système (utilisateur et système uniquement) divisée par le nombre de processeurs logiques dans un intervalle de temps donné | non |
\Process(??APP_WIN32_PROC??)\% Processor Time |
métriques par défaut | Voir OperatingSystemMXBean.getProcessCpuTime() (différence depuis le dernier rapport, normalisée par heure et nombre de processeurs). | Non |
\Process(??APP_WIN32_PROC??)\Private Bytes |
métriques par défaut | Somme de MemoryMXBean.getHeapMemoryUsage() et MemoryMXBean.getNonHeapMemoryUsage(). | Non |
\Process(??APP_WIN32_PROC??)\IO Data Bytes/sec |
métriques par défaut | /proc/[pid]/io Somme d’octets lus et écrits par le processus (différence depuis le dernier rapport). Voir proc(5). |
Non |
\Memory\Available Bytes |
métriques par défaut | Voir OperatingSystemMXBean.getFreePhysicalMemorySize(). | non |
Forum aux questions
Pourquoi le processeur de journaux ne traite-t-il pas les fichiers journaux en utilisant TelemetryClient.trackTrace() ?
TelemetryClient.trackTrace() fait partie du pont du SDK classique Application Insights, et les processeurs de journaux fonctionnent uniquement avec la nouvelle instrumentation basée sur OpenTelemetry.