打造属于你的 PDS:自定义与指标
摘要
AT Protocol 的参考 PDS 更新增加了账户管理和认证屏幕的可自定义品牌,以及用于追踪、指标和日志的 OpenTelemetry 支持。
<p><a href="https://lobste.rs/s/tykvbi/make_pds_your_own_customization_metrics">评论</a></p>
查看缓存全文
缓存时间: 2026/08/10 06:55
# 让 PDS 成为你的专属:定制化与指标 - AT Protocol
来源: https://atproto.com/blog/pds-customization-and-metrics
当我们在六月发布账户管理页面(https://atproto.com/blog/pds-account-management)时,我们在那篇文章的结尾许下承诺:今年夏天会带来更多参考 PDS 更新,包括可观测性工具。今天的发布兑现了承诺,而且还不止于此。
本次发布包含**四项**内容:账户管理界面的定制化、OpenTelemetry 支持、更大的默认 blob 大小,以及针对连接应用列表中的一个 bug 修复。
账户管理页面和 OAuth 登录界面是用户实际会看到的 PDS 部分。你此前已经可以在上面放置自己的名称、Logo、颜色和链接,但这些只是一次性开关,且文档不一致。
本次发布对此进行了整理:一套更小、更清晰的变量,全部都有恰当文档,外加一个全新功能:认证屏幕的背景图片。
如果你在标准 Docker 部署中运行参考 PDS,你可以从 `pds.env` 开始试验,然后重启。先从名称和 Logo 开始:
`PDS_SERVICE_NAME` 默认是你的主机名后跟“PDS”,因此设置它是你能做的对品牌影响最大的单一改动。这两者也会流入你的 PDS 发送的事务邮件,因此重置密码邮件也会带有你的品牌。
颜色的设置方式相同。你最先会想用的是主色调,它驱动按钮、链接和强调色:
还有四个用于语义状态的颜色变量:`PDS_ERROR_COLOR`、`PDS_WARNING_COLOR`、`PDS_INFO_COLOR` 和 `PDS_SUCCESS_COLOR`。
所有这些都是可选的。绘制在主色调上方的文本颜色会为你自动推导,根据对比度选择黑色或白色中更易读的那个,因此无障碍的默认选择是自动的,无需你额外配置。
最后,你可以在页脚添加自己的链接:
下面是在配置了品牌化的部署上的登录步骤——这里用的是 Bluesky 自己的品牌,正是通过上述变量应用的:
未配置任何这些项的 PDS *不会*看起来像 Bluesky。默认是中性的,上面的品牌化是设置这些变量的结果,而不是你继承来的。
若要为认证屏幕设置背景图片(!),它位于登录卡片后方:
处于深色模式的用户会隐式获得深色布局,无需切换。图片以 `cover` 方式绘制,并居中在你的中性基础色上,而卡片保留其自身的不透明表面,因此无论图片多么杂乱,你的文字内容都保持清晰易读。
本次发布的另一半面向运营者而非用户。PDS 现在支持 OpenTelemetry(https://opentelemetry.io/),用于链路追踪、指标和日志。
遥测默认关闭,同样地,你可以通过在参考 PDS 上设置环境变量来选择启用:
一旦开启,你将获得针对 PDS 指标的自动插桩:入站和出站 HTTP、SQLite 层、S3 兼容的 blob 存储,以及 Node 运行时指标,如事件循环延迟和垃圾回收。
XRPC 请求会按方法归一化,因此 span 会以 `GET /xrpc/com.atproto.repo.getRecord` 的形式出现,而不是被扁平化为单一的 `/` 路由,并且 NSID 会作为属性附加。
除自动插桩外,PDS 还会为运营者关心的关键事件发射计数器:
- `account.created` — 新账户,按注册是通过 OAuth 还是 XRPC 端点进行维度划分
- `session.created` — 登录,按来源维度划分
- `oauth.authorization` — 向应用颁发的 OAuth 授权
我们还将发布一个仪表盘来配合这一切。参考 PDS 仓库中的 `monitoring/`(https://github.com/bluesky-social/pds/tree/main/monitoring)目录拥有一套自包含的 Prometheus、Grafana 和 node_exporter 栈,外加一个现成的 **PDS Overview** 仪表盘,涵盖主机健康状态和 PDS 活动:
该栈中没有 OpenTelemetry Collector。Prometheus v3 可以直接接收 OTLP,因此 PDS 将指标直接推送给它。我们的示例仪表盘栈可以在不到 1GB 内存的情况下与 PDS 一同运行。
默认情况下,一切绑定到 localhost,因此你可以通过 SSH 隧道访问 Grafana。如果你已经在运行 Prometheus 和 Grafana,就完全不需要 compose 文件;你只需将 PDS 指向你自己的 OTLP 端点,并导入仪表盘 JSON。无论哪种方式,`monitoring/README.md`(https://github.com/bluesky-social/pds/blob/main/monitoring/README.md)都有逐步说明,包括仪表盘面板依赖哪些 `OTEL_*` 变量。
我们决定将默认最大 blob 大小提升到 300M。这主要是为了允许 Bluesky 上发布更长的视频,我上周已经发文说过此事:
反馈是积极的,因此我们继续并做了这个更改。
如果你已经在运行 PDS:这是安装程序写入 `pds.env` 的更改,因此新安装会采用,而已有安装则不会。要提升已在运行的 PDS 的限制,请自行设置并重启:
我们还使 PDS 能够通过 `describeServer` 通告其最大 blob 大小,这样客户端可以在需要时拆分或拒绝上传:
本次发布还修复了账户管理(https://atproto.com/guides/account-management)页面中连接应用列表的一个 bug。
此前,该列表只能可靠地显示最近刷新过的会话。如果你授权了一个应用,然后一段时间没有打开它,它可能会从列表中消失。
现在,无论会话上次刷新是什么时候,列表都是准确的。如果你一直在用账户管理页面审计已连接的应用,你可能会看到之前被隐藏的条目。
总而言之,这是参考 PDS 的一次重大发布,也完成了我们夏季 PDS 待办清单上的所有剩余项。如果你在标准 Docker 部署中运行参考 PDS,它会自动更新到最新版本。快来试试,告诉我们你的想法吧!
相似文章
从 uv 迁移到 PDM
开发者分享将 Python 项目从 uv 迁移到 PDM 的经验,强调 PDM 纯 Python 代码库、刚发布的 2.26.8 版带来的“相对时间依赖冷却”功能,以及更强大的项目管理特性。
@DSPyOSS: 感谢 @dbreunig,我们有了新的首页和新文档,旨在简化上手流程。我们正在缓慢接近一个重大的……
DSPy 有了新的首页和文档以简化上手流程,并即将发布重大的 DSPy 4.0 版本,包含激进的新想法。
TD-DPO: 差异感知偏好优化在临床自闭症干预对话中缓解谄媚行为
本文提出TD-DPO,一种令牌级差异感知偏好优化方法,用于缓解临床自闭症干预对话中大语言模型的谄媚行为,在减少谄媚行为和保持干预能力之间实现了更好的权衡。
跨会话个性化工具调用的潜在偏好建模
引入 MPT 基准和 PRefine 方法,用于跨会话个性化工具调用,以极低 token 开销捕捉用户选择背后的推理。
使用DSPy评估和改进Datasette Agent的SQL系统提示
作者使用DSPy框架评估和改进了Datasette Agent的SQL查询功能的系统提示,发现了诸如列名猜测和错误重试循环等问题。