feat(otel): export traces to Tempo, add memory_limiter
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
Reference in New Issue
Block a user