linux-sre-handbook

04-日志管理

日志系统设计

应用日志 → 采集器 → 消息队列 → 存储引擎 → 查询界面
         (Filebeat)  (Kafka)    (Elasticsearch)
         (Promtail)             (Loki)
         (Fluentd)             (ClickHouse)

ELK 技术栈

Filebeat → Elasticsearch → Kibana
              ↑
          Logstash (可选,用于复杂处理)

Loki (Grafana 生态)

轻量级日志聚合系统,设计理念类似 Prometheus:

Promtail → Loki → Grafana
            ↓
    object store (S3/GCS/MinIO)

优势:

{job="nginx"} |= "error"
{job="nginx"} | json | status >= 500
rate({job="nginx"} |~ "ERROR" [5m])

日志分级

级别 缩写 说明
DEBUG DBG 详细调试信息
INFO INF 一般信息
WARN WRN 警告
ERROR ERR 错误
FATAL FTL 致命错误

SRE 日志实践

  1. 结构化日志 — JSON 格式,便于查询和分析
  2. Trace ID 注入 — 关联日志与追踪
  3. 敏感信息脱敏 — 密码、token、PII 不记录
  4. 日志采样 — 高频日志降采样避免刷盘风暴
  5. 保留策略 — 热数据/温数据/冷数据分层存储
  6. 轮转策略 — 按时间或大小轮转,避免磁盘占满
# logrotate 配置示例
/var/log/myapp/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        systemctl reload myapp
    endscript
}

延伸阅读