日志管理
logs-management、集中式日志。
30 分钟
日志管理方法论
日志是可观测性三支柱中 最细粒度 的信号:记录单次请求的上下文、堆栈、业务字段。运维侧挑战不在「有没有日志」,而在 采集、解析、索引、检索、留存、成本 全链路治理。本课讲通用方法论;结构化日志见 obs-logs,具体栈见 dob-elastic、dob-loki,指标互补见 prometheus-essentials,DevOps 见 /roadmaps/devops。
学习目标
- 区分 非结构化、半结构化(JSON)、审计日志 的处理策略
- 设计 traceId、requestId、service、level 等标准字段
- 制定 热温冷留存 与采样、脱敏策略
采集与管道
App stdout / file
→ Agent(Filebeat、Fluent Bit、Vector)
→ 解析(JSON、grok)
→ 缓冲队列(Kafka 可选)
→ 存储(ES / Loki / S3)
→ 查询 UI(Kibana / Grafana)
十二要素(借鉴):timestamp、level、message、service.name、trace_id、span_id、host、env。Spring Boot 用 Logback JSON encoder + MDC,与 sc-observability 对齐。
成本与治理
| 策略 | 说明 |
|---|---|
| 结构化 | 避免纯文本 grep,字段可过滤 |
| 级别采样 | DEBUG 仅 dev;生产 INFO+,ERROR 全留 |
| PII 脱敏 | 手机号、token 在 ingest 管道 redact |
| 留存分级 | 7 天热、30 天温、1 年冷归档 S3 |
日志量常 远超 metrics;无治理的 ELK 集群是预算黑洞。告警应优先走 metrics(prom-alerts),日志用于 钻取细节。
{
"timestamp": "2026-09-19T14:00:00.123Z",
"level": "ERROR",
"service": "coderoadmap-backend",
"trace_id": "abc123",
"message": "Failed to load track",
"exception": "java.sql.SQLException",
"user_id": "u_***"
}
练习
- 为 CodeRoadMap backend 定义日志字段规范(至少 8 个字段)
- 画「指标报警 → 日志 traceId 检索 → Jaeger 链路」排障三步流