Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
7f8d9db
feat(opentelemetry sink): add gRPC transport support
thomasqueirozb Mar 20, 2026
f8bc78e
test(opentelemetry sink): add gRPC integration and e2e tests
thomasqueirozb Mar 20, 2026
a0c8e35
fix(opentelemetry sink): fix lifetime error in integration test
thomasqueirozb Mar 20, 2026
6526e41
fix(opentelemetry sink): align Protocol enum field types to fix schem…
thomasqueirozb Mar 20, 2026
41ae7a0
Add authors line to changelog
thomasqueirozb Mar 20, 2026
b29ccef
Use protocol.uri
thomasqueirozb Mar 20, 2026
d6d0cf0
Flatten otel config
thomasqueirozb Mar 23, 2026
9b91117
Fix changelog
thomasqueirozb Mar 23, 2026
8eb5ee5
feat(opentelemetry sink): restructure config with flat protocol enum …
thomasqueirozb Mar 24, 2026
b9c6cb7
fix(opentelemetry sink): split mixed-signal batches into per-signal r…
thomasqueirozb Mar 24, 2026
b3b175d
fix(opentelemetry sink): implement real gRPC healthcheck using standa…
thomasqueirozb Mar 24, 2026
c5883cd
fix(opentelemetry sink): make uri a Template to restore template synt…
thomasqueirozb Mar 24, 2026
efc5fc2
feat(opentelemetry sink): use Template for gRPC uri field
thomasqueirozb Mar 24, 2026
787df5b
Format
thomasqueirozb Mar 24, 2026
2c0093b
Regenerate docs
thomasqueirozb Mar 24, 2026
b7fabfc
Merge remote-tracking branch 'origin/master' into feat/opentelemetry-…
thomasqueirozb Mar 24, 2026
97a9070
Fix markdown
thomasqueirozb Mar 24, 2026
e24bee9
fix(opentelemetry sink): forward request headers as gRPC metadata, re…
thomasqueirozb Mar 24, 2026
88727d5
fix(opentelemetry sink): include request headers in gRPC healthcheck
thomasqueirozb Mar 26, 2026
571583c
fix(opentelemetry sink): render templated gRPC metadata values per batch
thomasqueirozb Mar 26, 2026
b98209c
feat(opentelemetry sink): support template syntax for gRPC URI
thomasqueirozb Mar 26, 2026
f29aa97
test(opentelemetry sink): add integration test for gRPC template URI
thomasqueirozb Mar 26, 2026
90b194b
Restrict grpc to only support logs and traces
thomasqueirozb Mar 26, 2026
1af1b93
fix(opentelemetry sink): partition gRPC batches by rendered URI and h…
thomasqueirozb Mar 26, 2026
03bdf87
fix(opentelemetry sink): enable TLS for templated HTTPS gRPC URIs
thomasqueirozb Mar 26, 2026
9f2627b
docs(opentelemetry sink): warn that dynamic URIs require trusted even…
thomasqueirozb Mar 26, 2026
fad896f
fix(opentelemetry sink): reject rendered gRPC URIs with non-http/http…
thomasqueirozb Mar 26, 2026
2afefd2
fix(opentelemetry sink): drop events whose rendered gRPC URI is https…
thomasqueirozb Mar 26, 2026
fea069a
fix(opentelemetry sink): emit ComponentEventsDropped, drop events on …
thomasqueirozb Mar 26, 2026
7e3ac8f
remove todos
thomasqueirozb Mar 26, 2026
99d2b07
docs(opentelemetry sink): warn that gRPC only supports none and gzip …
thomasqueirozb Mar 26, 2026
dc5e9e3
fix(opentelemetry sink): normalize use_https prefix check to lowercase
thomasqueirozb Mar 26, 2026
f88fcc4
fix(opentelemetry sink): warn instead of debug when skipping gRPC hea…
thomasqueirozb Mar 26, 2026
fbf1f15
perf(opentelemetry sink): wrap static gRPC headers in Arc to avoid pe…
thomasqueirozb Mar 26, 2026
050cf32
fix(opentelemetry sink): handle OTLP spans arriving as Log events in …
thomasqueirozb Mar 26, 2026
68e86f1
refactor(opentelemetry sink): flatten URI validation chain in gRPC si…
thomasqueirozb Mar 26, 2026
7a91179
refactor(sinks): extract shared HyperGrpcService to sinks/util/grpc
thomasqueirozb Mar 26, 2026
ddb9cab
docs(opentelemetry sink): remove incorrect 'Defaults to http' on requ…
thomasqueirozb Mar 26, 2026
26d490f
fix(opentelemetry sink): reject invalid static gRPC metadata headers …
thomasqueirozb Mar 26, 2026
33d815d
fix(opentelemetry sink): migrate stale config fixtures from nested pr…
thomasqueirozb Mar 26, 2026
f9a7079
fix(opentelemetry sink): tighten TLS heuristic, warn on OTLP partial-…
thomasqueirozb Mar 27, 2026
e8260a5
perf(opentelemetry sink): remove Arc<Mutex> from gRPC client cache — …
thomasqueirozb Mar 27, 2026
dc847b3
refactor(opentelemetry sink): replace accumulate!/push_signal!/drop_e…
thomasqueirozb Mar 27, 2026
42825ef
docs(opentelemetry sink): fix stale nested protocol format in quickst…
thomasqueirozb Mar 27, 2026
5f96591
perf(opentelemetry sink): clone only the needed tonic client per Serv…
thomasqueirozb Mar 27, 2026
c3c92b6
refactor(grpc): move URI validation to HyperGrpcService construction,…
thomasqueirozb Mar 27, 2026
2118217
refactor(opentelemetry sink): reduce visibility of internal gRPC type…
thomasqueirozb Mar 27, 2026
94a226d
perf(opentelemetry sink): use cached byte_size in ByteSizeOf::allocat…
thomasqueirozb Mar 30, 2026
7390499
fix(opentelemetry sink): include error_message in OTLP partial-succes…
thomasqueirozb Mar 30, 2026
000520d
refactor(opentelemetry sink): collapse partial-success let-chains and…
thomasqueirozb Mar 30, 2026
dd97e14
fix(opentelemetry sink): align gRPC batch config type with byte-size …
thomasqueirozb Mar 30, 2026
1b092d0
refactor(grpc): consolidate with_default_scheme into sinks/util/grpc,…
thomasqueirozb Mar 30, 2026
cb501e4
test(opentelemetry sink): use OpenTelemetryConfig in integration test…
thomasqueirozb Mar 30, 2026
0cf6564
Revert "fix(opentelemetry sink): align gRPC batch config type with by…
thomasqueirozb Mar 30, 2026
18e0eb5
docs(opentelemetry sink): document intentional use of event-based bat…
thomasqueirozb Mar 30, 2026
54ef34d
docs(opentelemetry sink): correct batch settings comment — event coun…
thomasqueirozb Mar 30, 2026
908f733
fix(opentelemetry sink): honour cx.healthcheck.uri override in gRPC h…
thomasqueirozb Mar 30, 2026
c00904d
emit dropped events metric when dropping non-OTLP formatted events
thomasqueirozb Mar 30, 2026
23bc104
fix(opentelemetry sink): mark dropped events as Rejected and propagat…
thomasqueirozb Mar 30, 2026
4c1ec91
fix(opentelemetry sink): skip healthcheck for dynamic headers; reject…
thomasqueirozb Apr 1, 2026
0d005ba
fix(opentelemetry sink): support URI path prefixes for gRPC reverse p…
thomasqueirozb Apr 1, 2026
d0306a7
fix(opentelemetry sink): reject dynamic URI templates with no static …
thomasqueirozb Apr 1, 2026
2967c26
fix(opentelemetry sink): always use TLS-capable connector to support …
thomasqueirozb Apr 1, 2026
488f831
fix(opentelemetry sink): lowercase header keys before gRPC metadata v…
thomasqueirozb Apr 1, 2026
0c8ed04
fix(docs): correct headers field path and fix indentation in OTLP exa…
thomasqueirozb Apr 1, 2026
0199ad4
fix(sinks): gate grpc util module behind sinks-opentelemetry and sink…
thomasqueirozb Apr 1, 2026
c8fdcc2
test(opentelemetry sink): await healthcheck future in integration tests
thomasqueirozb Apr 1, 2026
e91e9d1
fix(sinks): validate URI has authority in with_default_scheme to prev…
thomasqueirozb Apr 1, 2026
73032d0
fix(opentelemetry sink): emit accurate healthcheck skip warnings per …
thomasqueirozb Apr 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -904,7 +904,7 @@ sinks-mqtt = ["dep:rumqttc"]
sinks-nats = ["dep:async-nats", "dep:nkeys"]
sinks-new_relic_logs = ["sinks-http"]
sinks-new_relic = []
sinks-opentelemetry = ["sinks-http", "codecs-opentelemetry"]
sinks-opentelemetry = ["sinks-http", "codecs-opentelemetry", "dep:tonic", "dep:tonic-health", "dep:prost"]
sinks-papertrail = ["dep:syslog"]
sinks-prometheus = ["dep:base64", "dep:prost", "vector-lib/prometheus"]
sinks-postgres = ["dep:sqlx"]
Expand Down Expand Up @@ -1025,7 +1025,7 @@ mongodb_metrics-integration-tests = ["sources-mongodb_metrics"]
mqtt-integration-tests = ["sinks-mqtt", "sources-mqtt"]
nats-integration-tests = ["sinks-nats", "sources-nats"]
nginx-integration-tests = ["sources-nginx_metrics"]
opentelemetry-integration-tests = ["sources-opentelemetry", "dep:prost"]
opentelemetry-integration-tests = ["sources-opentelemetry", "sinks-opentelemetry", "dep:prost"]
postgresql_metrics-integration-tests = ["sources-postgresql_metrics"]
postgres_sink-integration-tests = ["sinks-postgres"]
prometheus-integration-tests = ["sinks-prometheus", "sources-prometheus", "sinks-influxdb"]
Expand Down
49 changes: 49 additions & 0 deletions changelog.d/opentelemetry_sink_config.breaking.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
Changed the `opentelemetry` sink config fields to remove `protocol.*`. `protocol.type` was replaced
by `protocol` and all fields previously nested under `protocol` now can be placed in the top level
configuration.

Before:

```yaml
sinks:
otel_sink:
inputs:
- in
protocol:
type: http
uri: http://otel-collector-sink:5318/v1/logs
method: post
encoding:
codec: json
framing:
method: newline_delimited
batch:
max_events: 1
request:
headers:
content-type: application/json
```

After:

```yaml
sinks:
otel_sink:
inputs:
- in
type: opentelemetry
protocol: http
uri: http://otel-collector-sink:5318/v1/logs
method: post
encoding:
codec: json
framing:
method: newline_delimited
batch:
max_events: 1
request:
headers:
content-type: application/json
```

authors: thomasqueirozb
3 changes: 3 additions & 0 deletions changelog.d/opentelemetry_sink_grpc.feature.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Added gRPC transport support for the `opentelemetry` sink. Configure with `protocol = "grpc"` and set `uri` to your OTLP/gRPC endpoint (e.g. `http://localhost:4317`). Supports TLS and gzip compression.

authors: thomasqueirozb
7 changes: 6 additions & 1 deletion lib/codecs/src/encoding/format/otlp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,14 @@ impl Encoder<Event> for OtlpSerializer {
} else if log.contains(RESOURCE_METRICS_JSON_FIELD) {
// Currently the OTLP metrics are Vector logs (not metrics).
self.metrics_descriptor.encode(event, buffer)
} else if log.contains(RESOURCE_SPANS_JSON_FIELD) {
// OTLP spans can arrive as Log events when the source is configured
// without use_otlp_decoding.traces = true.
self.traces_descriptor.encode(event, buffer)
} else {
Err(format!(
"Log event does not contain OTLP top-level fields ({RESOURCE_LOGS_JSON_FIELD} or {RESOURCE_METRICS_JSON_FIELD})",
"Log event does not contain OTLP top-level fields \
({RESOURCE_LOGS_JSON_FIELD}, {RESOURCE_METRICS_JSON_FIELD}, or {RESOURCE_SPANS_JSON_FIELD})",
)
.into())
}
Expand Down
Loading
Loading