首页/新闻资讯/正文详情

convex-backend 自托管日志治理:REDACT_LOGS_TO_CLIENT 日志脱敏与 DISABLE_BEACON 遥测关闭指南

发布时间:2026/9/24 8:38:28 来源:云帆数科 栏目:资讯中心
convex-backend 自托管日志治理:REDACT_LOGS_TO_CLIENT 日志脱敏与 DISABLE_BEACON 遥测关闭指南
数据库后端【免费下载链接】convex-backendThe open-source reactive database for app developers项目地址https://gitcode.com/gh_mirrors/co/convex-backend点击查看免费下载自托管部署 convex-backend 时默认行为与云托管产品存在差异云产品会自动对返回给客户端的日志进行 PII 脱敏而自托管版本默认不开启同时自托管构建内含有一个用于帮助 Convex 团队了解产品使用情况的匿名 beacon 遥测。本文基于 self-hosted/advanced/disabling_logging.md 文档结合源码深入讲解如何通过REDACT_LOGS_TO_CLIENT与DISABLE_BEACON两个环境变量及等价 CLI 参数实现日志脱敏与遥测关闭并给出 Docker Compose、裸机直接运行等场景的完整配置方案。读完本文你将掌握在生产自托管环境中防止服务端堆栈信息泄露到客户端、以及彻底关闭匿名上报的两种标准做法。一、背景为什么自托管需要主动处理日志与遥测Convex 的云托管产品cloud-hosted product会自动对返回给客户端的日志进行脱敏redact以防止任何 PII个人身份信息泄露。但在自托管部署中这一层保护并不会自动生效——后端默认把函数日志、错误堆栈等信息按原始形态返回给调用方。与此同时自托管构建中包含一个 beacon信标用于帮助 Convex 团队了解产品使用情况。beacon 采集的信息是匿名且极简的仅包含一个随机标识符加上当前后端的版本号。虽然数据量极小但对于有严格合规要求或数据出境顾虑的企业仍然提供了明确的退出opt-out开关。这两项能力分别由两个环境变量控制环境变量默认值作用REDACT_LOGS_TO_CLIENT未设置等效 false置为true时对返回客户端的日志与错误信息进行脱敏DISABLE_BEACON未设置beacon 启用置为true时关闭匿名遥测上报二、REDACT_LOGS_TO_CLIENT开启日志脱敏防止服务端信息泄露2.1 文档定义与官方说明根据 disabling_logging.md云托管产品会自动脱敏日志以防止 PII 泄露。如果希望在自托管部署中也脱敏日志信息只需将环境变量REDACT_LOGS_TO_CLIENT设置为trueREDACT_LOGS_TO_CLIENTtrue2.2 源码级解析配置项从环境变量到生效链路在源码中该配置项定义于 crates/local_backend/src/config.rs/// If set, logs will be redacted from clients. Set this on production /// deployments, to prevent information like stacktraces of serverside /// code from being leaked to clients. /// /// On development deployments, it can be helpful to have this information /// reach the client for debugging purposes. #[clap(long, default_value false)] pub redact_logs_to_client: bool,从源码注释可以提炼出关键决策建议生产部署production应开启脱敏防止服务端代码的堆栈信息stacktraces泄露给客户端开发部署development可以保持关闭让服务端堆栈信息直接到达客户端便于本地调试。配置项以 CLI 参数--redact-logs-to-client的形式定义default_value false表示默认关闭。启动时该配置被注入到Application构造参数中见 crates/local_backend/src/lib.rsArc::new(RedactLogsToClient::new(config.redact_logs_to_client)),脱敏能力的核心实现在 crates/application/src/log_visibility.rs。它定义了一个LogVisibilitytrait核心方法为should_redact_logs_and_error——返回true时除非调用方具备管理员admin授权否则阻止日志到达客户端/// Trait for handling logging visibility. #[async_trait] pub trait LogVisibilityRT: Runtime: Send Sync { /// If true, then block logging from reaching clients unless they have /// admin authorization. async fn should_redact_logs_and_error( self, tx: mut TransactionRT, identity: Identity, allowed_visibility: AllowedVisibility, ) - anyhow::Resultbool; } pub struct RedactLogsToClient { redact: bool, } impl RedactLogsToClient { pub fn new(redact: bool) - Self { Self { redact } } } #[async_trait] implRT: Runtime LogVisibilityRT for RedactLogsToClient { async fn should_redact_logs_and_error( self, _tx: mut TransactionRT, _identity: Identity, _allowed_visibility: AllowedVisibility, ) - anyhow::Resultbool { Ok(self.redact) } }从实现可以看到自托管版本的判定逻辑非常直接redact字段为true则一律脱敏身份与可见性参数被忽略。这也解释了为什么生产环境开启后普通客户端请求拿到的错误与日志会被统一处理。2.3 脱敏的具体表现错误与日志双通道在 crates/application/src/lib.rs 的查询执行路径中should_redact_logs_and_error的返回值block_logging被同时作用于两个通道错误通道通过RedactedJsError::from_js_error(e, block_logging, request_id)构造脱敏后的 JS 错误返回日志通道通过RedactedLogLines::from_log_lines(query_return.log_lines, block_logging)处理函数产生的日志行。即开启脱敏后客户端收到的将是不含服务端堆栈细节的错误信息与日志行从而避免敏感代码路径、文件路径、依赖版本等内部信息的间接泄露。该判定同样被应用在 mutation、action、HTTP action 等多个执行入口crates/application/src/lib.rs 中共有 7 处调用点覆盖查询、变更及各类函数调用场景。三、DISABLE_BEACON关闭自托管匿名遥测3.1 文档定义与官方说明根据 disabling_logging.md自托管构建中包含一个 beacon目的是帮助 Convex 理解产品的使用情况。采集的信息匿名且极简仅包含一个随机标识符random identifier当前使用的后端版本version of the backend。如需退出将环境变量DISABLE_BEACON设置为true即可DISABLE_BEACONtrue3.2 源码级解析配置项定义与 beacon 生命周期配置项同样定义于 crates/local_backend/src/config.rs/// self-hosted Convex will periodically communicate with a remote beacon /// server. This is to help Convex understand and improve the product. /// If set, the self-host beacon will not be sent. #[clap(long, env DISABLE_BEACON, value_parser clap::builder::BoolishValueParser::new())] pub disable_beacon: bool,注意这里的env DISABLE_BEACON属性clap 会直接读取同名环境变量因此既可以通过环境变量设置也可以通过--disable-beacon命令行参数设置。BoolishValueParser意味着接受true/false等布尔风格取值。beacon 协程的实现位于 crates/local_backend/src/beacon.rs关键行为可以从源码确认上报频率成功上报后休眠一小时runtime.wait(Duration::from_secs(3600))再发下一次心跳失败重试采用指数退避Backoff::new(INITIAL_BACKOFF, MAX_BACKOFF)初始 1 秒上限 15 分钟上报内容database_uuid数据库 UUID即文档所述随机标识符、migration_version、compiled_revision编译时的 Git SHA即版本信息、commit_timestamp、uptime、beacon_tag等上报地址https://api.convex.dev/api/self_host_beacon。beacon 的启停逻辑在 crates/local_backend/src/lib.rsif !config.disable_beacon { let beacon_future beacon::start_beacon( runtime.clone(), database.clone(), config.beacon_tag.clone(), config.beacon_fields.clone(), ); runtime.spawn_background(beacon_worker, beacon_future); }从源码结构看disable_beacon为true时根本不会 spawnbeacon_worker后台任务即彻底不发起任何上报请求而非上报后再丢弃。四、实际配置方案三种部署形态4.1 方式一Docker Compose推荐项目提供的官方编排文件 self-hosted/docker/docker-compose.yml 已预留了DISABLE_BEACON与REDACT_LOGS_TO_CLIENT两个环境变量透传项你只需在宿主机环境或.env文件中设置即可无需修改 compose 文件environment: - DISABLE_BEACON - REDACT_LOGS_TO_CLIENT在启动 compose 前设置环境变量export DISABLE_BEACONtrue export REDACT_LOGS_TO_CLIENTtrue docker compose up -d或写入.env文件与 docker-compose.yml 同目录DISABLE_BEACONtrue REDACT_LOGS_TO_CLIENTtrue4.2 方式二官方 Docker 镜像的 run_backend.sh官方镜像的入口脚本 self-hosted/docker-build/run_backend.sh 会把两个环境变量翻译为对应的 CLI 参数exec ./convex-local-backend $ \ ... ${DISABLE_BEACON:--disable-beacon} \ ${REDACT_LOGS_TO_CLIENT:--redact-logs-to-client} \ ...这里采用了 Bash 的${VAR:value}参数展开语法只要DISABLE_BEACON非空例如设置为true就会追加--disable-beacon参数REDACT_LOGS_TO_CLIENT同理。也就是说只要这两个变量被设置非空即视为开启包括REDACT_LOGS_TO_CLIENT1、DISABLE_BEACONyes等写法都会生效并不严格要求字面量true。直接运行 Docker 容器时的等价写法docker run -d \ -e INSTANCE_NAMEmy-instance \ -e INSTANCE_SECRET你的密钥 \ -e DISABLE_BEACONtrue \ -e REDACT_LOGS_TO_CLIENTtrue \ -p 3210:3210 \ -p 3211:3211 \ ghcr.io/get-convex/convex-backend:latest4.3 方式三直接运行二进制裸机部署不经过镜像包装、直接运行编译产物的场景参见 running_binary_directly.md两个配置项对应如下 CLI 参数直接追加在启动命令中./convex-local-backend \ --instance-name my-instance \ --instance-secret 你的密钥 \ --convex-origin https://api.my-app.com \ --convex-site https://my-app.com \ --disable-beacon \ --redact-logs-to-client \ convex_local_backend.sqlite3同样也可以走环境变量形式clap 的env DISABLE_BEACON声明保证了两者等价export DISABLE_BEACONtrue export REDACT_LOGS_TO_CLIENTtrue ./convex-local-backend \ --instance-name my-instance \ --instance-secret 你的密钥 \ convex_local_backend.sqlite3五、验证与常见疑问5.1 如何验证脱敏已生效开启REDACT_LOGS_TO_CLIENT后可以在应用函数中故意抛出一个包含敏感信息的错误例如带有服务端文件路径的堆栈然后通过客户端 SDK 调用该函数观察返回的错误信息是否已不含堆栈细节。从源码逻辑看脱敏后的错误经由RedactedJsError::from_js_error(e, block_logging, request_id)构造crates/application/src/lib.rs日志行则经由RedactedLogLines::from_log_lines处理同文件 L1297两者在block_logging true时都会被改写。5.2 如何验证 beacon 已关闭DISABLE_BEACONtrue生效时crates/local_backend/src/lib.rs 中的分支不会执行日志中不会出现Starting beacon coroutine...该日志由 beacon.rs 在协程启动时输出。反之beacon 正常工作时每成功上报一次会输出一条包含sent successfully的 info 日志beacon.rs且该日志会明确提示可以通过--disable-beacon或DISABLE_BEACON关闭遥测。5.3 常见疑问QREDACT_LOGS_TO_CLIENT会脱敏服务端自己保存的日志吗不会。该开关只作用于返回给客户端的日志与错误通道LogVisibilitytrait 的语义即block logging from reaching clients服务端内部的日志记录如通过RUST_LOG控制的输出不受影响。需要进一步控制服务端日志输出时可参考 disabling_logging.md 之外的自托管高级配置文档如 hosting_on_own_infra.md。Q不开 beacon 会影响产品功能吗不影响。beacon 仅是匿名使用统计随机标识 版本号与数据库读写、函数执行、认证等核心功能完全解耦关闭它不会改变任何业务行为只影响 Convex 团队收集使用数据的能力。Q两个开关默认值是什么从源码看redact_logs_to_client的 clap 定义显式标注default_value falseconfig.rsdisable_beacon未标注默认值即 bool 类型默认falsebeacon 默认启用。因此生产自托管部署建议显式开启这两个开关而不是依赖默认行为。六、小结需求环境变量CLI 参数建议防止服务端堆栈/PII 泄露给客户端REDACT_LOGS_TO_CLIENTtrue--redact-logs-to-client生产环境必须开启开发环境可关闭以便调试关闭匿名使用统计上报DISABLE_BEACONtrue--disable-beacon有合规/隐私要求的部署建议开启两个开关都在 crates/local_backend/src/config.rs 中定义分别由 crates/application/src/log_visibility.rs 的RedactLogsToClient与 crates/local_backend/src/beacon.rs 的 beacon 协程承载实现。无论采用 Docker Compose、官方镜像还是直接运行二进制的方式部署 convex-backend均可通过环境变量或等价 CLI 参数一键完成日志脱敏与遥测关闭让自托管环境在隐私合规上与云托管产品对齐。赞分享数据库后端【免费下载链接】convex-backendThe open-source reactive database for app developers项目地址https://gitcode.com/gh_mirrors/co/convex-backend点击查看免费下载相关推荐Agent 治理工具包 ACS 遥测日志规范指南事件词汇、脱敏边界与 OTel 指标桥接Agent 治理工具包 ACS 遥测日志规范指南事件词汇、脱敏边界与 OTel 指标桥接 本篇技术指南围绕 agent governance toolkit人工智能AI AgentAI 安全治理策略引擎Agent 沙箱认证鉴权Numix图标主题常见问题解答解决硬编码图标和兼容性问题的10个技巧Numix图标主题常见问题解答解决硬编码图标和兼容性问题的10个技巧 Numix图标主题是Linux桌面环境中广受欢迎的开源图标主题为GNOME、XFCE、Reverie API完全指南掌握typed syscalls和异步处理机制Reverie API完全指南掌握typed syscalls和异步处理机制 Reverie是一个为Linux设计的符合人体工程学且安全的系统调用拦截框架它开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Spectrum Hyperion 服务端渲染(SSR)开发指南:从双进程本地开发到生产级渲染架构
Spectrum Hyperion 服务端渲染(SSR)开发指南:从双进程本地开发到生产级渲染架构

后端前端即时通讯社交 【免费下载链接】spectrum Simple, powerful online communities. 项目地址: https://gitcode.com/gh_mirrors/sp/spectrum 点击查看 免费下载 Hyperion 是 Spectrum 项目中负责服务端渲染(Server-Side Rendering,SSR&… · 2026/9/24 8:38:28

RUST图解 第 1 章:入门(Getting Started)
RUST图解 第 1 章:入门(Getting Started)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 8:37:57

Flink on YARN 部署全指南:从 Session/Application 模式到高可用与资源调优
Flink on YARN 部署全指南:从 Session/Application 模式到高可用与资源调优

大数据流处理批处理数据工程 【免费下载链接】flink 项目地址: https://gitcode.com/gh_mirrors/fli/flink 点击查看 免费下载 Apache Flink 原生支持将作业集群部署到 Apache Hadoop YARN 之上,利用 YARN 的资源管理能力实现 JobManager / TaskManager… · 2026/9/24 8:37:51

Geek Uninstaller 深度使用指南:彻底卸载 Windows 顽固软件与残留清理
Geek Uninstaller 深度使用指南:彻底卸载 Windows 顽固软件与残留清理

1. 为什么我最终把卸载工具换成了 Geek Uninstaller1.1 从一次“卸载不干净”的翻车说起前阵子帮朋友收拾一台用了三年的笔记本,C 盘只剩不到 8 个 G,开机两分钟起步。我第一反应是看看装了哪些大件,结果控制面板里翻出来一堆早就该删的东西&… · 2026/9/24 19:19:51

auditpolmsg.dll丢失不用慌:SFC+DISM官方修复完整指南
auditpolmsg.dll丢失不用慌:SFC+DISM官方修复完整指南

遇到报错弹窗“找不到 auditpolmsg.dll”这种提示,先别急着去搜索“dll文件丢失免费下载”,因为我见过太多人因为这一步操作把系统搞得更糟。这个文件名对多数人来说很陌生,但它在 Windows 系统里承担的实际作用,以及它消失背后的… · 2026/9/24 19:19:51

2026年AI后台代理工程化实践:主流工具横评与配置调优指南
2026年AI后台代理工程化实践:主流工具横评与配置调优指南

1. 为什么2026年还要重新审视AI后台代理2026年开年到现在,我陆续把手上三个项目的后台开发流程做了一轮重构,核心动作只有一个:把AI后台代理从"偶尔用用的辅助工具"升级成"日常开发的基础设施"。这个转变不是跟风&#x… · 2026/9/24 19:19:51

VSCode配置C/C++环境:MinGW方案从入门到调试详解
VSCode配置C/C++环境:MinGW方案从入门到调试详解

开始动手前,先说明一下:这篇文章不是来教你怎么“点几个按钮就能跑代码”的,而是想把 Windows 下用 Visual Studio Code 配置 C/C 环境(minGW 方案)这件事从头到尾掰开揉碎讲清楚。我当年第一次上手时,光是… · 2026/9/24 19:19:51

微服务共享库版本漂移引发枚举反序列化500故障排查与根治
微服务共享库版本漂移引发枚举反序列化500故障排查与根治

上周五下午,我正在处理另一个需求,群里突然有人 我:订单详情接口开始出现 500,而且不是百分百复现,是“偶尔冒一个”。第一反应是看监控,错误率不高,但集中在某个接口上。翻日志时看到异常栈里… · 2026/9/24 19:19:51

JMeter接口加密参数实战:从sign签名到国密算法全解析
JMeter接口加密参数实战:从sign签名到国密算法全解析

这周最烦的一件事,是压测环境里所有请求突然开始报 sign 校验失败。开发那边给的说法很统一:安全要求,所有接口的请求参数必须带上加密签名。Jmeter 脚本里原来的参数直接暴露在请求里,现在必须把加密参数动态生成、动态塞进请求&… · 2026/9/24 19:19:38

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码