Skip to content

参考:Beats 家族、Logstash 插件与易错点

基于 ELK Stack 8.x · 核于 2026-08

速查

  • ELK = Elasticsearch(存+检索)+ Logstash(解析)+ Kibana(UI)+ Beats(采集)
  • 流水线:日志文件 → Filebeat → Logstash(grok/mutate)→ ES(倒排索引)→ Kibana(Discover)。
  • Beats 家族:Filebeat(日志)/ Metricbeat(指标)/ Heartbeat(探活)/ Packetbeat(网络)/ Auditbeat(审计)/ Winlogbeat(Windows)。
  • Logstash filter 三大插件:grok(正则解析)/ mutate(改字段)/ date(时间解析)。
  • ES 核心:倒排索引(全文检索)+ 分片副本(水平扩展+HA)+ mapping(text/keyword)+ ILM(生命周期)。
  • text vs keyword:text 分词(全文检索)/ keyword 不分词(精确匹配+聚合)——错配导致检索失效。
  • 与 Loki 对比:ELK 全文检索强但存储贵(约 10 倍),Loki 省存储但弱检索。
  • 不做的事:指标监控(归 Prometheus)、分布式追踪(归 Jaeger/Tempo)。

一、Beats 家族速查

Beat采集对象典型用途常用度
Filebeat日志文件应用/系统日志采集⭐⭐⭐⭐⭐
Metricbeat系统/服务指标CPU/MySQL/Redis 指标⭐⭐⭐⭐
Heartbeat服务可用性uptime/延迟探活⭐⭐⭐
Packetbeat网络流量DB/HTTP 抓包分析⭐⭐
Auditbeat审计数据Linux audit/文件完整性⭐⭐
WinlogbeatWindows 事件Windows 服务器日志⭐⭐
Functionbeat云函数Serverless 采集
Journalbeatsystemd journalsystemd 日志⭐⭐

二、Logstash filter 常用插件

插件作用示例
grok正则解析非结构化日志%{TIMESTAMP_ISO8601:ts} %{LOGLEVEL:level}
mutate字段操作(rename/add/remove/convert)convert => {status => integer}
date时间字段解析到 @timestampmatch => [ts, ISO8601]
jsonJSON 字符串解析成对象source => message
geoipIP 转地理信息source => client_ip
kvkey=value 格式解析自动解析 k=v k2=v2
ruby执行 Ruby 代码(复杂逻辑)自定义处理
split数组拆成多条 eventfield => tags
drop丢弃 event过滤无用日志
clone复制 event 到多 output一份日志多路处理

三、grok 预置模式速查

模式匹配示例
TIMESTAMP_ISO8601ISO8601 时间戳2026-08-09T12:00:00Z
LOGLEVEL日志级别ERROR/INFO/WARN
IPIPv4/IPv6192.168.1.1
IPORHOSTIP 或主机名es-cluster-1
NUMBER数字1234
WORD单词order
DATA非贪婪任意(少量字符)
GREEDYDATA贪婪任意(剩余全部)
UUIDUUID550e8400-...
EMAILADDRESS邮箱a@b.com
URIURI/api/order
HTTPDATEHTTP 日期09/Aug/2026:12:00:00

四、ES mapping 类型速查

类型用途示例字段
text分词,全文检索message、description
keyword不分词,精确匹配+聚合level、service、status
long/integer整数聚合status_code、count
float/double浮点聚合latency_ms
boolean布尔success
date时间@timestamp
ipIP(范围查询)client_ip
object嵌套对象user.name
nested嵌套数组(独立查询)items[]
geo_point地理坐标location

五、ES 聚合(aggregation)速查

json
{
  "size": 0,
  "query": { "match_all": {} },
  "aggs": {
    "by_service": {
      "terms": { "field": "service.keyword", "size": 10 }   // 分桶
    },
    "error_rate_over_time": {
      "date_histogram": {                                    // 时间分桶
        "field": "@timestamp",
        "fixed_interval": "1h"
      },
      "aggs": {
        "avg_latency": { "avg": { "field": "latency_ms" } } // 子聚合
      }
    },
    "distinct_users": { "cardinality": { "field": "user_id" } } // 去重计数
  }
}
  • bucket aggregation:terms(分桶)/ histogram / date_histogram / range / filter。
  • metric aggregation:avg / sum / max / min / cardinality(去重)/ stats / percentiles。

六、Kibana KQL(Kibana Query Language)速查

# 基本查询
level:error                              # 字段:值
level:error and service:"order service"  # AND
level:error or level:warn                # OR
NOT level:info                           # NOT
message:"user not found"                 # 全文短语
status:[400 TO 499]                      # 数值范围
@timestamp > "now-1h"                    # 时间范围
client_ip:192.168.1.*                    # 通配符
exists(field)                            # 字段存在

七、ILM(Index Lifecycle Management)配置

json
PUT _ilm/policy/app-logs-policy
{
  "policy": {
    "phases": {
      "hot": {                            // 0-7 天:写入 + 查询
        "actions": {
          "rollover": { "max_age": "1d", "max_size": "50gb" }
        }
      },
      "warm": {                           // 7-30 天:只查询(慢盘)
        "min_age": "7d",
        "actions": { "shrink": { "number_of_shards": 1 } }
      },
      "cold": {                           // 30-90 天:少查(更慢盘)
        "min_age": "30d",
        "actions": { "freeze": {} }
      },
      "delete": {                         // 90 天后:删除
        "min_age": "90d",
        "actions": { "delete": {} }
      }
    }
  }
}

八、易错点清单

  • 「ELK 做指标监控」:错。指标监控选 Prometheus(PromQL 专精、Pull、告警强),ELK 的 Metricbeat 是补充。
  • 「ELK 做分布式追踪」:错。追踪归 Jaeger/Tempo(有 trace/span 模型),ELK 是扁平文档。
  • 「Loki 替代 ELK 所有场景」:错。要全文模糊检索/复杂聚合选 ELK,Loki 弱检索。
  • 「把 level 字段设成 text」:错。text 会分词,精确匹配 level:error 失败——level 应设 keyword。
  • 「Filebeat 必须配 Logstash」:错。Filebeat 可直接发 ES(用 Ingest Node 解析),小规模省组件。
  • 「ES 堆内存越大越好」:错。堆超过 32GB 会失去指针压缩(oops),反而变慢——建议 ≤31GB。
  • 「Logstash 每台机器都跑」:不推荐。Logstash 重(JVM),常只跑少数实例集中解析,每台机器跑 Filebeat(轻)。
  • 「grok 解析不耗资源」:错。grok 是正则,CPU 密集,日志量大时 Logstash 资源消耗明显。
  • 「ES 集群无需调分片」:错。分片过多(每个索引 1 主分片)查询慢,分片过少(每分片 >50GB)难均衡——按数据量与节点数设计。
  • 「Kibana 和 Grafana 等价」:错。Kibana 专注 ES 数据源(日志检索强),Grafana 多数据源(指标可视化强),各有侧重。
  • 「ILM 没必要」:错。无 ILM 索引无限增长会撑爆磁盘——必须设 hot/warm/cold/delete 控制成本。
  • 「Beats 和 Promtail 等价」:不完全。Filebeat 发 ES/Logstash(ELK 栈),Promtail 发 Loki(Grafana 栈),下游不同。

权威链接