feat(otel): export traces to Tempo, add memory_limiter

This commit is contained in:
kert
2026-05-01 11:01:13 -04:00
parent 522a8c4989
commit 23a849cdd1
3 changed files with 25 additions and 8 deletions

View File

@@ -643,7 +643,7 @@ services:
volumes: volumes:
- ./infra/otel/otel-collector.yml:/etc/otelcol-contrib/config.yaml:ro - ./infra/otel/otel-collector.yml:/etc/otelcol-contrib/config.yaml:ro
depends_on: depends_on:
- jaeger - tempo
- loki - loki
healthcheck: healthcheck:
test: test:

View File

@@ -1,5 +1,5 @@
# OpenTelemetry Collector configuration # OpenTelemetry Collector configuration
# Fan-out: traces → Jaeger, metrics → Prometheus scrape, logs → Loki # Fan-out: traces → Tempo, metrics → Prometheus scrape, logs → Loki
receivers: receivers:
otlp: otlp:
@@ -14,6 +14,11 @@ processors:
timeout: 5s timeout: 5s
send_batch_size: 1024 send_batch_size: 1024
memory_limiter:
check_interval: 5s
limit_mib: 256
spike_limit_mib: 64
resource: resource:
attributes: attributes:
- key: deployment.environment - key: deployment.environment
@@ -21,8 +26,8 @@ processors:
action: upsert action: upsert
exporters: exporters:
otlp_grpc/jaeger: otlp_http/tempo:
endpoint: jaeger:4317 endpoint: http://tempo:4318
tls: tls:
insecure: true insecure: true
@@ -44,13 +49,13 @@ service:
pipelines: pipelines:
traces: traces:
receivers: [otlp] receivers: [otlp]
processors: [batch, resource] processors: [memory_limiter, batch, resource]
exporters: [otlp_grpc/jaeger] exporters: [otlp_http/tempo]
metrics: metrics:
receivers: [otlp] receivers: [otlp]
processors: [batch] processors: [memory_limiter, batch]
exporters: [prometheus] exporters: [prometheus]
logs: logs:
receivers: [otlp] receivers: [otlp]
processors: [batch, resource] processors: [memory_limiter, batch, resource]
exporters: [otlp_http/loki] exporters: [otlp_http/loki]

View File

@@ -127,3 +127,15 @@ class TestPerServiceStages:
for container, label in self.EXPECTED.items(): for container, label in self.EXPECTED.items():
assert f'container="{container}"' in text, f"no match stage for {container}" assert f'container="{container}"' in text, f"no match stage for {container}"
assert label in text, f"no {label} extraction for {container}" assert label in text, f"no {label} extraction for {container}"
class TestOtelTempo:
def test_otel_exports_traces_to_tempo(self):
cfg = yaml.safe_load((ROOT / "infra/otel/otel-collector.yml").read_text())
exporters = cfg["exporters"]
assert "otlp_http/tempo" in exporters
assert exporters["otlp_http/tempo"]["endpoint"] == "http://tempo:4318"
assert "otlp_grpc/jaeger" not in exporters
traces = cfg["service"]["pipelines"]["traces"]
assert "otlp_http/tempo" in traces["exporters"]
assert "memory_limiter" in traces["processors"]