Set up observability in 10 minutes.
1
docker-compose up otel-collector
Or run directly:
1
2
3
4
docker run -p 4317:4317 -p 4318:4318 -p 13133:13133 \
-v $(pwd)/infra/otel/otel-collector-config.yaml:/etc/otel-collector-config.yaml \
otel/opentelemetry-collector:latest \
--config=/etc/otel-collector-config.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource
# Configure tracer
resource = Resource.create({
"service.name": "my-service",
"sea.platform": "sea-forge"
})
provider = TracerProvider(resource=resource)
provider.add_span_processor(
BatchSpanProcessor(OTLPSpanExporter(endpoint="localhost:4317"))
)
trace.set_tracer_provider(provider)
# Create spans
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("my-operation"):
# Your code here
pass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import logfire
logfire.configure(
service_name="my-service",
send_to_logfire=False, # Local mode
console=logfire.ConsoleOptions(verbose=True)
)
logfire.info(
"Operation completed",
sea_domain="my-domain",
sea_concept="MyOperation",
latency_ms=12.5
)
1
2
3
4
5
6
7
8
# Check collector health
curl http://localhost:13133/
# View zpages (debug)
open http://localhost:55679/debug/tracez
# View collector logs
docker logs -f otel-collector
Last Updated: January 2026