Observability

Every op is instrumented — for free.

Every source, sink, transform, and state operation emits Prometheus metrics and OpenTelemetry tracing spans automatically — no per-connector code, no wrappers. Scrape it, ship spans over OTLP, and point Grafana at it.

Prometheus metrics OTLP tracing spans labels: pipeline · row · connector zero per-connector code
The metric catalog

Counters, gauges, and histograms across the whole path.

Over 120 metrics across the runtime — a representative set per subsystem below; the full list, histogram buckets, and label values are in the reference.

Source

faucet_source_records_total counter Records read
faucet_source_errors_total counter Read errors, by kind
faucet_source_page_duration_seconds histogram Time per page
faucet_source_in_flight gauge Pages being read

Sink

faucet_sink_records_total counter Records written
faucet_sink_writes_total counter Write calls
faucet_sink_errors_total counter Write errors
faucet_sink_write_duration_seconds histogram Time per write
faucet_sink_flush_duration_seconds histogram Time per flush

Transform

faucet_transform_records_in_total counter Records in
faucet_transform_records_out_total counter Records out
faucet_transform_duration_seconds histogram Time per page
faucet_transform_errors_total counter Errors, by kind

State

faucet_state_get_total counter Bookmark reads (hit/miss)
faucet_state_put_total counter Bookmark writes
faucet_state_errors_total counter State errors, by op
faucet_state_*_duration_seconds histogram Time per op

Pipeline

faucet_pipeline_runs_total counter Runs, by status
faucet_pipeline_run_duration_seconds histogram Run wall-clock
faucet_pipeline_in_flight gauge Runs in progress
faucet_pipeline_seconds_since_last_bookmark gauge Freshness
faucet_build_info gauge Version label (group_left)

Dead-letter queue

faucet_sink_dlq_records_total counter Rows routed to the DLQ
faucet_sink_dlq_pages_total counter DLQ pages written
faucet_sink_dlq_write_duration_seconds histogram Time per DLQ write
faucet_sink_dlq_budget_exceeded_total counter DLQ budget exceeded

Governance

faucet_quality_checks_total counter Quality checks run
faucet_contract_violations_total counter Contract breaches
faucet_schema_drift_total counter Drift events, by kind
faucet_masking_fields_total counter Fields masked
faucet_lineage_events_total counter OpenLineage events emitted
faucet_pipeline_sla_violations_total counter SLA violations, by kind

Resilience

faucet_resilience_retries_total counter Retries, by connector
faucet_resilience_circuit_state gauge Circuit-breaker state
faucet_resilience_giveup_total counter Give-ups after retries
faucet_resilience_poison_rows_total counter Poison rows quarantined

Topology & scale

faucet_tee_records_total counter Records fanned out (tee)
faucet_merge_records_total counter Records merged (fan-in)
faucet_join_matches_total counter Join matches
faucet_pipeline_adaptive_batch_size gauge Adaptive batch size

Plus metrics for backfill, scheduling, serve/cluster, notifications, and cleanup — see all 120+ in the reference →

Wire it up

Scrape it in two minutes.

faucet serve exposes a Prometheus /metrics endpoint; point your scraper at it. Tracing spans export over OTLP to any collector. faucet_build_info carries the running version — group_left it onto any metric to annotate dashboards.

  • Common labels: pipeline, row, connector.
  • run_id is a span attribute only — never a high-cardinality label.
  • Drop-guard timers sample even on cancellation; panics surface as a typed error kind.
Observability reference →
# expose /metrics
faucet serve --metrics-addr 0.0.0.0:9090

# prometheus.yml
scrape_configs:
  - job_name: faucet
    static_configs:
      - targets: ["localhost:9090"]

# annotate any panel with the running version
rate(faucet_sink_records_total[5m])
  * on() group_left(version) faucet_build_info
Get started

Your first pipeline runs in five minutes.

Install the CLI, scaffold a config, and move real data — nothing external to stand up.

curl -LsSf https://github.com/faucet-hq/faucet-stream/releases/latest/download/faucet-cli-installer.sh | sh
brew install faucet-hq/faucet-stream/faucet-cli