Portal Community

The Four-Layer Architecture

BizFirst Observe is organized into four distinct layers. Each layer has a clear responsibility and communicates only with the layers adjacent to it. This separation ensures that instrumentation code in your services never needs to know about storage backends, and storage backends never need to know about visualization requirements.

Layer 1 — Instrumentation

The OpenTelemetry SDK embedded in every BizFirstGO service. It automatically captures logs, metrics, and traces without manual coding in most cases. Services emit telemetry via the OTLP protocol to the Collector.

OTLP/gRPC (port 4317)

Layer 2 — Collection

The OpenTelemetry Collector acts as the central aggregation and routing point. It receives telemetry from all services, applies processors (sampling, enrichment, redaction), and exports to the appropriate storage backends.

Layer 3 — Storage

Three purpose-built storage backends: Loki for log streams, Prometheus TSDB for metric time series, and Tempo for distributed trace objects. Each is optimized for its signal type — they are not interchangeable.

Layer 4 — Visualization

Grafana connects to all three storage backends as data sources. It provides dashboards, Explore for ad-hoc queries, and alert rule management. Users interact with Grafana — not directly with the storage backends.

Core Components at a Glance

ComponentRoleSignal TypeProtocol InPort
OTel CollectorAggregation & routing hubAll threeOTLP/gRPC + HTTP4317, 4318
Grafana LokiLog aggregation & queryLogsHTTP (from Collector)3100
PrometheusMetrics scraping & TSDBMetricsPull (scrape /metrics)9090
Grafana TempoDistributed trace storageTracesOTLP/gRPC4317 (internal)
GrafanaUnified visualization UIAll threeHTTP queries to backends3000
AlertmanagerAlert routing & deduplicationAlertsHTTP (from Prometheus)9093
Node ExporterHost metrics (CPU/mem/disk)MetricsScraped by Prometheus9100
cAdvisorContainer metricsMetricsScraped by Prometheus8080

Signal Routing Map

Each of the three telemetry signal types follows a distinct routing path through the architecture. The OTel Collector is the fan-out point:

L

Logs

BizFirstGO services → OTel Collector (OTLP receiver) → Loki exporter → Grafana Loki (port 3100) → queryable via LogQL in Grafana

M

Metrics

BizFirstGO services expose /metrics endpoint → Prometheus scrapes every 15s → stored in TSDB → queryable via PromQL in Grafana

T

Traces

BizFirstGO services → OTel Collector (OTLP receiver) → Tempo exporter → Grafana Tempo → queryable via TraceQL and trace ID lookup in Grafana

The Correlation Model

The three signal types are not isolated silos — they are designed to be correlated. The primary correlation key is the TraceId, a 128-bit identifier that is:

Grafana's Derived Fields feature makes the TraceId in a Loki log line a clickable link that opens the corresponding trace in Tempo — enabling seamless cross-signal navigation during incident investigation.

Why Three Separate Stores?

Logs, metrics, and traces have fundamentally different query patterns, cardinality characteristics, and retention needs. Loki is optimized for label-filtered stream queries; Prometheus is optimized for time-series range queries with mathematical functions; Tempo is optimized for trace-ID lookup and span attribute search. A single store cannot efficiently serve all three workloads.

Infrastructure Prerequisites

Before deploying BizFirst Observe, ensure the following infrastructure is available: