Logs + Metrics + Traces — 快速定位生产问题的业界标准方案
每个请求入口生成唯一 traceId,贯穿整个调用链。日志带上它,指标带上它,链路追踪以它为主键。客户报错时,只需一个 traceId 就能还原完整现场。
| 工具 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| ELK Stack Elasticsearch + Logstash + Kibana |
开源 | 功能最全、生态最大、全文搜索强大 | 大规模日志分析,需要自建运维团队 |
| Grafana Loki | 开源 | 轻量级,类 Prometheus 的标签索引,不索引全文 | 小团队首选,与 Grafana 原生集成 |
| Datadog Logs | SaaS | 开箱即用,与 Metrics/Traces 深度关联 | 预算充足、追求全家桶体验 |
| Winston (当前使用) | 开源 | Node.js 日志库,本地文件输出 | 单机开发、小规模部署 |
| 工具 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| Prometheus + Grafana | 开源 | 业界标准,Pull 模型,PromQL 查询语言强大 | 通用首选,社区资源丰富 |
| Datadog Metrics | SaaS | Push 模型,自动发现基础设施,AI 告警 | 运维人力不足,愿意付费 |
| AWS CloudWatch | 云厂商 | AWS 原生,与 ECS/RDS 自动集成 | 全 AWS 技术栈,基础监控够用 |
| prom-client | 开源 | Node.js Prometheus 客户端库 | Express 应用暴露 /metrics 端点 |
| 工具 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| OpenTelemetry (OTel) | 开源标准 | CNCF 项目,统一 Logs/Metrics/Traces 采集的厂商中立标准 | 新项目首选,避免供应商锁定 |
| Jaeger | 开源 | Uber 开源,CNCF 毕业项目,可视化好 | 微服务架构,自建追踪系统 |
| Zipkin | 开源 | Twitter 开源,轻量简单 | 轻量需求,快速上手 |
| Datadog APM | SaaS | 自动注入,与日志和指标自动关联 | 已用 Datadog 生态 |
| 工具 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| Sentry | 免费可用 | 前后端错误自动捕获,堆栈追踪,用户上下文,性能监控,Issue 聚合 | 小团队最佳起步方案,免费额度够用 |
| Datadog | SaaS | 全家桶:Logs + Metrics + Traces + APM + RUM + 告警 | 中大型团队,追求一站式 |
| New Relic | 免费 100GB/月 | 全栈可观测,免费额度慷慨 | 预算有限但需要全面监控 |
| Grafana Stack Grafana + Loki + Prometheus + Tempo |
开源 | 全开源替代方案,三支柱全覆盖 | 不想被 SaaS 锁定,有运维能力 |
X-Request-Id(UUID),贯穿所有日志traceId + tenantIdtraceId,客户报错直接用它查日志ErrorBoundary 拿到 traceId 显示给用户@sentry/nextjs — 自动捕获 React 错误、网络异常、性能@sentry/node — 自动捕获未处理异常,Express 集成prom-client 暴露 /metrics,采集请求延迟、错误率、DB 连接池@opentelemetry/sdk-node 自动注入 Express、pg、HTTP 调用ELK + Prometheus + Jaeger 全上,维护成本远超收益。先把 traceId 和 Sentry 做好,解决 80% 的问题。
没有结构化、没有级别、没有上下文。生产环境等于瞎子。必须 JSON 格式 + traceId + tenantId。
很多问题不是报错,而是变慢。P99 延迟、连接池使用率能提前发现问题。
日志太多淹没有效信息、成本爆炸;太少关键时刻没数据。按级别控制:生产用 info,调试用 debug。
| 用途 | 推荐包 | npm install |
|---|---|---|
| 结构化日志 | Winston / Pino | winston (已使用) |
| 请求 ID | uuid / nanoid | uuid |
| Prometheus 指标 | prom-client | prom-client |
| Sentry 后端 | @sentry/node | @sentry/node |
| Sentry 前端 | @sentry/nextjs | @sentry/nextjs |
| OpenTelemetry | @opentelemetry/sdk-node | @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node |
| 健康检查 | express-healthcheck | @godaddy/terminus |
更新于 2026-02-05 | Celoria 开发笔记