From 42c23ff030608dc753c814c18d1a7dd22779a9ca Mon Sep 17 00:00:00 2001 From: bskinny Date: Mon, 3 Nov 2025 08:37:09 -0500 Subject: [PATCH 1/3] Supabase Cloud: no-assets, define label --- supabase_cloud/CHANGELOG.md | 7 +++ supabase_cloud/README.md | 65 ++++++++++++++++++++++ supabase_cloud/assets/service_checks.json | 1 + supabase_cloud/images/IMAGES_README.md | 41 ++++++++++++++ supabase_cloud/manifest.json | 54 +++++++++++++++++++ supabase_cloud/metadata.csv | 66 +++++++++++++++++++++++ 6 files changed, 234 insertions(+) create mode 100644 supabase_cloud/CHANGELOG.md create mode 100644 supabase_cloud/README.md create mode 100644 supabase_cloud/assets/service_checks.json create mode 100644 supabase_cloud/images/IMAGES_README.md create mode 100644 supabase_cloud/manifest.json create mode 100644 supabase_cloud/metadata.csv diff --git a/supabase_cloud/CHANGELOG.md b/supabase_cloud/CHANGELOG.md new file mode 100644 index 0000000000000..a3e4ac685ba3d --- /dev/null +++ b/supabase_cloud/CHANGELOG.md @@ -0,0 +1,7 @@ +# CHANGELOG - Supabase Cloud + +## 1.0.0 / 2025-11-03 + +***Added***: + +* Initial Release with support for Supabase project metrics and Log Drain \ No newline at end of file diff --git a/supabase_cloud/README.md b/supabase_cloud/README.md new file mode 100644 index 0000000000000..ac576383af149 --- /dev/null +++ b/supabase_cloud/README.md @@ -0,0 +1,65 @@ +## Overview + +[Supabase][2] is a Postgres development platform that provides a Postgres database with additional features including +Authentication, instant APIs, Edge Functions, Realtime subscriptions, Object Storage, and Vector embeddings. +While Supabase supports a self-hosted version, this integration only supports Supabase Cloud project instances. + +With this integration, you can, per Supabase project: +- Collect essential Postgres Database metrics and monitor critical behavior. +- Collect Postgres server OS metrics and monitor CPU/Filesystem/Memory/Network load. +- With a [Supabase Log Drain][3] enabled: + - Collect Postgres database logs which can include slow statements, errors, and audit logs. + - Collect Supabase application layer logs such as edge functions and Auth/REST/Storage/Realtime APIs. + - Collect business logic log messages from your edge function applications. + +## Setup + +The Supabase Cloud integration requires the service_role API key to retrieve metrics from the hosted project's +[metrics endpoint][4] only. + +### Retrieve the service_role API key + +1. Log in to [Supabase][2] as an administrator. +2. Navigate to **Project Settings** > **API Keys**. +3. On the **Legacy API Keys** tab, retrieve the service_role API key. + +### Connect your Supabase Cloud project to Datadog + +1. Add your Supabase hosted project ID and service_role API key + |Parameters|Description| + |--------------------|--------------------| + |Project ID|Supabase project ID: E.g. `https://supabase.com/dashboard/project//settings/general`.| + |Service_role API Key|API key needed for communication with the Metrics endpoint.| + +2. Click the **Save** button to save your settings. + +## Data Collected + +### Metrics + +See [metadata.csv][5] for the full list of metrics provided by this integration. + +### Logs + +When you enable a Log Drain within Supabase for your hosted project, all Postgres and application log +messages will be pushed to Datadog. Datadog leverages its built-in log pipelines to parse and enrich these logs, +facilitating easy search and detailed insights. + +### Events + +The Supabase Cloud integration does not include any events. + +### Service Checks + +The Supabase Cloud integration does not include any service checks. + +## Troubleshooting + +Need help? Contact [Datadog support][1]. + +[1]: https://docs.datadoghq.com/help/ +[2]: https://supabase.com/ +[3]: https://supabase.com/docs/guides/telemetry/log-drains +[4]: https://supabase.com/docs/guides/telemetry/metrics +[5]: https://github.com/DataDog/integrations-core/blob/master/supabase_cloud/metadata.csv + diff --git a/supabase_cloud/assets/service_checks.json b/supabase_cloud/assets/service_checks.json new file mode 100644 index 0000000000000..fe51488c7066f --- /dev/null +++ b/supabase_cloud/assets/service_checks.json @@ -0,0 +1 @@ +[] diff --git a/supabase_cloud/images/IMAGES_README.md b/supabase_cloud/images/IMAGES_README.md new file mode 100644 index 0000000000000..443f3c45e3385 --- /dev/null +++ b/supabase_cloud/images/IMAGES_README.md @@ -0,0 +1,41 @@ +# Marketplace Media Carousel Guidelines + +## Using the media gallery + +Please upload images to use the media gallery. Integrations require a minimum of 3 images. Images should highlight your product, your integration, and a full image of the Datadog integration dashboard. The gallery +can hold a maximum of 8 pieces of media total, and one of these pieces of media +can be a video (guidelines and submission steps below). Images should be +added to your /images directory and referenced in the manifest.json file. + + +## Image and video requirements + +### Images + +``` +File type : .jpg or .png +File size : ~500 KB per image, with a max of 1 MB per image +File dimensions : The image must be between 1440px and 2880px width, with a 16:9 aspect ratio (for example: 1440x810) +File name : Use only letters, numbers, underscores, and hyphens +Color mode : RGB +Color profile : sRGB +Description : 300 characters maximum +``` + +### Video + +To display a video in your media gallery, please send our team the zipped file +or a link to download the video at `marketplace@datadog.com`. In addition, +please upload a thumbnail image for your video as a part of the pull request. +Once approved, we will upload the file to Vimeo and provide you with the +vimeo_id to add to your manifest.json file. Please note that the gallery can +only hold one video. + +``` +File type : MP4 H.264 +File size : Max 1 video; 1 GB maximum size +File dimensions : The aspect ratio must be exactly 16:9, and the resolution must be 1920x1080 or higher +File name : partnerName-appName.mp4 +Run time : Recommendation of 60 seconds or less +Description : 300 characters maximum +``` diff --git a/supabase_cloud/manifest.json b/supabase_cloud/manifest.json new file mode 100644 index 0000000000000..ef18859070219 --- /dev/null +++ b/supabase_cloud/manifest.json @@ -0,0 +1,54 @@ +{ + "manifest_version": "2.0.0", + "app_uuid": "76054e37-5919-442f-a7a6-5a77ed5e7b0e", + "app_id": "supabase-cloud", + "display_on_public_website": false, + "tile": { + "overview": "README.md#Overview", + "configuration": "README.md#Setup", + "support": "README.md#Support", + "changelog": "CHANGELOG.md", + "description": "Monitor the activity, health, and performance of your Supabase Cloud projects.", + "title": "Supabase Cloud", + "media": [], + "classifier_tags": [ + "Category::Cloud", + "Category::Developer Tools", + "Category::Metrics", + "Category::Log Collection", + "Offering::Integration", + "Submitted Data Type::Metrics", + "Submitted Data Type::Logs" + ] + }, + "assets": { + "integration": { + "auto_install": false, + "source_type_id": 60482379, + "source_type_name": "Supabase Cloud", + "events": { + "creates_events": false + }, + "metrics": { + "prefix": "supabase.cloud.", + "check": [ + "supabase.cloud.pg.up", + "supabase.cloud.pg_database.size.mb" + ], + "metadata_path": "metadata.csv" + }, + "service_checks": { + "metadata_path": "assets/service_checks.json" + } + }, + "dashboards": {}, + "monitors": {}, + "saved_views": {} + }, + "author": { + "support_email": "help@datadoghq.com", + "name": "Datadog", + "homepage": "https://www.datadoghq.com", + "sales_email": "info@datadoghq.com" + } +} diff --git a/supabase_cloud/metadata.csv b/supabase_cloud/metadata.csv new file mode 100644 index 0000000000000..2b56cb9927f91 --- /dev/null +++ b/supabase_cloud/metadata.csv @@ -0,0 +1,66 @@ +metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags +supabase.cloud.auth_users.user_count,gauge,,user,,The number of users in the project database.,0,supabase_cloud,,, +supabase.cloud.connection.stats.connection.count,gauge,,user,,The number of connections to the project database.,0,supabase_cloud,,, +supabase.cloud.node.cpu.online,count,,,,The CPU is online.,0,supabase_cloud,,, +supabase.cloud.node.cpu.seconds.count,count,,second,,The number of seconds the CPUs spent in each mode.,0,supabase_cloud,,, +supabase.cloud.node.disk.filesystem.info,gauge,,,,The disk filesystem description.,0,supabase_cloud,,, +supabase.cloud.node.disk.info,gauge,,,,"The disk device name, model, etc. described via tags.",0,supabase_cloud,,, +supabase.cloud.node.disk.io_time_seconds.count,count,,second,,The total seconds spent doing I/Os.,0,supabase_cloud,,, +supabase.cloud.node.disk.io_time_weighted_seconds.count,count,,,,The weighted # of seconds spent doing I/Os.,0,supabase_cloud,,, +supabase.cloud.node.disk.read_bytes.count,count,,byte,,The total number of bytes read successfully.,0,supabase_cloud,,, +supabase.cloud.node.disk.read_time_seconds.count,count,,,,The total number of seconds spent by all reads.,0,supabase_cloud,,, +supabase.cloud.node.disk.write_time_seconds.count,count,,second,,This is the total number of seconds spent by all writes.,0,supabase_cloud,,, +supabase.cloud.node.disk.written_bytes.count,count,,byte,,The total number of bytes written successfully.,0,supabase_cloud,,, +supabase.cloud.node.filesystem.avail.bytes,gauge,,byte,,The filesystem space available to non-root users in bytes.,0,supabase_cloud,,, +supabase.cloud.node.filesystem.device_error,gauge,,,,Whether an error occurred while getting statistics for the given device.,0,supabase_cloud,,, +supabase.cloud.node.filesystem.size_bytes,gauge,,byte,,The filesystem size in bytes,0,supabase_cloud,,, +supabase.cloud.node.load1,gauge,,,,1m load average.,0,supabase_cloud,,, +supabase.cloud.node.load15,gauge,,,,15m load average.,0,supabase_cloud,,, +supabase.cloud.node.load5,gauge,,,,5m load average.,0,supabase_cloud,,, +supabase.cloud.node.memory.active_bytes,gauge,,byte,,Memory information field Active_bytes.,0,supabase_cloud,,, +supabase.cloud.node.memory.buffers.bytes,gauge,,byte,,Memory information field Buffers_bytes.,0,supabase_cloud,,, +supabase.cloud.node.memory.cached_byte.,gauge,,byte,,Memory information field Cached_bytes.,0,supabase_cloud,,, +supabase.cloud.node.memory.inactive.bytes,gauge,,byte,,Memory information field Inactive_bytes.,0,supabase_cloud,,, +supabase.cloud.node.memory.mem_available.bytes,gauge,,byte,,Memory information field MemAvailable_bytes.,0,supabase_cloud,,, +supabase.cloud.node.memory.mem_free.bytes,gauge,,byte,,Memory information field MemFree_bytes.,0,supabase_cloud,,, +supabase.cloud.node.memory.mem_total.bytes,gauge,,byte,,Memory information field MemTotal_bytes.,0,supabase_cloud,,, +supabase.cloud.node.memory.swap_free.bytes,gauge,,byte,,Memory information field SwapFree_bytes.,0,supabase_cloud,,, +supabase.cloud.node.memory.swap_total.bytes,gauge,,byte,,Memory information field SwapTotal_bytes.,0,supabase_cloud,,, +supabase.cloud.node.network.receive_bytes.count,count,,byte,,Network device statistic receive_bytes.,0,supabase_cloud,,, +supabase.cloud.node.network.transmit_bytes.count,count,,byte,,Network device statistic transmit_bytes.,0,supabase_cloud,,, +supabase.cloud.node.vmstat.oom_kill.count,count,,,,/proc/vmstat information field oom_kill.,0,supabase_cloud,,, +supabase.cloud.pg.up,gauge,,,,Whether the last scrape of metrics from PostgreSQL was able to connect to the server.,0,supabase_cloud,,, +supabase.cloud.pg_database.size.mb,gauge,,megabyte,,Disk space used by the database.,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.buffers_alloc.count,count,,,,Buffers allocated,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.buffers_checkpoint.count,count,,,,Buffers written during checkpoints,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.buffers_clean.count,count,,,,Buffers written by bg writter,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.checkpoint_sync_time.count,count,,,,Time spent synchronizing checkpoint files to disk,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.checkpoint_write_time.count,count,,,,Time spent writing checkpoint files to disk,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.checkpoints_req.count,count,,,,Requested checkpoints performed,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.checkpoints_timed.count,count,,,,Scheduled checkpoints performed,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.maxwritten_clean.count,count,,,,Number of times bg writer stopped a cleaning scan because it had written too many buffers,0,supabase_cloud,,, +supabase.cloud.pg_stat_bgwriter.stats_reset.count,count,,,,Most recent stat reset time,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.blks_hit.count,count,,,,Disk blocks found in buffer cache,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.blks_read.count,count,,,,Number of disk blocks read,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.deadlocks.count,count,,,,Deadlocks detected,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.num_backends,gauge,,,,The number of active backends,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.temp_bytes.count,count,,byte,,Temp data written by queries,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.temp_files.count,count,,,,Temp files created by queries,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.tup_deleted.count,count,,,,Rows deleted,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.tup_fetched.count,count,,,,Rows fetched by queries,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.tup_inserted.count,count,,,,Rows inserted,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.tup_returned.count,count,,,,Rows returned by queries,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.tup_updated.count,count,,,,Rows updated,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.xact_commit.count,count,,,,Transactions committed,0,supabase_cloud,,, +supabase.cloud.pg_stat_database.xact_rollback.count,count,,,,Transactions rolled back,0,supabase_cloud,,, +supabase.cloud.pg_status.in_recovery,gauge,,,,Database in recovery,0,supabase_cloud,,, +supabase.cloud.pg_wal.size,gauge,,megabyte,,Disk space used by WAL files,0,supabase_cloud,,, +supabase.cloud.pgrst.db_pool.available_connections,gauge,,connection,,Available connections in the pool,0,supabase_cloud,,, +supabase.cloud.pgrst.db_pool.max_connections,gauge,,connection,,Max pool connections,0,supabase_cloud,,, +supabase.cloud.pgrst.db_pool.timeouts.count,count,,connection,,The total number of pool connection timeouts,0,supabase_cloud,,, +supabase.cloud.pgrst.db_pool.waiting,gauge,,,,Requests waiting to acquire a pool connection,0,supabase_cloud,,, +supabase.cloud.pgrst.schema_cache.loads.count,count,,,,The total number of times the schema cache was loaded,0,supabase_cloud,,, +supabase.cloud.pgrst.schema_cache.query_time_seconds,gauge,,second,,The query time in seconds of the last schema cache load,0,supabase_cloud,,, +supabase.cloud.postgresql.restarts.count,count,,,,Number of times postgresql has been restarted,0,supabase_cloud,,, +supabase.cloud.realtime_postgres_changes.client_subscriptions,gauge,,,,Client subscriptions listening for Postgres changes,0,supabase_cloud,,, +supabase.cloud.realtime_postgres_changes.total_subscriptions,gauge,,,,Total subscription records listening for Postgres changes,0,supabase_cloud,,, From 7670d1244b290acc6515ea7e8d36d2729928084b Mon Sep 17 00:00:00 2001 From: Brian Williams Date: Mon, 3 Nov 2025 08:51:24 -0500 Subject: [PATCH 2/3] Update labeler.yml with supabase_cloud --- .github/workflows/config/labeler.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/config/labeler.yml b/.github/workflows/config/labeler.yml index 1a07add94ffdd..d74f59e8dca1a 100644 --- a/.github/workflows/config/labeler.yml +++ b/.github/workflows/config/labeler.yml @@ -659,6 +659,8 @@ integration/strimzi: - strimzi/**/* integration/supabase: - supabase/**/* +integration/supabase_cloud: +- supabase_cloud/**/* integration/supervisord: - supervisord/**/* integration/supply_chain_firewall: From c977bffb25ecc170a3e7b069d2d059f30b9c76a3 Mon Sep 17 00:00:00 2001 From: bskinny Date: Mon, 3 Nov 2025 15:26:37 -0500 Subject: [PATCH 3/3] Supabase Cloud: remove unnecessary IMAGES_README.md --- supabase_cloud/images/IMAGES_README.md | 41 -------------------------- 1 file changed, 41 deletions(-) delete mode 100644 supabase_cloud/images/IMAGES_README.md diff --git a/supabase_cloud/images/IMAGES_README.md b/supabase_cloud/images/IMAGES_README.md deleted file mode 100644 index 443f3c45e3385..0000000000000 --- a/supabase_cloud/images/IMAGES_README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Marketplace Media Carousel Guidelines - -## Using the media gallery - -Please upload images to use the media gallery. Integrations require a minimum of 3 images. Images should highlight your product, your integration, and a full image of the Datadog integration dashboard. The gallery -can hold a maximum of 8 pieces of media total, and one of these pieces of media -can be a video (guidelines and submission steps below). Images should be -added to your /images directory and referenced in the manifest.json file. - - -## Image and video requirements - -### Images - -``` -File type : .jpg or .png -File size : ~500 KB per image, with a max of 1 MB per image -File dimensions : The image must be between 1440px and 2880px width, with a 16:9 aspect ratio (for example: 1440x810) -File name : Use only letters, numbers, underscores, and hyphens -Color mode : RGB -Color profile : sRGB -Description : 300 characters maximum -``` - -### Video - -To display a video in your media gallery, please send our team the zipped file -or a link to download the video at `marketplace@datadog.com`. In addition, -please upload a thumbnail image for your video as a part of the pull request. -Once approved, we will upload the file to Vimeo and provide you with the -vimeo_id to add to your manifest.json file. Please note that the gallery can -only hold one video. - -``` -File type : MP4 H.264 -File size : Max 1 video; 1 GB maximum size -File dimensions : The aspect ratio must be exactly 16:9, and the resolution must be 1920x1080 or higher -File name : partnerName-appName.mp4 -Run time : Recommendation of 60 seconds or less -Description : 300 characters maximum -```