You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Logstash输出区分file与udp输入并存储至不同Elasticsearch索引

解决方案

要区分不同输入源并输出到Elasticsearch的不同索引,核心思路是给每个输入源添加唯一标记字段,然后在输出环节通过条件判断这个字段来指定对应索引。

第一步:修改输入配置,添加标记字段

在file和udp输入插件中,通过add_field参数添加自定义字段(比如source_type),用来标识日志来源:

input {
  file {
    path => ["/sample/data.log"]
    # 添加标记字段,标识这是file输入的日志
    add_field => { "source_type" => "file_log" }
  }
  udp {
    port => 9999
    # 添加标记字段,标识这是udp输入的日志
    add_field => { "source_type" => "udp_log" }
  }
}

第二步:编写输出配置,按条件路由到不同索引

在output块中,使用Logstash的条件判断语法,根据source_type字段的值,将日志发送到对应的Elasticsearch索引:

output {
  # 处理file输入的日志,输出到file专属索引
  if [source_type] == "file_log" {
    elasticsearch {
      hosts => ["your-es-server:9200"] # 替换成你的ES服务地址
      index => "file-logs-%{+YYYY.MM.dd}" # 自定义索引名,日期后缀便于按天管理日志
    }
  }

  # 处理udp输入的日志,输出到udp专属索引
  if [source_type] == "udp_log" {
    elasticsearch {
      hosts => ["your-es-server:9200"] # 替换成你的ES服务地址
      index => "udp-logs-%{+YYYY.MM.dd}" # 自定义索引名
    }
  }
}

补充说明

  • 自定义字段的名称和值可按需调整,只要保证每个输入源的标记唯一即可;也可以用type字段,但推荐用自定义字段更清晰。
  • 索引名中%{+YYYY.MM.dd}是常见的最佳实践,会自动按生成日志的日期拼接索引名,便于后续的日志查询和生命周期管理。
  • 如果你的Elasticsearch开启了身份验证,需要在elasticsearch输出插件中额外添加user和password参数。

内容的提问来源于stack exchange,提问作者Parry Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:52:11