易君召
易君召
发布于 2026-10-21 / 3 阅读
0

Elasticsearch 日志分析完整方案(ELK/Elastic Stack)

核心链路:应用日志 → 采集 → 清洗解析 → ES 存储索引 → 查询 / 聚合分析 → Kibana 可视化 + 告警 Elasticsearch 负责存储、倒排索引、全文检索、聚合统计;它本身不采集日志,需要搭配采集、处理、UI 组件一起工作Elastic。

一、架构选型(3 种常用方案)

方案 1:简单小集群(推荐入门)

Filebeat → Elasticsearch(Ingest Pipeline) → Kibana

  • Filebeat:轻量采集,部署在业务机,监听日志文件,资源占用极低,自带断点续传、背压控制;支持多行合并(Java 堆栈)、容器自动发现Elastic

  • Ingest Pipeline:ES 内置预处理,Grok/Dissect/json 处理器,在写入 ES 之前解析日志,不用单独部署 Logstash

  • 适合:日量千万级以内、日志格式不算复杂

方案 2:标准生产架构(中大数据量)

Filebeat → Kafka → Logstash → Elasticsearch → Kibana

  • Kafka 做削峰缓冲,防止日志洪峰打挂 ES;解耦采集和处理

  • Logstash:强大过滤、Grok、GeoIP、字段富化、分支路由、丢弃无用日志;适合非结构化、格式杂乱的日志

  • 适合:多业务、日亿级日志、复杂清洗逻辑

方案 3:新一代 Elastic Agent + Fleet

Elastic Agent(Fleet管理) → ES 统一采集日志、指标、安全数据,Kibana 里集中管理所有 Agent 策略,云原生 / 容器场景首选,替代分散的 Filebeat+MetricbeatElastic

✅ 8.x 新特性:LogsDB,日志专用索引模式,列存 + ZSTD 压缩,存储节省最高 65%,日志场景优先开启Elastic

二、分步落地

1. 日志规范(最优先!)

优先输出 JSON 结构化日志(logback/log4j2、Python logging、Nginx json 格式),自带 @timestamp、log.level、service.name、trace.id、message 字段,无需复杂 Grok 解析,检索效率最高。 非结构化文本日志才需要 Grok/Dissect 切割字段。

2. 采集:Filebeat 最简示例

# filebeat.yml
filebeat.inputs:
- type: filestream
  paths:
    - /opt/app/logs/*.log
  multiline.type: pattern          # 合并Java异常堆栈
  multiline.pattern: '^[0-9]{4}-'
  multiline.negate: true
  multiline.match: after
processors:
  - add_fields:
      fields:
        service: order-service
output.elasticsearch:
  hosts: ["http://es1:9200"]
  pipeline: "log-parse-pipeline"   # 指定Ingest解析管道

3. 清洗解析:Ingest Pipeline(ES 内置)

在 Kibana → Stack Management → Ingest Pipelines 创建,也可以用 API 创建。 示例:解析 Nginx 日志,用 dissect(性能高于 grok)

PUT _ingest/pipeline/nginx-log-pipeline
{
  "processors": [
    {
      "dissect": {
        "field": "message",
        "pattern": "%{client_ip} - %{user} [%{@timestamp}] \"%{method} %{path} %{proto}\" %{status} %{size}"
      }
    },
    {
      "date": {
        "field": "log_time",
        "formats": ["dd/MMM/yyyy:HH:mm:ss Z"]
      }
    },
    { "remove": {"field": "message", "ignore_missing": true} }
  ]
}
  • grok:正则语法,灵活,性能差一点,适合自定义复杂格式

  • dissect:分隔符切割,速度快,格式固定优先用

  • json:直接把 message 解析成 json 对象

4. ES 索引与生命周期(ILM,日志必配)

日志是时序数据,禁止单索引无限膨胀,推荐使用 Data Stream + ILM 索引生命周期管理:

  1. Data Stream:自动按时间滚动,底层自动生成后备索引 logs-*-000001

  2. ILM 策略示例:

    • 热阶段:写入、查询

    • 温阶段:7 天后,迁移到温节点,冻结,降低资源开销

    • 冷阶段:30 天后,归档

    • 删除:90 天后自动清理旧日志

  3. 模板(Index Template):统一设置分片、副本、mapping、开启 LogsDB,匹配 logs-*

索引命名规范:logs-{service}-*,例如 logs-order,logs-nginx,logs-gc

5. 查询分析(DSL / KQL / ES SQL)

KQL(Kibana Discover 里直接写,最常用)

log.level:ERROR AND service.name:order-service AND @timestamp > now-1h
trace.id: "abc123456"
message: "timeout"

聚合统计 DSL(统计最近 1 小时错误数,按 5 分钟分桶)

GET logs-order/_search
{
  "size": 0,
  "query": {
    "bool": {
      "filter": [{"range": {"@timestamp": {"gte": "now-1h"}}}, {"term": {"log.level": "ERROR"}}]
    }
  },
  "aggs": {
    "time_bucket": {
      "date_histogram": {"field":"@timestamp","fixed_interval":"5m"}
    }
  }
}

常用分析场景:

  • 全文检索报错关键词、链路追踪 traceId 串联全链路日志

  • 统计错误码分布、TOP 慢请求、异常峰值

  • 按服务、IP、用户、接口分组统计 QPS、错误率

6. Kibana 可视化 & 告警

  1. Discover:实时查看、检索、过滤原始日志,支持 tail 实时流

  2. Visualize / Dashboard:做折线图(错误率)、饼图(状态码)、TOPN IP 面板

  3. Alerting 告警规则:

    • 阈值告警:5 分钟内 ERROR 日志 > 50 条

    • 异常检测(ML):自动识别日志突增突降

    • 通知:webhook、钉钉、企业微信、邮件

三、生产最佳实践(避坑重点)

  1. 写入侧

    • Filebeat 开启 persist 跟踪文件偏移,防止重复采集、丢日志

    • 高并发一定要加 Kafka 缓冲;不要让业务直写 ES

    • 丢弃无用日志:健康检查 200、调试日志,减少存储和压力

  2. ES 集群规划

    • 角色分离:master、data_hot、data_warm、data_cold、ingest 节点

    • 日志分片:单个分片建议 20~50G;分片过多会加重集群负担

    • 关闭不需要的字段索引:只对检索字段开启 index:true,大文本只存不索引

    • 开启 LogsDB,日志场景收益巨大

  3. 查询侧

    • 所有查询必须带时间范围,不带时间范围的查询是日志平台杀手

    • 优先使用结构化字段过滤(log.level、service),少用全文 match

    • 禁止超大时间范围、深度分页;用 search_after 滚动

  4. 权限与安全

    • 开启 ES 安全认证,不同业务索引做 RBAC 权限隔离

    • 审计日志、慢查询日志单独采集监控

四、常见排查方向

  • 日志收不到:Filebeat registry、输出地址、pipeline 解析失败标签 _grokfailure

  • ES 写入变慢:分片过多、无 ILM、热节点资源打满、未加缓冲队列

  • 查询慢:时间范围太大、未结构化、分片过大、没有合理索引 mapping


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/elasticsearch-log-analysis-complete-solution

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/