Skip to main content
This guide sets up production observability for a Livepeer Gateway using Prometheus and Grafana. The Gateway must already be running
  • for quick verification, see .
For on-chain Gateways, Prometheus metrics complement but do not replace
  • contract events and deposit state require separate monitoring.

Enable Metrics

Add the -monitor flag when starting the Gateway. Without it, the /metrics endpoint is not exposed.
Enable Metrics
livepeer \
  -gateway \
  -monitor \
  -metricsPerStream \
  -httpAddr 0.0.0.0:8935 \
  [other flags...]
Monitoring flags: Verify metrics are exposed:
Verify Metrics
curl http://localhost:8935/metrics | head -30
Prometheus-format output with livepeer_ prefixed metric names confirms the endpoint is active.

Setup

Key Metrics

Grafana Dashboards

The livepeer/livepeer-monitoring Docker stack includes three starter Grafana dashboards:
Active sessions, success rate, transcoding latency, and Orchestrator connectivity. The primary operational dashboard for day-to-day monitoring.
ETH deposit and reserve over time, ticket value sent, and payment creation errors. Critical for on-chain Gateways to track deposit depletion rate.
Realtime ratios, latency distribution (p50, p95, p99), and segment success/failure breakdown. Useful for identifying quality degradation patterns.
Access Grafana at http://localhost:3000 (default credentials admin / admin). The starter dashboards are pre-configured to query the bundled Prometheus instance. Custom panels to consider adding:
  • Deposit depletion forecast (linear regression on livepeer_gateway_deposit over 24h)
  • Session count vs -maxSessions limit as a percentage gauge
  • AI discovery error rate overlaid with session count (correlation check)

Alert Rules

Critical

Critical Errors
groups:
  - name: livepeer-gateway-critical
    rules:
      - alert: GatewayDown
        expr: up{job=~"livepeer.*"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Livepeer Gateway is unreachable"

      - alert: DepositExhausted
        expr: livepeer_gateway_deposit < 10000000000000000
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Gateway ETH deposit critically low ({{ $value | humanize }} wei)"

      - alert: SuccessRateCritical
        expr: |
          rate(livepeer_segment_transcoded_total[5m]) /
          rate(livepeer_segment_source_appeared_total[5m]) < 0.90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Transcoding success rate below 90%"

Warning

Warning Errors
      - alert: DepositLow
        expr: livepeer_gateway_deposit < 50000000000000000
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "Gateway ETH deposit below 0.05 ETH - top up soon"

      - alert: HighTranscodeLatency
        expr: |
          rate(livepeer_transcode_overall_latency_seconds_sum[5m]) /
          rate(livepeer_transcode_overall_latency_seconds_count[5m]) > 5
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Average transcoding latency exceeds 5 seconds"

      - alert: PaymentCreateErrors
        expr: rate(livepeer_payment_create_errors[5m]) > 0
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "Ticket creation errors - check Arbitrum RPC health"

      - alert: AIDiscoveryErrors
        expr: rate(livepeer_discovery_errors_total[5m]) > 0
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Orchestrator discovery failing - check -orchAddr list"
Last modified on March 16, 2026