Tutoriel : Intégration d'un planificateur personnalisé à l'aide du SDK de traçage d' Instana
Les planificateurs sont des outils qui permettent d'exécuter des travaux régulièrement. Le planificateur d' Java s le plus populaire est Quartz, qui est pris en charge d'emblée par l' Instana.
Toutefois, si vous disposez d'un planificateur interne personnalisé qui n'est pas pris en charge, vous pouvez utiliser le SDK de traçage d' Java s pour ajouter la fonctionnalité de traçage à votre planificateur.
Ce tutoriel explique comment procéder.
Exemple de code
Le code d'exemple du custom-scheduler-example tutoriel est disponible sur github.com. Il implémente un planificateur simple, qui appelle un service Hello World sur http://localhost:8080/ toutes les 4 secondes et imprime la réponse à la console.
Source non surveillée par Instana
Si vous exécutez l'exemple, vous voyez que les appels HTTP proviennent d'une source non surveillée.

Pourquoi la source n'est-elle pas surveillée ?
Le code d'exemple utilise le client Apache HTTP pour l'appel sortant. Le client HTTP Apache est pris en charge par l'agent Instana. Alors pourquoi ne voyons-nous pas la source de la demande dans Instana ?
Vous ne la voyez pas parce qu'Instana n'instrumente les appels sortants que s'ils se produisent dans un contexte de trace existant. Dans l'exemple, l'appel sortant est déclenché par le planificateur personnalisé qui n'est pas instrumenté. Par conséquent, l'appel n'est pas instrumenté, car aucun contexte de trace existant n'a été trouvé.
Activation du traçage pour le planificateur personnalisé
Pour activer la traçabilité pour le planificateur personnalisé, vous devez d'abord ajouter le SDK de traçabilité d' Java s en tant que dépendance. Pour Maven, cela ressemble à ceci :
<dependency>
<groupId>com.instana</groupId>
<artifactId>instana-java-sdk</artifactId>
<version>1.2.0</version>
</dependency>
Pour créer un contexte de trace chaque fois que le travail HttpClientJob est appelé, ajoutez une annotation @Span à la méthode run() du travail :
@Span(type = Span.Type.ENTRY, value = "my-custom-scheduler")
public void run() {
// ...
}
Cette annotation indique à l'agent Java de générer un span ENTRY chaque fois que la méthode run() est appelée.
Troisièmement, ajoutez ce qui suit au fichier configuration.yaml des agents Instana pour indiquer que les classes Java dans le package com.instana.sample.* doivent être analysées pour l'annotation @Span :
com.instana.plugin.javatrace:
instrumentation:
sdk:
packages:
- 'com.instana.sample'
Désormais, chaque appel à HelloWorldJob.run() crée un contexte de trace, et la requête HTTP sortante est effectuée dans ce contexte de trace. Cela s'affiche comme suit dans Instana :

La source de la demande HTTP GET est maintenant tracée, y compris toutes les métadonnées collectées à partir de l'instrumentation automatique du client HTTP Apache :

Le travail du planificateur lui-même s'affiche comme un appel vide avec une source non surveillée :

Ajout de balises
Comme indiqué dans la section précédente, la tâche du planificateur est représentée sous la forme d'un appel vide, sans aucune annotation. Vous pouvez appeler la méthode SpanSupport.annotate() du kit SDK pour ajouter des métadonnées personnalisées. Appelez simplement SpanSupport.annotate() au début de la méthode HttpClientJob.run() :
Override
@Span(type = Span.Type.ENTRY, value = SPAN_NAME)
public void run() {
SpanSupport.annotate(Span.Type.ENTRY, SPAN_NAME, "tags.batch.job", "hello world job");
// ...
Lors de la définition tags.batch.job de la ENTRY portée de la tâche, conformément aux conventions sémantiques spécifiées dans OpenTracing's, Instana traite désormais cette portée comme si elle était de type BATCH et considère qu'il n'y a pas de source manquante.

Vous pouvez également rechercher la balise personnalisée dans la vue Analytique illimitée :

Marquage d'un span comme étant erroné
À un moment ou à un autre, vous serez amené à marquer un travail par lots comme étant erroné. Cela peut facilement être réalisé en ajoutant la error balise, comme indiqué dans les conventions sémantiques de OpenTracing's.
SpanSupport.annotate(Span.Type.ENTRY, SPAN_NAME, "tags.error", "true");
En ajoutant cette balise, l'appel apparaît comme erroné dans Instana.

Récapitulatif et perspective
Dans ce tutoriel, nous avons créé un contexte de trace pour le planificateur personnalisé, ce qui permet au travail par lots d'être reconnu comme source des appels HTTP sortants dans Instana.
Pour une référence complète sur notre SDK, consultez le JavaDocdu SDK. Par exemple, les annotations @SpanParam et @SpanReturn facilitent grandement la capture des paramètres ou des valeurs de retour sous forme d'informations supplémentaires des spans, ce qui peut être plus pratique que d'appeler explicitement SpanSupport.annotate() dans certains scénarios.