日志账单会随着你发送的内容增长,而每一步都写一行的日志记录器会反复发送相同的请求上下文。每一行都带有自己的级别、时间戳、主机和请求绑定信息。四行,四份副本。
evlog 改为每个请求只发出一个事件,因此上下文只写入一次。本页面会衡量其中的差异,并让你根据自己的流量为其估算价格。
用你的数字试算
Requests / month
Log lines per request, today 4
Sampling, kept on both sides 100%
4 lines / request
- Events
40M40M - Data
7.4 GB7.4 GB
evlog, 1 event
- Events
10M10M - Data
3.2 GB3.2 GB
Byte counts measured by serializing the checkout request above through pino 10 and evlog: 4 lines totalling 736 B against 1 event of 322 B, so 184 B per line and 322 B per event. Your fields differ, so treat the shape as the method, not the answer.
List rates read on 14 August 2026 (Datadog: ingest + indexing, 15-day retention). Vendors change pricing without notice, which is why every rate here is editable. Free tiers, committed-use discounts and retention add-ons are not modelled. Sampling is applied to both columns, because any logger can drop events: it lowers each bill and leaves the ratio between them alone.
字节数从何而来
两种形式都是 性能 中记录的结账请求,经过真实库序列化,而不是估算得出。
const log = createLogger({ method: 'POST', path: '/api/checkout', requestId: 'req_abc' })
log.set({ user: { id: 'usr_123', plan: 'pro' } })
log.set({ cart: { items: 3, total: 9999 } })
log.set({ payment: { method: 'card', last4: '4242' } })
log.emit({ status: 200 })
const child = pinoLogger.child({ method: 'POST', path: '/api/checkout', requestId: 'req_abc' })
child.info({ user: { id: 'usr_123', plan: 'pro' } }, 'user context')
child.info({ cart: { items: 3, total: 9999 } }, 'cart context')
child.info({ payment: { method: 'card', last4: '4242' } }, 'payment context')
child.info({ status: 200 }, 'request complete')
| 事件 | 字节 | |
|---|---|---|
| pino,4 行 | 4 | 736 |
| evlog,1 个事件 | 1 | 322 |
| 差异 | 减少 75% | 减少 56% |
这两个数字不同,是因为合并移除了重复的封装,而不是负载。level、time、pid、hostname、method、path 和 requestId 被 pino 写入四次,而被 evlog 写入一次,四个 msg 字符串则完全消失。无论哪种方式,你实际设置的字段都只会写入一次。
user 对象的处理程序节省得更多。方法可以迁移,数字不会。哪个数字会影响你的账单
提供商会采用两种方式之一来计量日志,而这决定了你实际获得哪种节省。
| 计量方式 | 你获得的节省 | 提供商 |
|---|---|---|
| 摄入的千兆字节 | 56% 的字节数 | Grafana Cloud、Sentry、PostHog、Better Stack、Axiom |
| 千兆字节和已索引事件 | 75% 的事件数,体现在通常占主导地位的明细项上 | Datadog |
按千兆字节计费是常见情况,因此大多数团队会获得字节数节省。Datadog 是值得检查的例外:它按千兆字节收取摄入费用,按百万事件收取索引费用,而在生产环境的流量规模下,索引明细项在两者中更大,因此真正产生影响的是事件数。
费率读取于 2026 年 8 月 14 日,并且是目录价格,不包含免费额度、承诺使用折扣和保留期附加费用。正因如此,它们会作为上方计算器的输入。
采样会同时改变两列
计算器会对两种形式同时应用采样,这是对其建模的唯一公平方式。丢弃事件并不是 evlog 能做而其他日志记录器不能做的事情:你可以在任何日志记录器中按级别过滤,也可以在传输层进行采样。只应用于一侧会让 evlog 获得并非由 evlog 带来的节省。将滑块向下拉,两种账单都会同时下降,而它们之间的差距保持不变。
但它仍然是更大的杠杆。合并的效果有上限,因为每个请求发送的事件不可能少于一个。采样 则没有这个限制:前置采样会在发出时按级别丢弃事件,而尾部采样会强制保留你原本想要的事件,因此错误和慢请求能够通过一条丢弃其余请求的规则保留下来。流量不再决定数量,信号才是决定因素,而这正是唯一能在你不断增长时持续有效的方式。
evlog 改变的是采样所作用的单位。丢弃一行会丢失请求的一部分;丢弃一个事件会丢失整个请求,而保留一个事件则会保留其全部内容。
在编辑器中询问
相同的计算也是这个网站服务器上的一个 MCP 工具,因此连接到 https://evlog.dev/mcp 的助手可以直接回答:
estimate-log-cost({ requestsPerMonth: 10000000, linesPerRequest: 4, provider: "datadog" })
它会返回两种形式、节省的数量以及所使用的依据:测得的字节数、应用的费率和读取这些费率的日期。传入 perGb 和 perMillionIndexed,即可为列表中没有的提供商估价,或修正价格已经变动的提供商。