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.

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:

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

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

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.

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

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.

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.