OpenTracing

Instana offre la flessibilità necessaria per decidere come acquisire le tracce. Indipendentemente dalla sua origine, ogni traccia viene trattata allo stesso modo.

Se avete bisogno di un maggiore controllo e di una maggiore flessibilità su ciò che viene tracciato, OpenTracing, un’ API a indipendente dal fornitore per il tracciamento delle applicazioni, è la soluzione che fa per voi.

Instana supporta l' OpenTracing, come definito nella specifica OpenTracing, per i seguenti linguaggi:

Tecnologia Dettagli
Crystal Per ulteriori informazioni, consultare la sezione "Monitoraggio" all'indirizzo Crystal
Go Per ulteriori informazioni, consultare la sezione "Monitoraggio" all'indirizzo Go
Java Per ulteriori informazioni, consultare la pagina Java Trace SDK
Node.js Per ulteriori informazioni, consultare Instana Node.js API
PHP Per ulteriori informazioni, consultare la sezione "Monitoraggio" all'indirizzo PHP
Python Per ulteriori informazioni, consultare la pagina "Supporta Instana Python 2.5.3 e versioni precedenti"
Ruby Per ulteriori informazioni, consultare Ruby Tracing SDK
Nota: di norma, l' OpenTracing e e le altre strategie di tracciamento sono indipendenti l'una dall'altra. Anche se è possibile utilizzare ciascuno simultaneamente e in modo indipendente, le strategie stesse non possono essere combinate per contribuire alle singole tracce. Le eccezioni, in questo caso, sono Python e GoLang,, dove OpenTracing funge anche da SDK per Instana e AutoTrace.

Esempio: tracciamento delle applicazioni Node.js

L'esempio seguente mostra come utilizzare Instana OpenTracing per le applicazioni 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();

OpenTracing migliori pratiche

Quando utilizzi OpenTracing,, puoi consultare le seguenti best practice su OpenTracing per sfruttare appieno la tua dashboard su Instana. Per le fasi fondamentali indipendenti dalla strategia di tracciamento, consulta la nostra documentazione sulle migliori pratiche di tracciamento personalizzato.

Tag per un'elaborazione ottimizzata

Instana esegue elaborazioni e analisi avanzate di tutti i dati in entrata per monitorare, apprendere e inviare avvisi alle vostre applicazioni e alla vostra infrastruttura, compresi i segmenti di rete dell' OpenTracing.

Per poter usufruire dei vantaggi offerti dall'analisi e dall'elaborazione, è possibile aggiungere i tag OpenTracing appropriati ai propri span; ciò consentirà a Instana di analizzare gli span in arrivo e di agire di conseguenza.

Ad esempio, il seguente codice Python OpenTracing fornisce alcune informazioni:

import opentracing

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

Questo codice indica che si tratta di un elemento `span` denominato vanilla che ha richiesto 50 ms. Il tipo di span, ad esempio uno di tipo " HTTP ", " RPC " o "Messaging", è sconosciuto. Mancano alcune informazioni, come quelle relative alla comunicazione con qualsiasi altro componente della tua infrastruttura.

Se invece inserisci i tag di contesto appropriati ( OpenTracing ), Instana sarà in grado di analizzare e estrarre meglio le informazioni da quel tratto di testo su cui agire.

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)

Questo span annotato fornisce a Instana ulteriori informazioni su ciò che è accaduto nel contesto di questo span. Dai tag forniti, si evince che si tratta di una richiesta in entrata al server web indirizzata a /python/simple/two e che il codice di stato HTTP risultante era 204.

Un intervallo annotato, come quello menzionato in precedenza, consente a Instana di estrarre i servizi, monitorare le connessioni (e il loro stato) e, in generale, offrire un'esperienza più completa nella tua dashboard.

Per ulteriori informazioni, consultare la specifica OpenTracing, che definisce l'elenco ufficiale di tutti i tag OpenTracing supportati.

peer.service è facoltativo

È necessario impostare il peer.service tag se non si è certi che il lato remoto sia dotato di strumenti di monitoraggio. In generale, non è necessario impostare il peer.service tag se Instana monitora il lato remoto. In questo caso, il nome del servizio viene impostato automaticamente. Se peer.service è impostato nella chiamata del client e il server è strumentato e presenta un nome di servizio personalizzato, i risultati sono indefiniti.

Per ulteriori informazioni, consultare il portale OpenTracing.