BizFirst Observe
OTel Collector Config Pattern
The OTel Collector configuration has a stable structure: receivers are the same regardless of provider, processors are the same, and only the exporters section changes when switching providers. This page shows the exporter-swap pattern that enables provider migration without touching BizFirstGO service code.
The Stable Sections (Never Change)
# otel-collector-config.yaml — stable sections (same for all providers)
receivers:
otlp: # Always the same — receives from BizFirstGO
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
memory_limiter: # Always the same
check_interval: 5s
limit_mib: 400
batch: # Always the same
send_batch_size: 1000
timeout: 10s
redaction: # Always the same — security controls
allow_all_keys: true
blocked_values_patterns:
- "bearer [a-zA-Z0-9._-]{20,}"
tail_sampling: # Always the same — cost control
policies:
- name: errors
type: status_code
status_code: {status_codes: [ERROR]}
The Exporter Section (Changes Per Provider)
# Self-Hosted (Loki + Prometheus + Tempo):
exporters:
loki:
endpoint: http://loki:3100/loki/api/v1/push
prometheusremotewrite:
endpoint: http://prometheus:9090/api/v1/write
otlp/tempo:
endpoint: http://tempo:4317
# ─────────────────── SWAP TO ───────────────────────────
# Grafana Cloud:
exporters:
loki/cloud:
endpoint: https://logs-prod-us-central1.grafana.net/loki/api/v1/push
headers:
Authorization: "Basic ${GRAFANA_CLOUD_TOKEN}"
prometheusremotewrite/cloud:
endpoint: https://prometheus-prod-01-us-central1.grafana.net/api/prom/push
headers:
Authorization: "Basic ${GRAFANA_CLOUD_TOKEN}"
otlp/cloud-tempo:
endpoint: tempo-prod-04-prod-us-east-0.grafana.net:443
headers:
Authorization: "Basic ${GRAFANA_CLOUD_TOKEN}"
# ─────────────────── SWAP TO ───────────────────────────
# Datadog:
exporters:
datadog:
api:
key: "${DD_API_KEY}"
Provider Migration Checklist
# When migrating from self-hosted to a PaaS provider:
1. Update the exporters section in otel-collector-config.yaml
2. Update environment variables (add provider API keys)
3. Restart the OTel Collector: docker compose restart otel-collector
4. Verify telemetry appears in the new provider (15-30 seconds after restart)
5. Update Grafana data sources to point to the new provider endpoints
6. Test all 10 pre-built dashboards (verify data appears)
7. Migrate or recreate alert rules in the new provider
8. Maintain old provider in parallel for 1-2 weeks (historical data access)
9. Decommission old provider after validation complete
# BizFirstGO service code: ZERO changes required
# Migration time: 1-2 days (configuration + dashboard migration)