Quick Start: Local Observability

Set up observability in 10 minutes.


1. Start OTel Collector

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

2. Instrument Python Service

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

3. Add Logfire (Python)

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
)

4. Verify Telemetry

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

Next Steps

  1. OpenTelemetry deep-dive: OpenTelemetry.md
  2. Collector configuration: Collector.md
  3. OpenObserve setup: OpenObserve.md

Last Updated: January 2026