OpenTracing

Instana offre une grande souplesse quant à la manière de capturer les traces. Quelle que soit son origine, chaque trace est traitée de la même manière.

Si vous souhaitez bénéficier d'un contrôle et d'une flexibilité accrus quant aux éléments précis à tracer, « OpenTracing », une solution indépendante des fournisseurs ( API ) dédiée au traçage des applications, pourrait vous convenir.

Instana prend en charge l' OpenTracing, telle que définie dans la spécification OpenTracing, pour les langages suivants :

Technologie Informations
Crystal Pour plus d'informations, consultez la page « Surveillance » Crystal
Go Pour plus d'informations, consultez la page « Surveillance » Go
Java Pour plus d'informations, consultez la page Java Trace SDK
Node.js Pour plus d'informations, consultez les sites suivants : Instana, Node.js et API
PHP Pour plus d'informations, consultez la page « Surveillance » PHP
Python Pour plus d'informations, consultez la page « Prise en charge » : Instana, Python, 2.5.3 et versions antérieures
Ruby Pour plus d'informations, consultez la page Ruby Tracing SDK
Remarque : en général, l' OpenTracing e et les autres stratégies de traçage sont indépendantes les unes des autres. Bien que vous puissiez les utiliser de façon simultanée et indépendante, les stratégies elles-mêmes ne peuvent pas être combinées pour contribuer à des traces individuelles. Les exceptions, dans ce cas, sont Python et GoLang,, où OpenTracing fait également office de SDK Instana AutoTrace.

Exemple - traçage des applications Node.js

L'exemple suivant montre comment utiliser Instana OpenTracing pour les applications Node.js :

const instana = require('@instana/collector');

// Always initialize the sensor as the first module inside the application.
instana({
  tracing: {
    enabled: true
  }
});

const opentracing = require('opentracing');

// optionally use the opentracing provided singleton tracer wrapper
opentracing.initGlobalTracer(instana.opentracing.createTracer());

// retrieve the tracer instance from the opentracing tracer wrapper
const tracer = opentracing.globalTracer();

// start a new trace with an operation name
const span = tracer.startSpan('auth');

// mark operation as failed
span.setTag(opentracing.Tags.ERROR, true);

// finish the span and schedule it for transmission to instana
span.finish();

Meilleures pratiques OpenTracing

Lorsque vous utilisez OpenTracing,, vous pouvez consulter les bonnes pratiques suivantes sur OpenTracing pour tirer pleinement parti de votre tableau de bord Instana. Pour les étapes importantes indépendantes de la stratégie de traçage, consultez notre documentation sur les bonnes pratiques en matière de traçage personnalisé.

Balises pour un traitement amélioré

Instana effectue un traitement et une analyse avancés de toutes les données entrantes afin de surveiller, d'apprendre et d'alerter vos applications et votre infrastructure, y compris les segments d' OpenTracing.

Pour tirer parti des fonctionnalités d'analyse et de traitement, vous pouvez ajouter les balises OpenTracing appropriées à vos spans, ce qui permet à Instana d'analyser les spans reçus et d'y donner suite.

Par exemple, le code suivant, disponible à l'adresse PythonOpenTracing, fournit quelques informations :

import opentracing

with opentracing.tracer.start_active_span('vanilla') as pscope:
  # ...
  # do something that takes 50ms
  # ...
  pscope.span.log_kv({"foo": "bar"})

Ce code indique qu'il s'agit d'un élément « span » nommé vanilla qui a pris 50 ms. Le type de segment (par exemple, un segment « HTTP », « RPC » ou « Messaging ») est inconnu. Il manque des informations, notamment concernant la communication avec tout autre composant de votre infrastructure.

Par contre, si vous fournissez les balises contextuelles OpenTracing appropriées, Instana peut mieux analyser et extraire des informations de cette étendue pour pouvoir agir dessus.

import opentracing
import opentracing.ext.tags as ext

with opentracing.tracer.start_active_span('webserver') as pscope:
    pscope.span.set_tag(ext.SPAN_KIND, "entry")
    pscope.span.set_tag(ext.PEER_HOSTNAME, "localhost")
    pscope.span.set_tag(ext.HTTP_URL, "/python/simple/two")
    pscope.span.set_tag(ext.HTTP_METHOD, "POST")
    pscope.span.log_kv({"foo": "bar"})

    # ...
    # work that took 50ms
    # ...

    pscope.span.set_tag(ext.HTTP_STATUS_CODE, 204)

Cette section annotée fournit à Instana des informations supplémentaires sur ce qui s'est passé dans le contexte de cette section. D'après les balises fournies, vous savez qu'il s'agit d'une requête entrante adressée au /python/simple/two serveur web et que le code d'état HTTP renvoyé était 204.

Une section annotée, telle que mentionnée précédemment, permet à Instana d'extraire des services, de surveiller les connexions (et leur état) et, globalement, d'offrir une expérience plus riche dans votre tableau de bord.

Pour plus d'informations, consultez la spécification « OpenTracing », qui définit la liste officielle de toutes les balises « OpenTracing » prises en charge.

La balise peer-service est facultative

Vous devez définir la peer.service balise si vous ne savez pas si le côté distant est instrumenté. En général, il n'est pas nécessaire de définir la peer.service balise si Instana surveille le côté distant. Dans ce cas, un nom de service est attribué automatiquement. Si la balise peer.service est définie dans l'appel client et que le serveur est instrumenté et possède un nom de service personnalisé, les résultats ne sont pas définis.

Pour plus d'informations, consultez le portail OpenTracing.