Inoltro
mcpd parla OTLP in tutte e due le direzioni. Niente di quello che arriva resta bloccato qui.
Un protocollo in uscita, non undici exporter
mcpd riceve OTLP, e sa emettere OTLP. Quella sola proprietà sostituisce quasi tutto quello che fa un insieme di exporter uno per fornitore: Langfuse, Datadog, Honeycomb, Grafana e ogni altra destinazione che valga la pena nominare accettano OTLP su HTTP. L’inoltro è quindi un’implementazione sola invece di undici, e non può restare indietro rispetto al rilascio dell’SDK di un fornitore.
Vuol dire anche che adottare mcpd è reversibile. Puntalo su quello che usavi prima, tieni in piedi tutti e due per due settimane, e decidi con i dati davanti invece che su una migrazione che non puoi disfare.
Accenderlo
archivia in locale e copia più avanti
mcpd serve --forward-endpoint https://otlp.example.com
Il percorso viene aggiunto in coda, quindi dai l’URL di base e non
/v1/traces. Per una destinazione che ha bisogno di credenziali,
aggiungi degli header:
con un header di autorizzazione
mcpd serve \
--forward-endpoint https://otlp.example.com \
--forward-header 'Authorization: Bearer $TOKEN'
Le stesse impostazioni stanno sotto forward nel file di
configurazione, dove ci sono anche batch_size ed
enabled. Un’opzione batte il file, così una singola istanza si
può puntare altrove senza modificare una ConfigMap condivisa.
{
"forward": {
"endpoint": "https://otlp.example.com",
"headers": [["Authorization", "Bearer sk-..."]],
"batch_size": 256,
"enabled": true
}
} -
Decode
OTLP or native, gzip or plain
-
Sample
Decided once, at the root
-
Redact
Before anything is written
-
Price
From the configured price book
-
Store
One transaction per batch
Redaction is stage three, not a cleanup job. A value that a rule matches never reaches storage at all.
Lo storage locale viene prima
Uno span viene scritto nello storage di mcpd prima che qualcosa venga inoltrato, e l’inoltro gira dopo, su un task suo. Due conseguenze, tutte e due volute.
Una destinazione lenta non aggiunge mai la sua latenza alla richiesta che ha prodotto lo span. Il tuo agente non aspetta il collector di qualcun altro.
Una destinazione ferma non diventa mai un ingest rifiutato. mcpd continua a lavorare e ritenta l’inoltro su un task suo. L’alternativa, dove il disservizio di un’altra azienda vuol dire che la tua telemetria non viene tenuta affatto, è esattamente il guasto che questo disegno esiste per evitare.
Ogni batch ha tre tentativi. Un 429, un 5xx o una connessione fallita viene
ritentato dopo 250 ms, e l’attesa raddoppia dopo ogni tentativo. Un
Retry-After espresso in secondi sostituisce l’attesa, fino a 30
secondi. Qualunque altro 4xx è definitivo alla prima risposta, perché il
batch resterà malformato per quella destinazione. Quando il daemon si sta
fermando, fa subito i tentativi rimasti. Un batch rifiutato in modo
definitivo, o ancora non consegnato dopo l’ultimo tentativo, viene segnalato
nei log, e i suoi span vengono sommati a
mcpd_forward_dropped_spans_total, così vedi quanta parte della
copia manca.
Nemmeno una destinazione che accetta la connessione e non risponde mai può
prendersi la memoria del daemon. Al massimo le copie di 64 richieste di
ingest aspettano la destinazione nello stesso momento. Finché ce ne sono
tante in attesa, una copia nuova viene scartata subito e contata in
mcpd_forward_dropped_spans_total, e la scrittura locale non ne
risente.
Non c’è una coda in uscita durevole. Un batch aspetta in memoria mentre viene ritentato, e quando la coda di inoltro è piena, un batch nuovo viene scartato e i suoi span vengono contati nella stessa metrica. Una coda durevole è un altro prodotto, e una coda silenziosa che resta indietro di ore è peggio di un buco visibile. Se ti serve la consegna garantita, metti un collector vero fra mcpd e la destinazione e lascialo fare il lavoro per cui è stato costruito.
L’oscuramento vale per quello che esce
L’inoltro avviene dopo la pipeline di ingest, che oscura sul posto prima che venga scritto qualunque cosa. Tutto quello che a mcpd è stato detto di nascondere non arriva nemmeno alla tappa successiva. Una regola che proteggesse il tuo storage ma non quello che esce non sarebbe un controllo di riservatezza.
Che cosa viene inoltrato
Gli span. Log, metriche, punteggi, feedback e note di aspetto restano in mcpd, perché le destinazioni verso cui si inoltra sono backend di tracing e scarterebbero il resto o lo storpierebbero dentro degli attributi.
Gli span sono raggruppati per servizio dentro resourceSpans, la
forma che un ricevitore si aspetta, invece di una risorsa per span, che è
valida e costringe chi sta a valle a raggrupparli di nuovo.
mcpd che inoltra a mcpd
Siccome i due capi parlano lo stesso protocollo, un mcpd locale può inoltrare a uno condiviso. Chi sviluppa tiene sulla sua macchina uno storage veloce con i payload interi, e l’istanza della squadra riceve le stesse esecuzioni, con la sua conservazione e le sue regole di oscuramento applicate all’arrivo.
Avanti
- Puntare su mcpd un impianto OpenTelemetry che hai già: OpenTelemetry.
- Che cosa viene tolto prima che uno span sia archiviato o mandato: Oscuramento e conservazione.
- Ogni opzione e ogni impostazione del file: Configurazione.