日志管理知识体系概览
知识导图
为什么需要日志管理
在分布式系统中,日志分散在数百台机器和容器中。统一的日志管理系统让运维团队能够:
- 集中查看:一个界面搜索所有服务日志
- 实时告警:错误日志出现时立即通知
- 链路追踪:通过 TraceID 串联一次请求的完整日志
- 故障回溯:事后分析问题的时间线和根因
日志架构
| 层级 | 职责 | 典型工具 |
|---|---|---|
| 采集层 | 文件/stdout 采集、初步过滤 | Filebeat、Fluent Bit、Vector |
| 缓冲层 | 抗峰值、解耦生产消费 | Kafka、Redis |
| 处理层 | 解析、过滤、富化 | Logstash、Fluentd |
| 存储层 | 索引、存储、检索 | Elasticsearch、Loki、ClickHouse |
| 展示层 | 可视化、告警 | Kibana、Grafana |
方案对比
| ELK Stack | PLG Stack | |
|---|---|---|
| 全称 | Elasticsearch + Logstash + Kibana | Promtail + Loki + Grafana |
| 索引方式 | 全文索引 | 仅索引标签 |
| 存储成本 | 高(全文索引膨胀) | 低(压缩日志文本) |
| 查询能力 | 强(KQL / Lucene) | 中(LogQL) |
| 运维复杂度 | 高(ES 集群管理) | 低(单二进制 / S3 后端) |
| 适合场景 | 复杂检索、安全审计 | K8s 云原生、成本敏感 |
日志规范
日志级别
| 级别 | 适用场景 |
|---|---|
| FATAL | 程序无法继续运行 |
| ERROR | 处理失败,需要关注 |
| WARN | 可能有问题,但不影响运行 |
| INFO | 关键业务流程节点 |
| DEBUG | 开发调试信息,生产不启用 |
| TRACE | 最详细的调试信息 |
结构化日志
{
"timestamp": "2024-01-15T10:30:00.123Z",
"level": "ERROR",
"service": "order-service",
"traceId": "abc123def456",
"message": "创建订单失败",
"error": "insufficient_balance",
"userId": "u_10086",
"duration_ms": 230
}
JSON 结构化日志的好处
- 机器可解析,无需 Grok 正则
- 字段标准化,方便跨服务查询
- 支持嵌套结构,携带丰富上下文
学习路径
- 基础:日志级别、结构化日志规范
- ELK:Filebeat → Logstash → Elasticsearch → Kibana
- PLG:Fluent Bit / Promtail → Loki → Grafana
- 进阶:日志告警、采样、脱敏、长期归档