Skip to main content

Telemetry

Codename: Black Widow — The Spy. Intercepts all signals and traces without being seen.

Unified telemetry collection hub for the A.R.C. Framework.


Overview​

The OpenTelemetry Collector serves as the central telemetry pipeline, receiving logs, metrics, and traces from all services and distributing them to backend systems.


Ports​

  • 4317 - OTLP gRPC receiver
  • 4318 - OTLP HTTP receiver
  • 13133 - Health check endpoint

Configuration​

Primary Config: otel-collector-config.yml

Pipeline Architecture​

Applications
↓
OTLP Receivers (gRPC/HTTP)
↓
Processors (batch, spanmetrics, attributes)
↓
Exporters (Loki, Prometheus, Jaeger)

Key Features​

  • Trace-Log Correlation - Adds trace context to logs
  • Span Metrics - Generates RED metrics from traces
  • Batching - Optimizes export performance
  • Multi-backend - Exports to Loki, Prometheus, Jaeger

Custom Build​

This service uses a custom Docker image with health check support:

Dockerfile Location: Dockerfile (in this directory)

Build:

docker build -t arc/otel-collector:latest ./core/telemetry/otel-collector

Environment Variables​

See .env.example for configuration options.


Usage​

Start Service​

make up-observability
# or
docker compose up otel-collector

Check Health​

curl http://localhost:13133/

View Configuration​

docker compose exec otel-collector cat /etc/otel-collector-config.yaml

Instrumentation​

Services send telemetry to the collector:

# Example: Go application
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf

Monitoring​

The collector itself is monitored:


Troubleshooting​

No Data Received​

  1. Check application instrumentation
  2. Verify network connectivity
  3. Check collector logs: make logs service=otel-collector

High Memory Usage​

  1. Adjust batch processor settings in config
  2. Reduce retention in backends
  3. Add resource limits in docker-compose