日志体系:产生、采集、存储与检索¶
日志记录离散事件和错误上下文。完整体系不仅是“应用写文件”,还包括格式、采集、缓冲、传输、解析、索引/标签、保留、权限和脱敏。
Linux journal / 文件 / 容器 stdout / 网络设备 syslog
→ rsyslog / Fluent Bit / Vector / Filebeat / OTel Collector
→ 缓冲、解析、补充环境和实例信息
→ Loki 或 Elasticsearch/OpenSearch
→ Grafana / 查询 / 告警 / 审计
结构化日志¶
推荐 JSON 或稳定 key-value 格式:
{
"timestamp": "2026-08-23T10:15:30.123+08:00",
"level": "ERROR",
"service": "order-service",
"version": "1.4.0",
"trace_id": "...",
"message": "inventory request failed",
"error_type": "TimeoutException"
}
至少统一时间含时区、级别、服务、环境、版本、实例、线程/logger、Trace ID 和错误堆栈。异常要保留完整 Caused by,不要只写“请求失败”。
容器与主机日志¶
容器应用优先写 stdout/stderr,由容器运行时和节点 Agent 统一采集。若写容器内部文件,Pod 重建后可能丢失,并增加卷、权限和轮转复杂度。
Linux 系统日志可由 journald/rsyslog 管理;日志轮转需确认应用是否能在 rename 后重新打开文件。网络设备 Syslog 还要统一设备名、来源 IP、设施/级别和时间同步。
采集器选择¶
| 工具 | 常见定位 |
|---|---|
| rsyslog | Linux/网络设备 Syslog 接收、过滤和转发 |
| Fluent Bit | 轻量容器/Kubernetes 日志采集与处理 |
| Vector | 高性能采集、转换和多后端路由 |
| Filebeat | 文件采集,常配合 Elastic Stack |
| OTel Collector | 统一 OTLP Logs 和多信号属性处理 |
关键能力包括文件指纹、轮转识别、多行堆栈、磁盘缓冲、背压、重试、限速和自身指标。后端故障时必须明确“阻塞业务、占满磁盘还是丢弃低优先级日志”。
Loki 与 Elasticsearch/OpenSearch¶
| 方案 | 典型特点 |
|---|---|
| Loki | 主要索引标签,日志正文查询;控制标签基数很重要 |
| Elasticsearch/OpenSearch | 可对字段建立丰富索引和全文检索;索引、分片和资源成本更高 |
订单号、用户 ID、Trace ID 适合作为日志字段查询,不宜全部作为 Loki label。Elastic 类系统也不能无节制索引每个动态字段,否则会产生 mapping 和分片压力。
脱敏与访问控制¶
禁止记录密码、Token、Cookie、私钥、完整身份证/银行卡和不必要请求正文。采集端脱敏只能作为补充,最佳位置是应用产生日志前。访问日志平台也需按团队/租户授权并审计下载与查询。
保留与归档¶
按用途定义保留:在线排障日志、审计日志、安全日志和低价值 Debug 日志可以不同。明确每日量、峰值、压缩、复制、索引、对象存储和删除策略。临时开启 DEBUG 时必须设定恢复时间。
日志缺失排障¶
- 源文件/stdout 是否真的产生,时间和时区是否正确。
- Agent 是否读取了正确路径,是否因权限或轮转丢失。
- 多行解析、过滤和脱敏规则是否误丢日志。
- 缓冲队列是否积压,磁盘是否已满。
- 后端写入、认证、索引/租户和保留是否正常。
- 查询的时间、服务、环境和标签是否正确。
日志说明“发生了什么”,指标说明“规模和趋势”,Trace 说明“请求经过哪里”。三者结合才能快速定位分布式故障。OpenTelemetry 的日志关联说明见官方文档。