← 返回首页

可观测性三支柱 (Observability)

Logs + Metrics + Traces — 快速定位生产问题的业界标准方案

核心概念

📝
日志 Logs
Structured Logging
"发生了什么?"
离散的事件记录。记录错误、警告、关键操作。结构化 JSON 格式便于搜索和分析。
📊
指标 Metrics
Time-Series Metrics
"系统状态如何?"
数值型时间序列数据。CPU、内存、请求延迟、错误率、队列长度。用于告警和趋势分析。
🔗
链路追踪 Traces
Distributed Tracing
"请求经过了哪里?"
一个请求从入口到响应的完整调用链。每个环节的耗时、参数、错误一目了然。

一个请求的可观测性视角

用户浏览器
前端错误上报
API Gateway
生成 traceId
Express 路由
记录 log + metric
Service 层
业务日志
PostgreSQL
慢查询追踪
TraceId 是串联三支柱的关键

每个请求入口生成唯一 traceId,贯穿整个调用链。日志带上它,指标带上它,链路追踪以它为主键。客户报错时,只需一个 traceId 就能还原完整现场。

工具全景图

日志 (Logs)

工具类型特点适用场景
ELK Stack
Elasticsearch + Logstash + Kibana
开源 功能最全、生态最大、全文搜索强大 大规模日志分析,需要自建运维团队
Grafana Loki 开源 轻量级,类 Prometheus 的标签索引,不索引全文 小团队首选,与 Grafana 原生集成
Datadog Logs SaaS 开箱即用,与 Metrics/Traces 深度关联 预算充足、追求全家桶体验
Winston (当前使用) 开源 Node.js 日志库,本地文件输出 单机开发、小规模部署

指标 (Metrics)

工具类型特点适用场景
Prometheus + Grafana 开源 业界标准,Pull 模型,PromQL 查询语言强大 通用首选,社区资源丰富
Datadog Metrics SaaS Push 模型,自动发现基础设施,AI 告警 运维人力不足,愿意付费
AWS CloudWatch 云厂商 AWS 原生,与 ECS/RDS 自动集成 全 AWS 技术栈,基础监控够用
prom-client 开源 Node.js Prometheus 客户端库 Express 应用暴露 /metrics 端点

链路追踪 (Traces)

工具类型特点适用场景
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 锁定,有运维能力

推荐实施路径(针对 Celoria)

1
TraceId + 结构化日志
投入: 低  |  回报: 极高
2
Sentry 错误监控
投入: 低  |  回报: 高
3
Prometheus + Grafana 指标监控
投入: 中  |  回报: 中高
4
OpenTelemetry 全链路追踪
投入: 高  |  回报: 高(规模大时)

客户问题排查流程

客户报错
"XX 功能不好使"
获取 traceId
从错误页面/Sentry
搜索日志
grep traceId
定位根因
错误堆栈+上下文
修复部署
关键信息采集清单

常见误区

1. 一开始就上全家桶

ELK + Prometheus + Jaeger 全上,维护成本远超收益。先把 traceId 和 Sentry 做好,解决 80% 的问题。

2. 日志只写 console.log

没有结构化、没有级别、没有上下文。生产环境等于瞎子。必须 JSON 格式 + traceId + tenantId

3. 只看错误日志不看指标

很多问题不是报错,而是变慢。P99 延迟、连接池使用率能提前发现问题。

4. 日志太多 or 太少

日志太多淹没有效信息、成本爆炸;太少关键时刻没数据。按级别控制:生产用 info,调试用 debug。

Node.js 生态速查

用途推荐包npm install
结构化日志Winston / Pinowinston (已使用)
请求 IDuuid / nanoiduuid
Prometheus 指标prom-clientprom-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 开发笔记