大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
Elastic Stack(ELK / EFK)
Elasticsearch + Logstash/Fluentd + Kibana 是日志领域最成熟的自建方案之一:全文检索强、聚合分析灵活、生态插件丰富。K8s 场景常把 Logstash 换 Fluent Bit(EFK)。本课讲最小可用集群与 Index 生命周期;日志方法论见 dob-logs,轻量替代见 dob-loki,指标见 prometheus-essentials,DevOps 见 /roadmaps/devops。
学习目标
- 部署单节点 Elasticsearch + Kibana(开发)并理解分片/replica
- 用 Filebeat 采集 Docker 容器 JSON 日志到 ES
- 配置 ILM(Index Lifecycle Management) 自动 rollover 与删除
架构
backend container
└─ stdout JSON
└─ Filebeat(Docker autodiscover)
└─ Elasticsearch :9200
└─ Kibana :5601(Discover / Dashboard)
# filebeat.yml 概念片段
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
output.elasticsearch:
hosts: ["elasticsearch:9200"]
index: "coderoadmap-%{[agent.version]}-%{+yyyy.MM.dd}"
setup.ilm.enabled: true
setup.ilm.rollover_alias: "coderoadmap"
setup.ilm.pattern: "coderoadmap-*"
Kibana 查询
- Discover:
service:"coderoadmap-backend" AND level:ERROR AND trace_id:abc123 - Lens / Dashboard:按 level 计数、按 exception 分组 Top N
- 与 APM:Elastic APM 可接 OTel,实现 logs-metrics-traces 同栈(许可注意 Basic vs 付费)
运维要点
| 主题 | 建议 |
|---|---|
| 内存 | ES heap 不超过 50% 物理内存,通常 ≤ 31GB |
| 分片 | 单分片 20~50GB,避免过多小分片 |
| 映射 | 关键字段 keyword vs text 提前定义 template |
| 安全 | 生产启用 TLS、内置用户、API key |
资源不足时可降级到 dob-loki + Grafana,仅保留 label 索引。
练习
- 在 Kibana 创建 Index Pattern,过滤 backend ERROR 日志
- 写 ILM policy:hot 7 天 rollover,delete 30 天
- 对比 ELK 与 Loki:各写 3 条选型理由
小结
Elastic Stack 适合需要强大全文检索与复杂聚合的日志场景,但运维与硬件成本较高。 下一课看 Loki 如何「像 Prometheus 一样管日志」。