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:
- Health endpoint: http://localhost:13133
- Prometheus metrics: Available when configured
- Logs: Standard output
Troubleshooting
No Data Received
- Check application instrumentation
- Verify network connectivity
- Check collector logs:
make logs service=otel-collector
High Memory Usage
- Adjust batch processor settings in config
- Reduce retention in backends
- Add resource limits in docker-compose