Supabase OpenTelemetry Integration
| Version | 0.1.4
|
| Managed integration release status |
|
| Subscription level What's this? |
Basic |
| Developed by What's this? |
Elastic |
| Minimum Kibana version(s) | 9.4.0 |
You can use this integration as an Elastic Managed integration on Elastic Cloud Hosted deployments running this version or later.
To use pre-release integrations, go to the Integrations page in Kibana, scroll down, and toggle on the Display beta integrations option.
Supabase is an open-source Firebase alternative built on PostgreSQL. It bundles a managed Postgres database with authentication, auto-generated REST APIs, realtime subscriptions, file storage, and connection pooling.
This integration scrapes metrics from the Supabase Metrics API (Prometheus-compatible) using the OTel Collector's Prometheus receiver. Logs are forwarded through Supabase Log Drains into an Elastic Cloud managed endpoint. Elastic operates the endpoint for logs, so you do not need to install or run an OpenTelemetry Collector.
- Metrics (
supabase.metrics.otel) — Infrastructure (CPU, memory, load, disk I/O, filesystem, network), PostgreSQL (size, connections, transactions, cache, WAL, replication, bgwriter, statements), Supavisor, PostgREST, Auth, Realtime, and Storage - Logs (
supabase.otel) — API Gateway, PostgreSQL, PostgREST, Edge Functions, Storage, Realtime, and connection pooling
Metrics are stored with native OTel schema — no field renaming or custom mapping is applied. Raw Prometheus metric names are preserved under the metrics.* namespace.
Once data starts flowing, the Supabase OpenTelemetry Assets package provides dashboards for infrastructure, PostgreSQL, application services, and service logs.
This integration requires a Supabase Pro, Team, or Enterprise plan. The Metrics API and Log Drains are not available on the Free tier.
The log drain path has been tested with Supabase Log Drains delivering OTLP logs to /inputs/supabase/_default_/v1/logs on the Elastic Cloud managed endpoint.
You need Elasticsearch for storing and searching your data and Kibana for visualizing and managing it. You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, or self-manage the Elastic Stack on your own hardware.
The managed endpoint used for logs is available on Elastic Cloud Serverless and Elastic Cloud Hosted. It is not available for self-managed, ECE, or ECK clusters. Refer to Managed inputs.
| Requirement | Details |
|---|---|
| Supabase plan | Pro, Team, or Enterprise |
| Elastic Stack | 9.4.0+ |
| Input package | prometheus_input_otel (installed automatically as a dependency) |
| Content package | supabase_otel (installed automatically as a dependency) |
Get your Supabase credentials:
- Go to your Supabase dashboard → Settings → API
- Copy the Project URL (e.g.,
abcdefghijkl.supabase.co) - Copy the service_role key (under "Project API keys")
Add the integration in Kibana:
- Go to Management → Integrations → search for "Supabase"
- Click Add Supabase
- Fill in:
- Targets:
<your-project-ref>.supabase.co:443 - Username:
service_role - Service Role Key: paste your service_role JWT
- Targets:
Supabase logs reach Elasticsearch through a Supabase log drain that posts OTLP to an Elastic Cloud managed endpoint.
Setup has three parts, done in order:
- Enable Supabase Log Drains.
- Gather a managed endpoint URL and an API key from Elastic.
- Create the log drain in Supabase.
Logs are available through Supabase Log Drains. Log drains require a Pro, Team, or Enterprise plan.
In Kibana, go to Add data → More → Supabase and copy the Supabase logs endpoint. The URL follows this pattern:
https://<managed-endpoint>/inputs/supabase/_default_/v1/logs
For example:
https://abc123.ingest.us-east-1.aws.elastic.cloud/inputs/supabase/_default_/v1/logs
Create an API key in the same view, or follow the Send data to Elastic Cloud quickstart. Supabase sends it as Authorization: ApiKey <your-api-key>.
- Open Project Settings → Log Drains and create a drain.
- Choose OpenTelemetry (OTLP) as the destination.
- Set Endpoint to the Supabase logs endpoint URL, for example
https://abc123.ingest.us-east-1.aws.elastic.cloud/inputs/supabase/_default_/v1/logs. - Set Protocol to
http/protobufand enable Gzip. - Add header
Authorization: ApiKey <your-api-key>. - Save the drain.
The managed endpoint URL for logs from Supabase is always your Elastic Cloud public endpoint plus /inputs/supabase/_default_/v1/logs. Do not point the drain at a self-hosted collector; the supported path is the Elastic Cloud managed endpoint.
In Discover:
- Metrics:
data_stream.dataset: "supabase.metrics.otel" - Logs:
data_stream.dataset: "supabase.otel"
Supabase metrics are scraped by this integration. Log drain payloads are decoded by the Elastic Cloud managed endpoint and written to the data streams below. For log drain configuration on the Supabase side, see Log Drains. For managed endpoint behavior, see Managed inputs.
| Signal | Data stream | Fields |
|---|---|---|
| Metrics | metrics-supabase.metrics.otel-* |
Supabase Metrics documentation |
Metrics are scraped from the Supabase Metrics API endpoint:
GET https://<project-ref>.supabase.co/customer/v1/privileged/metrics
Authentication uses HTTP Basic Auth with service_role as the username and the service_role JWT as the password.
See the Supabase Metrics documentation for full details on available metrics.
| Category | Prefix | Examples |
|---|---|---|
| Node / Infrastructure | node_* |
node_cpu_seconds_total, node_memory_MemAvailable_bytes, node_load5, node_disk_read_bytes_total |
| PostgreSQL | pg_* |
pg_stat_database_xact_commit_total, pg_database_size_mb, pg_stat_bgwriter_buffers_alloc_total |
| Supavisor | supavisor_* |
supavisor_connections_active, supavisor_pool_connections_idle, supavisor_client_queries_count_total |
| PostgREST | pgrst_* |
pgrst_db_pool_available, pgrst_db_pool_timeouts_total, pgrst_schema_cache_query_time_seconds |
| Auth (GoTrue) | gotrue_* |
gotrue_running, gotrue_compare_hash_and_password_completed_total |
| Realtime | realtime_* |
realtime_postgres_changes_client_subscriptions |
| Go Runtime | go_*, process_* |
go_goroutines, process_cpu_seconds_total, process_resident_memory_bytes |
| HTTP | http_* |
http_server_request_duration_seconds_total, http_status_codes_total |
All metrics are stored under the metrics.* field namespace with their original Prometheus names (e.g., metrics.node_load5, metrics.pg_stat_database_xact_commit_total).
| Signal | Data stream | Fields |
|---|---|---|
| Logs | logs-supabase.otel-* |
Supabase Log Drains |
The Logs data stream holds every service forwarded by the drain. Use the Service filter on the Service logs overview dashboard to focus on a single service.
Changelog
| Version | Details | Minimum Kibana version |
|---|---|---|
| 0.1.4 | Enhancement (View pull request) Document Supabase log drain ingestion to the Elastic Cloud managed endpoint |
9.4.0 |
| 0.1.3 | Enhancement (View pull request) Update README to point to the supabase_otel package. |
9.4.0 |
| 0.1.2 | Enhancement (View pull request) Rename package title to "Supabase (OpenTelemetry)" to clarify the integration's OpenTelemetry-based collection. |
9.4.0 |
| 0.1.1 | Bug fix (View pull request) Set agentless deployment mode release field to beta. |
9.4.0 |
| 0.1.0 | Enhancement (View pull request) Initial release of the Supabase OTel integration for metrics collection via Prometheus receiver. |
9.4.0 |