Portal Community

Grafana as the Unified UI

A key architectural decision in BizFirst Observe is that users never interact directly with Loki, Prometheus, or Tempo. All observability workflows go through Grafana. This simplifies access control (one place to manage permissions), provides a consistent UX, and enables cross-signal correlation in a single view.

Data Source Connections

Grafana connects to each storage backend via its configured data source. BizFirst Observe provisions these connections automatically at startup via Grafana provisioning:

# grafana-provisioning/datasources/bizfirst-observe.yaml
apiVersion: 1
datasources:
  - name: Loki
    type: loki
    url: http://loki:3100
    access: proxy
    jsonData:
      maxLines: 1000
      derivedFields:
        - datasourceName: Tempo
          matcherRegex: '"traceId":"(\w+)"'
          name: TraceID
          url: '$${__value.raw}'
          datasourceUid: tempo-uid

  - name: Prometheus
    type: prometheus
    url: http://prometheus:9090
    access: proxy
    jsonData:
      timeInterval: 15s
      exemplarTraceIdDestinations:
        - name: traceID
          datasourceUid: tempo-uid

  - name: Tempo
    type: tempo
    url: http://tempo:3200
    access: proxy
    uid: tempo-uid
    jsonData:
      tracesToLogs:
        datasourceName: Loki
        tags: ['service.name', 'tenant_id']
        spanStartTimeShift: -5m
        spanEndTimeShift: 5m
      serviceMap:
        datasourceUid: prometheus-uid
      search:
        hide: false

Pre-Built BizFirstGO Dashboards

BizFirst Observe ships with 10 pre-built Grafana dashboards covering the most common observability scenarios for BizFirstGO:

DashboardPrimary MetricsData Sources Used
Flow Studio OverviewExecution rate, error rate, p50/p95/p99 latencyPrometheus + Loki
Node PerformancePer-node-type execution time heatmap, error rates by node typePrometheus
HIL AnalyticsSuspension duration, approval rates, timeout rates, backlog gaugePrometheus + Loki
EdgeStream ThroughputMessages/sec per topic, subscriber counts, delivery latencyPrometheus
Octopus Agent PerformanceLLM call duration, token usage, memory access ratesPrometheus
Tenant HealthPer-tenant workflow success rate, resource consumptionPrometheus
API LatencyP99 latency per API endpoint, error ratePrometheus
Error AnalysisError log volume, top error patternsLoki
Trace ExplorerTrace search by service/duration/statusTempo
InfrastructureCPU, memory, disk usage for all nodesPrometheus (Node Exporter)

Alert Management

BizFirst Observe supports two alerting paths, which can be used simultaneously:

Grafana Unified Alerting

Define alert rules directly in Grafana dashboards. Supports Loki, Prometheus, and Tempo queries as alert conditions. Manages contact points (Slack, email, PagerDuty) natively.

Prometheus Alertmanager

Classic Prometheus-style alert rules in alert-rules.yml. Routes to Alertmanager which handles deduplication, grouping, and routing. Preferred for complex routing logic.

Grafana Access Control

Grafana's built-in role system controls who can see which dashboards and data sources:

RoleDashboard AccessCan Create DashboardsCan Manage Alerts
ViewerRead-only: assigned dashboardsNoNo
EditorRead/write: assigned dashboardsYes (in assigned folders)Yes
AdminAll dashboards + data sourcesYesYes
Grafana is Stateless by Design

Grafana stores its configuration (data sources, dashboards, users) in its own SQL database (default: SQLite, production: PostgreSQL). The dashboards and data sources defined in provisioning YAML files are automatically loaded at startup — this means you can manage the entire Grafana configuration as code in your repository and Grafana becomes stateless from a deployment perspective.