尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Supabase Log Drains 怎么把项目日志批量推送到自定义 HTTP 端点?

Supabase Log Drains 怎么把项目日志批量推送到自定义 HTTP 端点? Supabase Log Drains 怎么把项目日志批量推送到自定义 HTTP 端点【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase如果你的目标是把 Supabase 项目的运行日志Postgres、Auth、Storage、Edge Functions 等服务产生的日志持续推送到自己控制的 HTTP 端点Log Drains 的 Custom Endpoint 选项就是文档给出的路径Supabase 会把日志以 JSON 数组形式通过批量 HTTP POST 请求发给你配置的 URL。该功能仅面向 Pro、Team 和 Enterprise 套餐用户配置入口在控制台的 Project Settings Log Drains 页面。批量行为有明确边界HTTP 端点收到的请求按批次发送单批最多 250 条事件或间隔最多 1 秒以先达到者为准。也就是说你的端点要处理的是一批日志一个 POST 请求而不是单条日志一个请求。开始前需要准备的值文档中的示例用两个占位符本文在首次出现时说明后续代码块沿用[PROJECT REF]你的项目 ref在控制台项目设置中可见用于拼接端点 URL 和supabase functions deploy命令[PUBLISHABLE KEY]你的项目 publishable key在控制台 API settings 中可见用于请求头鉴权。Custom Endpoint 的必填配置项为URL — 端点地址http://或https://均可HTTP Version —HTTP/1或HTTP/2Gzip — 开启后请求体会先压缩再发送Headers — 可选的 key/value 键值对会附加到每个请求上用于鉴权或路由。另外要注意文档中的一个限制发往自定义端点的请求目前没有签名签名功能计划在未来版本提供。如果你的端点对来源有强校验要求需要自行在应用层处理信任问题。用 Edge Function 作为接收端点文档示例路径官方文档给出的接收端示例是一个 Edge Function。下面按文档步骤执行。1. 创建并编写接收函数supabase functions new log-receiver把函数体更新为解析并打印收到的日志批次此代码可直接使用import npm:supabase/functions-js/edge-runtime.d.ts Deno.serve(async (req) { const data await req.json() console.log(Received ${data.length} logs, first log:\n ${JSON.stringify(data[0])}) return new Response(JSON.stringify({ message: ok }), { headers: { Content-Type: application/json }, }) })2. 部署函数将[PROJECT REF]替换为你的项目 refsupabase functions deploy log-receiver --project-ref [PROJECT REF]3. 在控制台创建 drain进入 Project Settings Log Drains创建一个新的 Custom Endpoint drainGzip 关闭URL 设置为https://[PROJECT REF].supabase.co/functions/v1/log-receiver把[PROJECT REF]替换为你的项目 ref添加请求头Authorization: Bearer [PUBLISHABLE KEY]替换为实际的 publishable key。关于这条路径的一个关键警告文档明确指出把 Edge Function 部署为 log drain 目标会形成反馈循环——每次 drain 事件本身又会产生一条新的 Edge Function 日志进而触发下一次 drain 事件。批量发送的行为限制了循环升级的速度但它会持续运行。因此这个 Edge Function 示例适合作为验证管道是否打通的接收端文档也以此定位它walkthrough。如果你打算长期运行请评估由此产生的持续日志量和费用或改用其他自建服务作为端点。验证推送是否生效上面的示例函数在每次收到批次时会打印日志条数和首条日志内容Received 12 logs, first log: {message:...,source:postgres,...}创建 drain 后在项目有日志活动例如访问数据库、调用 Auth时查看log-receiver函数的运行日志能看到形如Received N logs的输出即说明端点已在接收批次。具体条数与日志内容随你的实际负载变化上面只是按函数代码输出的格式示例不是固定预期值。函数返回 200 与{message:ok}表示端点正确处理了请求如果函数返回非成功状态或超时说明问题出在你的接收端而不是 drain 配置本身。可选分支开启 Gzip 压缩开启 Gzip 可以压缩请求体、降低带宽占用。开启后请求体会被 gzip 编码接收端需要自行解压。文档给出的 Edge Function 处理示例使用 Node 兼容的node:zlibAPIimport { gunzipSync } from node:zlib Deno.serve(async (req) { try { const contentEncoding req.headers.get(content-encoding) if (contentEncoding ! gzip) { return new Response(Request body is not gzip compressed, { status: 400 }) } const compressedBody await req.arrayBuffer() const decompressedBody gunzipSync(new Uint8Array(compressedBody)) const data JSON.parse(new TextDecoder().decode(decompressedBody)) console.log(Received: ${data.length} logs.) return new Response(ok, { headers: { Content-Type: text/plain } }) } catch (error) { console.error(Error:, error) return new Response(Error processing request, { status: 500 }) } })如果接收端是 Edge Function还要注意其运行时内存上限为 256MB过大的压缩请求体可能触发 out-of-memory 错误见 压缩请求处理文档。更多解压细节可参考同一文档。费用与用量查看Log Drains 按三个维度计费见 Log Drains 计费文档Log Drain Hours每个已配置的 drain 按小时计费不足一小时也按整小时计价格为每小时 0.0822每月 60Log Drain Events按包计费1 包 100 万事件超出部分向上取整到下一整包每包 0.2Egress日志导出产生的流量费单独计。需要注意Log Drains 不受 Spend Cap 约束。Log Drain Events 的用量可以在组织organization的 usage 页面按项目和时间段查看。drain 移除后不再计费。限制与下一步请求目前未签名端点侧无法通过官方机制校验请求来源HTTP 批量上限为 250 条事件 / 1 秒端点实现需要按一批多条解析 JSON 数组而不是单条事件如果你的目标是可观测性平台而非自建端点同一页面还提供了 OpenTelemetry (OTLP)、Datadog、Loki、Amazon S3、Sentry、Axiom、Last9、Syslog 等目的地配置项各不相同可对照 Log Drains 文档 各章节想把应用侧 trace 与 Supabase 日志关联或同时导出 Postgres 性能指标文档在 Additional resources 中给出了 JS SDK Tracing 与 Metrics API 的指引。【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表