如何用 Filebeat + Logstash + Elasticsearch 把 JSON 日志发送到 Kibana?

JSON 日志链路配置:Filebeat 端 filestream ndjson 解析 JSON 到 app 命名空间、Logstash 接收转发、ES 存储、Kibana 展示。本文给出全链路配置示例。

最佳实践
如何用 Filebeat + Logstash + Elasticsearch 把 JSON 日志发送到 Kibana?封面

全链路四步:Filebeat 用 filestream 的 ndjson parser 把 JSON 解析到 app 命名空间 → 发到 Logstash(beats input)→ Logstash 转发到 Elasticsearch → Kibana 创建索引模式查看。

第一步:Filebeat 配置

filebeat.inputs:
  - type: filestream
    id: app-json
    paths:
      - /path/to/your/app.json
    parsers:
      - ndjson:
          target: app
          add_error_key: true

output.logstash:
  hosts: ["localhost:5044"]

假设日志每行是一个 JSON:{"level":"INFO","msg":"用户登录","ts":1696150204}

第二步:Logstash 配置

input {
  beats {
    port => 5044
  }
}

filter {
  # JSON 已在 Filebeat 解析,UNIX ts 转为事件时间
  date { match => ["[app][ts]", "UNIX"] }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "app-logs-%{+yyyy.MM.dd}"
    ilm_enabled => false
    data_stream => false
  }
}

第三步:Kibana 查看

Stack Management → Data Views → 创建 app-logs-*,时间字段选 @timestamp,再到 Discover 检索。示例 ts 是历史时间,需选择对应时间范围;上例明确使用普通每日索引,生产若启用 ILM 或 data stream 应改用配套管理方式。

常见问题排查

  • Kibana 里看不到字段:Data View 需要刷新字段列表;
  • JSON 解析失败:ndjson 的 add_error_key 启用后,检查 error.message 和 error.type 字段,据此排查格式问题;
  • 字段冲突:不同日志源同名字段类型不同会导致 ES 拒绝写入,统一字段类型或按来源分索引。

常见问题(FAQ)

Q:Filebeat 解析 JSON 后还需要 Logstash 吗?
A:不需要复杂转换时可直连 ES(Filebeat → ES)。Logstash 的价值在复杂 filter、多输出路由。

Q:JSON 里的时间字段怎么变成 @timestamp?
A:Logstash 的 date filter:date { match => ["[app][ts]", "UNIX"] }。

Q:每天新建索引,mapping 怎么管?
A:配置索引模板(index template),新索引自动套用映射。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台