@12-apps/observability-backend
服务器侧错误报告 Sentry, 因为只有一个环境, 没有人可以附加 一个调试器.
它有一个浏览器对应, @12-apps/observability-frontend它们是两个
软件包而不是一个,因为它们完全没有代码,只有环境
变量——此侧是 @sentry/node 加号 winston-transport另一个是
@sentry/react 加上反应,一个包就可以装上温斯顿运输
每个SPA的依赖树和每个服务器的回放。 他们是独立的
(或运行 没有另一个) 但故意分享 SENTRY_ENVIRONMENT 财务报告和审定财务报表
SENTRY_RELEASE,所以浏览器事件 及其背后的500 降落在同一
同一建筑下的环境.
为什么它存在
生产失败曾留下一个痕迹: 容器,随它而死亡,并且只能在SSH上达到。 所以,唯一的办法 学习 为什么 有些东西破解了 是为了了解源头和猜想 4次连续错误的诊断就是代价。 这条线本来可以 在第一次尝试中结束它 一直存在; 没有人能读到它.
使用量
import { sentryTransport, flushReporter, scrub } from "@12-apps/observability-backend";
const reporter = sentryTransport();
const logger = winston.createLogger({
transports: [consoleTransport, ...(reporter ? [reporter] : [])],
});
它挂出LOGGER,而不是每个呼叫网站. 共享日志已经
漏斗,每个功能的 log.error 经历了一个温斯顿的例子,所以
在此附加意味着新模块在登录时被覆盖,没有任何内容
记住 备选案文,a captureException 除了每个 throw,这是一条规则
第一次有人忘记它就衰败了.
注意这个陷阱意味着: console.error 未联系到记者.
温斯顿是漏斗;任何写过它的东西 到达一个容器的积分和
没有别的地方.
| 导出 | 它会做什么 |
|---|---|
sentryTransport() | 页:1 winston-transport 安装,或 null 当报告关闭时 |
sentryEnabled() | 是否为此进程配置了 DSN |
flushReporter(timeoutMs?) | 等待已排队的事件; 在故意退出前拨打 |
scrub(value) | 将上下文对象折叠成信件时, 任意深度按密钥编辑 PII |
flushReporter() 事情比看起来要重要 SDK批发
同步,所以 log.error(…) 接下来是 process.exit(1) 流泪过程
与事件仍在记忆中
大部分,因为一个死在靴子上的过程 留下了别的东西.
除非设定了 DSN , 否则它将被关闭
没有 SENTRY_DSN,没有运输,没有网络。 Dev CI和每一次测试都保持安静
和离线。 授权是一个部署决定,从来不是一个代码——这也是
是什么让测试套房的故意故障 无法填补问题跟踪器.
| 变量 | 说明 |
|---|---|
SENTRY_DSN | 唯一需要的一个。 只写摄入. |
SENTRY_ENVIRONMENT | 倒计时 NODE_ENV,则 production |
SENTRY_RELEASE | 用于构建错误 |
SENTRY_TRACES_SAMPLE_RATE | 默认为 0 ——追踪每段计费,回答"多慢",而这个答案是"抛出的东西" |
临 二
scrub() 按任何深度而不是图案匹配值编辑: a
巴西的CPF是11位数字,许多身份证也值得保留。 药品和
量是故意活下来的——一种能吃到量的洗涤剂会留下每件事
不可诊断.
这不是防御性的装饰。 写给它的泄漏是供应商的错误
保留上游反应机构,在被拒绝付款时,该反应机构携带
付款人的名字,电子邮件和税务id. sendDefaultPii 无论DSN如何 都被扣留
所以请求尸体 饼干和IP从不随身携带.
运输也送来 消息 作为字符串而不是原始元
对象: Winston 格式化运行 util.inspect(…, { depth: 5 }) 超过额外
这恰恰是供应商的有效载荷如何到达
第三方.
为什么船会编成
不同于此 repo 中的大多数软件包, 此软件包发布 dist (双重CJS+ESM与
.d.ts)而不是TypeScript源. 有两个原因,两个都是负载的:
- 节点拒绝剥去下面的类型
node_modules(单位:千美元)ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING) (中文(简体) ). 一个服务器导入此选项 软件包从注册处得到一个硬故障.ts它确实 没有 在工作空间中失败,其中 pnpm 链接到软件包和节点解析 a 外部真实路径node_modules- 所以虫子会首先出现在 消费者,出版后. - 常见的JS消费者存在.
@12-apps/shared-helperscJS 有经典moduleResolution,这忽略了exports完整地图并读取main编号 :types。 。 。 .
测试
pnpm --filter @12-apps/observability-backend test
没有到达网络:套房声称有两个安全属性—— 报告可以关闭,它转发的内容可以被清除.