Skip to content

4)ELK

使用 ELK(Elasticsearch+Logstash+Kibana)或 Prometheus+Grafana 集中存储和可视化。

非常好,这两个组合方案是当前最常见的监控与日志可视化体系,分别偏重于 日志收集分析(ELK)和 系统指标监控告警(Prometheus+Grafana)。我们来用类比 + 五问五答的方式,把它讲清楚。

✅ 类比思维:

想象你是管理一座“工厂”(系统)的大管家:

  • 🔍 你要知道机器出了什么问题(日志)→ ELK 来帮你“看录像回放”
  • 📈 你要知道机器运行状态是否健康(CPU、内存、请求数)→ Prometheus+Grafana 是你的“体检监控仪”

📦 一、ELK Stack(Elasticsearch + Logstash + Kibana)

📌 1)是什么?

ELK 是一整套日志集中处理平台:

组件作用类比
Elasticsearch用于存储和检索日志数据仓库
Logstash日志收集与清洗清洗工人
Kibana日志可视化与查询分析可视化仪表盘

可接收来自 Nginx、应用服务、系统日志、Docker 等来源的日志。

⚙️ 2)原理简述:

  1. 日志通过 Logstash/Filebeat 被采集;
  2. 清洗、格式化后发送到 Elasticsearch;
  3. Kibana 用来查询、展示日志内容。

🎯 3)适用场景:

  • 查看应用报错日志、慢日志、异常信息
  • 调试服务运行状态
  • 安全审计与访问记录
  • 多服务集中查询日志,快速定位问题

✅ 4)优势:

  • 日志集中存储查询,避免 SSH 登入每台机器
  • 支持全文检索 + 多维聚合查询
  • 灵活可视化,支持图表、地图等展示
  • 可与告警系统联动(如 ElastAlert)

🛠️ 5)实践建议:

  • 使用 Filebeat 替代 Logstash 作为轻量采集器
  • 结构化日志输出(如 JSON)更利于索引查询
  • 给日志设置索引生命周期(防爆磁盘)
  • Kibana 设置仪表盘 + 定期审查指标异常

📈 二、Prometheus + Grafana

📌 1)是什么?

Prometheus 是一套开源的指标监控系统,Grafana 是可视化仪表盘。

组件作用
Prometheus收集、存储、处理系统/服务指标
Grafana图形化展示、配置告警规则

⚙️ 2)原理简述:

  1. 应用通过 Prometheus exporter(或 SDK)暴露指标接口;
  2. Prometheus 定时拉取(pull)这些指标;
  3. 存储在时序数据库中;
  4. Grafana 读取数据绘图、设置告警规则。

🎯 3)适用场景:

  • 查看系统资源使用情况(CPU、内存、磁盘)
  • 分析接口响应时间、QPS、错误率
  • 服务 SLA 评估、异常波动告警
  • Kubernetes 容器监控、数据库监控等

✅ 4)优势:

  • 数据采集轻量(HTTP 拉取)
  • 高性能时序数据库,适合高频采集
  • 可设置告警规则(集成 Alertmanager)
  • Grafana 可展示多个来源(Prometheus、MySQL、Elastic)

🛠️ 5)实践建议:

  • 每个服务暴露 /metrics 接口(支持 Go、Java、Node 等语言)
  • 使用 Exporter 收集常用组件指标(如 MySQL、Redis、Node Exporter)
  • 设置 P95/P99 延迟、QPS、异常率等关键指标
  • 配合 Alertmanager 邮件/钉钉/飞书/微信推送告警

✅ 总结对比表:

特性ELKPrometheus + Grafana
关注点日志(离线文本)指标(时间序列)
数据结构文本结构化/非结构化数值型指标
数据采集Logstash/Filebeat(推)Prometheus 拉
存储形式Elasticsearch 文档索引Prometheus 时序数据库
可视化KibanaGrafana
通用性日志处理/搜索强实时监控、告警强

🔧 实战部署建议:

  • 小型团队: 可单机部署 ELK 与 Prometheus,轻量级上手
  • 中大型系统:
    • 日志系统:ELK + Filebeat(多节点日志统一收集)
    • 监控系统:Prometheus + Grafana + Alertmanager
    • 配合 Loki(Prometheus 的日志系统)替代 ELK 亦可

✅ 面试结构设计(中高级 ELK 应聘者)

一、核心五问(含深入追问)

🔹 问题 1:你在实际项目中 ELK 是如何部署的?

考察点

  • 是否理解分布式部署
  • 是否考虑性能与高可用
  • 是否了解部署工具(Docker / K8s / 手动部署)

深入追问

  • 你如何避免 Logstash 单点故障?
  • Elasticsearch 是如何实现数据副本的?副本数如何设置?
  • 是否做过 ILM(Index Lifecycle Management)?

🔹 问题 2:你如何做日志结构化和清洗?Logstash 如何配置?

考察点

  • 是否熟悉 Logstash 的 pipeline 概念
  • 对 grok、mutate、date 等插件熟悉程度
  • 是否理解日志格式变化对处理的影响

深入追问

  • grok 匹配失败你怎么排查?
  • 多种日志格式如何统一处理?
  • 是否用过 Logstash 的条件判断?

🔹 问题 3:Elasticsearch 的性能调优做过哪些?遇到过什么问题?

考察点

  • 数据写入优化能力
  • 索引设计合理性
  • 查询慢的分析与优化能力

深入追问

  • mapping 设置你会手动定义吗?为什么不能全靠动态 mapping?
  • 你如何设计索引:是按天还是按服务?
  • 怎么防止字段爆炸?(field explosion)

🔹 问题 4:你如何借助 Kibana 快速定位线上故障?

考察点

  • 实战中的分析路径
  • 对字段筛选、聚合分析的理解
  • 是否使用过 traceId / log level / userId 辅助分析

深入追问

  • 有 traceId 情况下,如何完整还原请求链路?
  • 有没有做过告警配置(Watchers 或 ElastAlert)?
  • 多服务日志合并后,如何按服务维度筛选?

🔹 问题 5:ELK 中遇到哪些典型“坑”?你是怎么解决的?

考察点

  • 是否具备日志平台稳定性思维
  • 是否考虑过安全性、合规性、可维护性
  • 是否有优化与总结能力

深入追问

  • 有无处理过“日志洪峰”?如何限流或隔离?
  • 有没有做过日志脱敏处理?
  • 如何解决日志重复、丢失、乱序等问题?

二、案例分析题(任选其一)

🔸 案例 1:线上出现 Nginx 大量 502 错误,如何用 ELK 快速排查?

考察重点:日志结构、时间序列分析、服务之间的逻辑关联
期望步骤

  1. Kibana → Discover 查看 Nginx 502 日志,筛选出时间段、IP、URL
  2. 追溯后端服务日志(如 Java 应用)→ traceId 串联链路
  3. 分析错误字段(如 Timeout、Connection reset)
  4. 使用 Kibana 的聚合功能,统计异常 URL、主机、接口占比

🔸 案例 2:日志暴增,Elasticsearch 索引写入异常,查询非常慢,你如何分析?

考察重点:对 ES 写入、存储、查询机制的理解
可能解法

  • 检查是否因 mapping 自动扩展导致 field explosion
  • 查询 ES 索引大小、主分片数是否不均
  • 检查是否存在慢查询字段(使用 text 而不是 keyword)
  • 是否启用了聚合排序导致 heap 爆掉
  • 是否考虑了冷热数据分层存储

🔧 Bonus:你可以用这些追问“压一压”候选人:

问题目的
ES 是如何存储文档的?Lucene 是怎么用的?理解底层存储结构
Filebeat、Logstash、Kafka 怎么组合抗压?架构能力验证
ES 索引分片策略你会怎么设计?实战部署经验