如何在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
相关产品推荐
相关产品推荐

