`component_sent_bytes_total` for the `loki` sink reports compressed bytes, unlike other sinks
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 88/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- observability-sre
Direzione di ricerca
Inizia da src/sinks/util/request_builder.rs e confronta i relativi metadati di encoding con quelli di src/sinks/datadog/logs/sink.rs, quindi segui il valore attraverso src/sinks/util/metadata.rs, lib/vector-common/src/request_metadata.rs e src/sinks/loki/service.rs. Aggiungi o aggiorna test mirati per l'encoding compresso e verifica che component_sent_bytes_total riporti byte non compressi per Loki e per gli altri sink che utilizzano il builder condiviso.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
A note for the community
Vector version: 0.57.0
Summary
The loki sink reports component_sent_bytes_total after compression. Other sinks, such as datadog_logs, report it before compression, which is what the component spec and #20610 say it should be.
The result is that the same logs sent to two sinks show very different sizes. That makes the metric misleading for capacity planning and cost comparisons.
What we see
We send the same log stream to both a datadog_logs sink and a loki sink (snappy compression). We compare component_sent_bytes_total to component_sent_event_bytes_total for each:
| Sink | sent_bytes ÷ sent_event_bytes |
|---|---|
datadog_logs |
~1.0 |
loki |
~0.2 |
- For
datadog_logs, bytes sent roughly equals event bytes, which is what we expect. - For
loki, bytes sent is about 5× smaller, which fits the compressed payload size rather than the uncompressed one. Loki's own ingest metrics agree with the event-bytes figure.
Why it happens
The loki sink uses the shared default RequestBuilder::encode_events. That function compresses the payload first, then passes the compressed length into the slot meant for the uncompressed size:
src/sinks/util/request_builder.rs#L99-L101:compressed_byte_size = payload.len()(already compressed) is passed as theuncompressed_byte_sizeargument ofEncodeResult::compressed.
That value then flows into the metric:
src/sinks/util/metadata.rs#L93-L99:uncompressed_byte_sizebecomesrequest_encoded_size.lib/vector-common/src/request_metadata.rs#L270-L310: it is stored and returned as-is.src/sinks/loki/service.rs#L56-L57:bytes_sent()returnsrequest_encoded_size().
By contrast, datadog_logs has its own builder. It measures the size before compressing:
src/sinks/datadog/logs/sink.rs#L302-L313:uncompressed_size = buf.len()is taken before compression and passed toEncodeResult::compressed.
Expected
component_sent_bytes_total should report uncompressed bytes for every sink, including loki. Any other siult encode_events with compression turned on is probably affected too.
Suggested fix
In the default encode_events, record the payload length before compression and pass that as uncompressed_datadog_logs does.
Problem
component_sent_bytes_total for the loki sink reports compressed bytes, unlike other sinks
Configuration
Version
0.57.0
Debug Output
Example Data
No response
Additional Context
No response
References
No response
- Lingua principale
- Rust
- Stelle
- 22.8k
- Fork
- 2.4k
- Merge medio
- 1g 13h
- PR unite (30g)
- 273
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di vectordotdev/vector
-
website: make content headings keyboard-focusable so Tab moves through the pageForse già presa @nightcityblade l’ha presa 33 giorni fa. Apertadomain:website good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vectordotdev/vector#26581 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vectordotdev/vector#26565 ·
I maintainer di solito rispondono entro 1 giorno
-
disk buffer: reader can be notified before the data file write completes, delaying the sink's sendAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
vectordotdev/vector#26523 · 8 commenti · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Doris Sink Error Log in verbose modeForse di nuovo libera @arfa79 l’ha presa 56 giorni fa e non c’è nessuna pull request aperta. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vectordotdev/vector#26353 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
source:nats
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
vectordotdev/vector#26345 · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di vectordotdev/vector
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
quarto-dev/q2#1155 ·
I maintainer di solito rispondono entro 1 giorno
-
backlog priority: low ui
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
storytold/vectorcraft#6445 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
area: cli kind:docs priority: P3
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
tursodatabase/libsql#2312 ·
I maintainer di solito rispondono entro 11 giorni
-
`NodeOwned::size_in_bytes` does not count the `ChildrenNodesOwned` heap allocation (since #216)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
paritytech/trie#251 ·
I maintainer di solito rispondono entro 1 giorno