Heroku 日志实战:Logplex 体系、heroku logs 与日志外送

Heroku 日志中文实战:Logplex 日志总线工作原理、heroku logs 命令(--tail/--source/--dyno)、日志保留限制、Log Drains 外送机制、结构化日志最佳实践,以及如何用观测云接收并告警 Heroku 应用日志。

最佳实践
Heroku 日志实战:Logplex 体系、heroku logs 与日志外送技术指南封面

Heroku 的日志体系围绕 Logplex 构建:一个面向流的日志总线,汇总应用 dyno、路由器、平台的全部日志。理解 Logplex 的"只流不存"特性,是管好 Heroku 日志的关键。本文讲解日志查看、外送与结构化最佳实践,并给出观测云平台的落地方案。

核心要点速览

  • Logplex 是日志总线而非存储:默认只保留最近约 1500 行/一周——长期存储必须外送(Log Drain)。
  • 日志来源分三类app(应用输出)、router(HTTP 请求路由)、heroku(平台事件:部署/重启/崩溃)。
  • heroku logs --tail 是排障起点--source--dyno--num 精细过滤。
  • 生产落地:Log Drain 推送到观测云 HTTP 日志接收端,检索告警一站式。

1. Logplex 工作原理

Heroku 把每个 dyno 的 stdout/stderr、路由器请求日志、平台事件汇聚到 Logplex 流中:

2026-08-25T14:55:22.123+00:00 heroku[router]: at=info method=GET path="/api/orders" host=example.com request_id=7f3a status=200 ...
2026-08-25T14:55:22.456+00:00 app[web.1]: INFO 订单创建成功 {"order_id":1024}
2026-08-25T14:55:30.000+00:00 heroku[web.1]: Restarting

每条带时间戳、来源(source)、进程(dyno)三元组。Logplex 默认只缓存最近约 1500 行——它是传输层,不是存储层。要长期保留与检索,必须配置 Log Drain 外送。

2. heroku logs 命令

heroku logs --tail                 # 实时跟踪
heroku logs --num 500              # 拉取最近 500 行
heroku logs --source router        # 只看路由日志(HTTP 请求)
heroku logs --source app           # 只看应用输出
heroku logs --dyno web.1           # 只看某个 dyno
heroku logs --source app --dyno worker.1 --tail

排障组合拳:--source router 看请求面(状态码、耗时),--source app 看业务面,平台事件(崩溃 H10、内存超限 R14)看 heroku source。

3. 五条 Heroku 日志最佳实践

  1. 写 stdout/stderr:Heroku 只收集标准输出流——写文件等于丢日志;
  2. 结构化输出:JSON 或 logfmt,让平台自动解析字段;
  3. 关键事件带上下文:用户操作日志带 user_id、request_id,而不是一行裸消息;
  4. 正确分级:INFO 记业务事件、ERROR 记失败——router 日志里的 H/R 系列错误码(H12 超时、R14 内存超限)要单独关注;
  5. 敏感数据不入日志:密码、卡号、Token 立法禁止。

4. Log Drains:日志外送

# 添加 HTTP(S) drain:日志实时推送到指定端点
heroku drains:add https://<接收端点> -a <应用名>
heroku drains                     # 查看已配置 drain

Drain 支持 HTTP(S) 与 syslog 两种协议。Heroku 的日志以 syslog 帧格式(或 HTTPS 批次)发出,接收端解析后入库。

观测云落地:Heroku 日志接入

  1. 接收:观测云支持标准日志推送接口,将 Log Drain 端点指向观测云 HTTP 日志接收地址(DataKit 开启 HTTP 日志输入插件亦可作为中继),source: herokuservice 按应用区分。
  2. 解析:Pipeline 解析 router 日志的键值对(method/path/status/request_id)与应用 JSON 日志,映射标准 status/time
  3. 检索告警:日志查看器按 service/status/dyno 过滤;监控器对 H12/R14 等平台错误码、应用 error 日志设阈值,告警策略路由钉钉/企业微信/飞书。
  4. 关联:request_id 贯穿 router 与应用日志,排障时按 request_id 过滤出完整请求链路。
  5. 成本控制:router 访问日志量大走低频索引,error 日志标准索引长保留,历史数据归档对象存储。

常见问题(FAQ)

Heroku 日志默认保留多久?

Logplex 只缓存最近约 1500 行(大致相当于一周的滚动窗口,先到先出)。任何"昨天出了什么问题"级别的事后排查都必须依赖 Log Drain 外送到日志平台。

router 日志里的 H12、R14 是什么?

Heroku 平台错误码:H12 = 请求超时(30 秒未响应),R14 = 内存超限(dyno 开始使用 swap)。H 系列是路由/请求问题,R 系列是运行时资源问题——都值得在观测云里配监控器告警。

多个 Heroku 应用的日志能统一吗?

每个应用各自配置 Drain 指向观测云,service 字段按应用区分;平台侧一个工作空间统一检索、告警、出图。

Log Drain 推不出去会怎样?

Heroku 会丢弃无法送达的日志(Logplex 无持久缓冲)。选接收端时考虑可用性;DataKit 中继可用本地磁盘缓冲消化短时故障。

系列阅读


获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台