Tutorial: Implementazione di uno scheduler personalizzato con l'SDK di tracciamento dell' Instana

Gli scheduler sono strumenti per eseguire periodicamente i lavori. Il gestore di attività più diffuso per Java è Quartz, che è supportato di serie dall' Instana.

Tuttavia, se disponi di uno scheduler interno personalizzato che non è supportato, puoi utilizzare l 'SDK di tracciamento Java per aggiungere la funzionalità di tracciamento al tuo scheduler.

Questa esercitazione mostra come eseguire questa operazione.

Codice di esempio

Il codice di esempio per il custom-scheduler-example tutorial è disponibile all'indirizzo github.com. Implementa un semplice scheduler, che richiama un servizio Hello World su http://localhost:8080/ ogni 4 secondi e stampa la risposta alla console.

Fonte non monitorata da Instana

Se esegui l'esempio, noterai che le chiamate a HTTP provengono da una fonte non monitorata.

origine non monitorata

Perché la fonte non viene monitorata?

Il codice di esempio utilizza il client HTTP Apache per la chiamata in uscita. Il client Apache HTTP è supportato dall'agente Instana. Allora perché non vediamo la fonte della richiesta in Instana?

Il motivo è che Instana registra le chiamate in uscita solo se avvengono all'interno di un contesto di tracciamento esistente. Nell'esempio, la chiamata in uscita viene attivata dallo scheduler personalizzato che non è dotato di strumentazione. Pertanto, la chiamata non viene strumentata perché non viene trovato alcun contesto di traccia esistente.

Abilitazione del tracciamento per lo scheduler personalizzato

Per abilitare il tracciamento per lo scheduler personalizzato, è necessario innanzitutto aggiungere l 'SDK di tracciamento Java come dipendenza. Per ` Maven `, il risultato è il seguente:

<dependency>
  <groupId>com.instana</groupId>
  <artifactId>instana-java-sdk</artifactId>
  <version>1.2.0</version>
</dependency>

Per creare un nuovo contesto di traccia ogni volta che viene richiamato HttpClientJob , aggiungere un'annotazione @Span al metodo di lavoro run() :

@Span(type = Span.Type.ENTRY, value = "my-custom-scheduler")
public void run() {
  // ...
}

Questa annotazione indica all'agente Java di generare un elemento ` ENTRY span` ogni volta che viene chiamato il run() metodo.

In terzo luogo, aggiungi quanto segue al file degli configuration.yaml agenti di Instana per indicare che le classi del pacchetto Javacom.instana.sample.* devono essere analizzate alla ricerca @Span dell'annotazione:

com.instana.plugin.javatrace:
  instrumentation:
    sdk:
      packages:
        - 'com.instana.sample'

Ora, ogni chiamata a HelloWorldJob.run() crea un contesto di tracciamento, e la richiesta in uscita HTTP viene eseguita all'interno di tale contesto. Lo si può vedere in Instana come segue:

traccia completa

È stata ora individuata l'origine della richiesta GET HTTP, compresi tutti i metadati raccolti tramite la strumentazione automatica del client Apache HTTP :

chiamata in uscita

Il lavoro del programma di pianificazione viene visualizzato come una chiamata vuota con un'origine non monitorata:

chiamata in uscita

Aggiungere tag

Come illustrato nella sezione precedente, il processo dello scheduler viene visualizzato come una chiamata vuota priva di annotazioni. Puoi richiamare il metodo SpanSupport.annotate() dell'SDK per aggiungere metadati personalizzati. Richiamare SpanSupport.annotate() all'inizio del metodo 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");
  // ...

Quando si tags.batch.job imposta ENTRY l'intervallo del lavoro, come specificato nelle convenzioni semantiche di OpenTracing's, Instana ora considera l'intervallo come se fosse di tipo BATCH e riconosce che non vi sono fonti mancanti.

estensione con annotazione

È inoltre possibile ricercare la tag personalizzata nella vista Analitica illimitata:

ricerca tag personalizzato

Contrassegnare un intervallo come errato

A un certo punto, è possibile contrassegnare un lavoro batch come errato. Ciò può essere fatto facilmente aggiungendo il error tag, come specificato nelle convenzioni semantiche disponibili all'indirizzo OpenTracing's.

SpanSupport.annotate(Span.Type.ENTRY, SPAN_NAME, "tags.error", "true");

Aggiungendo questo, la tua chiamata verrà segnalata come errata in Instana.

estensione errata

Sintesi e prospettive

In questo tutorial abbiamo creato un nuovo contesto di tracciamento per il nostro scheduler personalizzato, consentendo così al processo batch di essere identificato come origine delle chiamate in uscita dell' HTTP e in Instana.

Per un riferimento completo sul nostro SDK, visualizza il JavaDocdell'SDK. Ad esempio, le annotazioni @SpanParam e @SpanReturn rendono molto semplice catturare i parametri o restituire i valori come ulteriori informazioni, il che potrebbe essere più conveniente che richiamare esplicitamente SpanSupport.annotate() in alcuni scenari.