Logstash的Elasticsearch Input插件查询无输出问题求助
Logstash Elasticsearch Input插件无输出问题排查与解决
问题核心分析
管道启动后立即终止、无输出的问题,并非由clear_scroll的404警告导致——该警告是插件尝试释放不存在的滚动ID,返回结果显示"succeeded":true,"num_freed":0,属于无害提示,可忽略。真正的问题大概率集中在插件运行模式、查询匹配或配置细节上。
解决方案
1. 调整插件运行模式,避免管道一次性执行后终止
Logstash的Elasticsearch Input插件默认是一次性查询模式,执行完查询后直接终止管道,可能来不及输出结果。添加定时调度参数让插件周期性执行查询,管道会持续运行:
input { elasticsearch { # 保留原有配置... schedule => "* * * * *" # 每分钟执行一次查询,可根据需求调整 cron 表达式 } }
2. 验证查询的时间范围与索引匹配
尽管你确认查询在Elasticsearch中正常运行,仍需注意:
- Logstash与Elasticsearch的时区是否一致?
now-1d/d的计算依赖时区,可临时替换为绝对时间测试,比如:"query": { "range": { "@timestamp": { "gte": "2023-02-22T00:00:00Z" } } } - 确认
index => "log-com-ms-ldap--*"能匹配到目标索引,可简化为具体索引名测试。
3. 添加target参数(可选但推荐)
日志中提示ECS兼容模式下未设置target,虽不直接导致无输出,但会引发字段冲突风险。添加该参数将ES查询结果存入指定字段,便于查看:
input { elasticsearch { # 保留原有配置... target => "[elasticsearch_data]" } }
4. 简化查询调试
先使用match_all查询确认插件能正常获取数据,再逐步添加过滤条件:
query => '{ "query": {"match_all": {}}, "size": 1 }'
5. 临时简化输出配置
测试时可注释掉email输出,只保留stdout,避免邮件发送逻辑干扰结果查看:
output { stdout { codec => rubydebug } # email { # to => myemail # from => mysystem # subject => 'Success' # body => 'Success' # address => myaddress # via => 'smtp' # } }
修改后的完整配置示例
input { elasticsearch { id => "es_input_plugin" user => myuser password => mypassword hosts => myhost ca_file => "C:\devsetup\logstash-8.6.0\rootca3.crt" ssl => true index => "log-com-ms-ldap--*" query => '{ "query": { "range": { "@timestamp": { "gte": "now-1d/d" } } }, "size": 1 }' docinfo => true docinfo_target => "[@metadata][doc]" target => "[elasticsearch_data]" schedule => "* * * * *" } } output { stdout { codec => rubydebug } }
内容的提问来源于stack exchange,提问作者Alex Elam
相关产品推荐
相关产品推荐

