返回顶部
l

logging-observability日志可观测性

Structured logging, distributed tracing, and metrics collection patterns for building observable systems. Use when implementing logging infrastructure, setting up distributed tracing with OpenTelemetry, designing metrics collection (RED/USE methods), configuring alerting and dashboards, or reviewing observability practices. Covers structured JSON logging, context propagation, trace sampling, Prometheus/Grafana stack, alert design, and PII/secret scrubbing.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.1.0
安全检测
已通过
1,739
下载量
免费
免费
1
收藏
概述
安装方式
版本历史

logging-observability

日志与可观测性

构建可观测系统的三大支柱模式:日志、指标和链路追踪。

三大支柱

支柱用途回答的问题示例
日志发生了什么这个请求为什么失败?{level:error,msg:payment declined,userid:u82}
指标
多少/多快 | 延迟在增加吗? | httprequestduration_seconds{route=/api/orders} 0.342 | | 链路追踪 | 请求流程 | 瓶颈在哪里? | Span: api-gateway → auth → order-service → db |

每个支柱在关联时最强。在每行日志中嵌入 trace_id,以便从日志条目跳转到完整的分布式链路追踪。



结构化日志

始终以结构化JSON格式输出日志——绝不使用自由文本字符串。

必填字段

字段用途是否必填
timestampISO-8601格式,含毫秒
level
严重级别(DEBUG … FATAL) | 是 | | service | 来源服务名称 | 是 | | message | 人类可读的描述 | 是 | | trace_id | 分布式链路追踪关联ID | 是 | | span_id | 当前追踪中的Span ID | 是 | | correlation_id | 业务级关联ID(订单ID) | 适用时 | | error | 结构化错误对象 | 出错时 | | context | 请求特定元数据 | 推荐 |

上下文增强

在中间件层附加上下文,使下游日志自动继承:

typescript
app.use((req, res, next) => {
const ctx = {
trace_id: req.headers[x-trace-id] || crypto.randomUUID(),
request_id: crypto.randomUUID(),
user_id: req.user?.id,
method: req.method,
path: req.path,
};
asyncLocalStorage.run(ctx, () => next());
});

库推荐

语言优势性能
PinoNode.js最快的Node日志器,低开销优秀
structlog
Python | 可组合处理器,上下文绑定 | 良好 | | zerolog | Go | 零分配JSON日志 | 优秀 | | zap | Go | 高性能,类型化字段 | 优秀 | | tracing | Rust | Spans + 事件,异步感知 | 优秀 |

选择原生输出结构化JSON的日志器。避免需要后处理的日志器。



日志级别


级别使用时机示例
FATAL应用无法继续,进程将退出数据库连接池耗尽
ERROR
操作失败,需要关注 | 支付扣款失败:CARD_DECLINED |
| WARN | 意外但可恢复 | 上游超时重试2/3 |
| INFO | 正常业务事件 | 订单ORD-1234成功下单 |
| DEBUG | 开发者调试 | 用户:82:preferences的缓存未命中 |
| TRACE | 非常细粒度(生产环境很少使用) | 进入validateAddress,携带payload |

规则: 生产环境默认 = INFO及以上。如果记录ERROR,应有人处理。每个FATAL都应触发告警。



分布式链路追踪

OpenTelemetry 设置

始终优先使用OpenTelemetry而非供应商特定SDK:

typescript
import { NodeSDK } from @opentelemetry/sdk-node;
import { OTLPTraceExporter } from @opentelemetry/exporter-trace-otlp-http;
import { getNodeAutoInstrumentations } from @opentelemetry/auto-instrumentations-node;

const sdk = new NodeSDK({
serviceName: order-service,
traceExporter: new OTLPTraceExporter({
url: http://otel-collector:4318/v1/traces,
}),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk.start();

Span 创建

typescript
const tracer = trace.getTracer(order-service);

async function processOrder(order: Order) {
return tracer.startActiveSpan(processOrder, async (span) => {
try {
span.setAttribute(order.id, order.id);
span.setAttribute(order.total_cents, order.totalCents);
await validateInventory(order);
await chargePayment(order);
span.setStatus({ code: SpanStatusCode.OK });
} catch (err) {
span.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
span.recordException(err);
throw err;
} finally {
span.end();
}
});
}

上下文传播

  • - 使用W3C Trace Context(traceparent头)——OTel默认
  • 跨HTTP、gRPC和消息队列传播
  • 对于异步工作者:将traceparent序列化到任务负载中

链路采样

策略使用场景
始终开启低流量服务、调试
概率采样(N%)
通用生产环境 | | 速率限制(N/秒) | 高吞吐量服务 | | 基于尾部的采样 | 需要所有错误链路时 |

无论采用何种策略,始终对错误链路进行100%采样。



指标收集

RED方法(请求驱动)

对每个服务端点监控以下三项:

指标衡量内容Prometheus示例
速率请求数/秒rate(httprequeststotal[5m])
错误
失败请求比例 | rate(httprequeststotal{status=~5..}[5m]) |
| 持续时间 | 响应时间 | histogramquantile(0.99, httprequestdurationseconds) |

USE方法(资源驱动)

对于基础设施组件(CPU、内存、磁盘、网络):

指标衡量内容示例
利用率资源繁忙百分比CPU使用率78%
饱和度
排队/等待的工作 | 线程池中12个请求排队 |
| 错误 | 资源上的错误事件 | 最近1分钟3个磁盘I/O错误 |


监控栈


工具类别最佳用途
Prometheus指标基于拉取的指标、告警规则
Grafana
可视化 | 指标、日志、链路追踪仪表盘 |
| Jaeger | 链路追踪 | 分布式链路可视化 |
| Loki | 日志 | 日志聚合(与Grafana配合) |
| OpenTelemetry | 收集 | 供应商中立的遥测数据收集 |

推荐: 从OTel Collector → Prometheus + Grafana + Loki + Jaeger开始。仅在运维开销证明成本合理时迁移到SaaS。



告警设计

严重级别

严重级别响应时间示例
P1立即服务完全宕机、数据丢失
P2
< 30分钟 | 错误率 > 5%、延迟p99 > 5秒 | | P3 | 工作时间 | 磁盘 > 80%、证书7天内过期 | | P4 | 尽力而为 | 非关键弃用警告 |

告警疲劳预防

  • - 对症状告警,而非原因——错误率 > 5%而非Pod重启
  • 多窗口、多燃烧率——同时捕获突发峰值和缓慢燃烧
  • 需要runbook链接——每个告警必须链接到诊断和修复方案
  • 每月审查——删除或调整从不触发或始终触发的告警
  • 分组相关告警——使用抑制规则压制子告警
  • 设置适当阈值——如果告警每天触发且被忽略,提高阈值或删除

仪表盘模式

概览仪表盘(作战室)

  • - 所有服务的总请求数/秒
  • 全局错误率(%)及趋势线
  • p50 / p95 / p99 延迟
  • 按严重级别统计的活跃告警数
  • 图表上叠加的部署标记

服务仪表盘(每个服务)

  • - 每个端点的RED指标
  • 依赖健康状态(上游/下游成功率)
  • 资源利用率(CPU、内存、连接数)
  • 按计数和最后出现时间排序的顶部错误表

可观测性检查清单

每个服务必须具有:

  • - [ ] 结构化JSON日志

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 logging-observability-1776420066 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 logging-observability-1776420066 技能

通过命令行安装

skillhub install logging-observability-1776420066

下载

⬇ 下载 logging-observability v0.1.0(免费)

文件大小: 5.95 KB | 发布时间: 2026-4-17 19:15

v0.1.0 最新 2026-4-17 19:15
Initial release of logging-observability, providing comprehensive patterns for building observable systems.

- Covers structured JSON logging, distributed tracing with OpenTelemetry, and metrics collection (RED/USE methods).
- Provides guidelines for log levels, context enrichment, and sensitive data scrubbing.
- Includes recommended logging libraries and monitoring stack (Prometheus, Grafana, Loki, Jaeger).
- Offers alerting best practices and dashboard design patterns for production systems.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部