用途
该技能用于在服务中建立监控与可观测性能力,覆盖 OpenTelemetry 链路追踪与指标、Prometheus 指标采集、Grafana 仪表盘以及结构化日志。资料以 Node.js/TypeScript 示例为主,展示如何把追踪、指标、日志和告警串联起来。
主要能力
OpenTelemetry 初始化
资料给出使用 @opentelemetry/sdk-node 的初始化示例:配置 serviceName、OTLPTraceExporter 与 OTLPMetricExporter(指向 otel-collector 的 4318 端口),通过 PeriodicExportingMetricReader 设置导出间隔(示例为 15000 毫秒),并启用 HttpInstrumentation 与 PgInstrumentation 自动埋点。示例还包含在 SIGTERM 时调用 sdk.shutdown()。
自定义 Span 与指标
通过 @opentelemetry/api 获取 tracer 与 meter,创建计数器(orders.created)和直方图(orders.processing_duration_ms)。示例在 createOrder 中使用 startActiveSpan 包裹业务逻辑,设置 span 属性(如 order.customer_id、order.item_count),记录成功/失败计数与处理耗时,并在异常时设置 SpanStatusCode.ERROR。
Prometheus 指标
资料提供 prometheus.yml 抓取配置示例,包含 api-servers 与 node-exporter 两个 job,scrape_interval 为 15s,metrics_path 为 /metrics。同时给出 prom-client 用法:创建 Registry、调用 collectDefaultMetrics、定义 http_request_duration_seconds 直方图(含 method、route、status 标签与分桶),通过中间件记录请求耗时,并暴露 /metrics 端点。
结构化日志
使用 pino 配置日志级别(默认 info),通过 redact 脱敏 req.headers.authorization、password、token 等字段。示例中间件在响应结束时记录 method、url、status、duration_ms 与 trace_id,实现日志与追踪的关联。
告警规则
资料给出 Prometheus 告警规则示例:HighErrorRate 基于 5xx 请求比例超过 5% 持续 5 分钟触发(severity: critical);HighLatency 基于 P99 直方图分位数超过 2 持续 10 分钟触发(severity: warning)。
使用方式
资料以代码片段形式呈现,需按项目实际情况集成:先初始化 OpenTelemetry SDK 并启用自动埋点,再为关键业务操作添加自定义 Span 与指标,配置 Prometheus 抓取与告警规则,最后接入结构化日志并统一 trace ID。
适用场景
适用于需要端到端可观测性的后端服务,尤其是使用 Node.js/TypeScript、PostgreSQL,并采用 OpenTelemetry + Prometheus + Grafana 技术栈的团队。
限制与注意事项
资料列出反模式:未脱敏记录敏感数据、用字符串插值代替结构化字段、指标标签基数无界(如用用户 ID 作标签)、日志与追踪缺少共享 trace ID、只对症状(如高 CPU)告警而不理解根因、在定义 SLO 之前就构建仪表盘。检查清单要求:初始化 OpenTelemetry SDK 并覆盖 HTTP、数据库与消息的自动埋点;为业务关键操作添加自定义 Span;指标标签基数有界;结构化 JSON 日志并脱敏;跨服务传播 trace 上下文;基于 SLO 的告警规则;每个服务的仪表盘展示 RED 指标(Rate、Errors、Duration);配置日志保留与轮转策略。具体部署环境、Grafana 仪表盘配置细节及收费信息暂未提供。