Asserzioni
Introduzione
Questa sezione descrive le asserzioni di Mtracer. Le asserzioni sono uno strumento che consente di effettuare verifiche più specifiche sulla trace raccolta, utilizzando diversi linguaggi di asserzione.
Asserzioni supportate
Attualmente, Mtracer supporta le asserzioni presenti nelle sezioni sottostanti.
Inoltre il tipo di default di asserzione è cel.
Common Expression Language (CEL)
CEL è un linguaggio di espressione progettato per essere semplice ed efficiente, con cui è possibile scrivere delle espressioni booleane per verificare se la trace raccolta soddisfa determinate condizioni.
Si consiglia la lettura del breve tutorial per una panoramica sulle funzionalità di CEL.
Esempio
assertions:
- name: "Check error count and span status"
type: "cel"
queries:
errorCheck: "trace.errorCount == 0"
spanStatusCheck: "trace.spans.all(s, s.spanStatus == 'unset')"Si noti che è possibile definire più asserzioni e, all’interno di ciascuna, più query. Tutte le query vengono valutate e devono risultare vere affinché l’asserzione sia considerata verificata.
Campi trace
All’interno delle espressioni CEL è possibile accedere a diversi campi della trace raccolta.
In seguito sono definiti i campi disponibili:
traceId: identificativo univoco della trace raccoltastartTime: timestamp di inizio della trace con standard RFC3339endTime: timestamp di fine della trace con standard RFC3339duration: durata della trace in secondi, la stringa è espressa in secondi e deve avere il suffisso “s”, ad esempio1.5sspanCount: numero di span presenti all’interno della trace raccoltaerrorCount: numero di span in stato di errore presenti all’interno della trace raccoltaspans: lista di span presenti all’interno della trace raccolta
È possibile eseguire operazioni con i campi startTime e endTime utilizzando le funzioni timestamp() e duration(), ad esempio per verificare che la trace sia stata generata entro un certo intervallo di tempo:
now > timestamp("2026-06-12T08:00:00Z") + duration("2h30m")Campi span
All’interno delle espressioni CEL è possibile accedere a diversi campi delle span presenti all’interno della trace raccolta.
In seguito sono definiti i campi disponibili per ogni span:
s.spanId: identificativo univoco della spans.parentId: identificativo della span padre, se presentes.serviceName: nome del servizio OTel associato alla spans.operationName: nome dell’operazione OTel associata alla spans.spanKind: tipo OTel della spans.spanStatus: stato OTel della spans.startTime: timestamp di inizio della span con standard RFC3339s.endTime: timestamp di fine della span con standard RFC3339s.duration: durata della span in secondi, la stringa è espressa in secondi e deve avere il suffisso “s”, ad esempio1.5ss.attributes: mappa di attributi associati alla span, con chiave di tipo stringa e valore di tipo qualsiasi. Questo campo è utile per eseguire asserzioni su attributi specifici di una o più span, ad esempio:
assertions:
- name: "Check db system"
queries:
dbSystemCheck: "trace.spans[3].attributes['db.system'] == 'postgresql'"Si consiglia perciò la lettura della documentazione ufficiale di CEL per scoprire tutte le macro disponibili.