Logstash运行时卡在Pipelines running提示无后续输出问题求助
你看到的[INFO ] 2021-10-22 13:40:00.704 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}是Logstash正常启动完成的提示,并非报错,无数据导入是其他配置或环境问题导致,常见原因及解决方案如下:
问题原因与解决方法
1. sincedb记录导致历史日志不重读
Logstash的file输入插件默认会通过sincedb文件记录已读取文件的偏移量,若你之前启动过Logstash读取过目标日志,哪怕配置了start_position => "beginning",也只会从上次读取的偏移位置开始读,不会重读历史内容。你的启动日志中也明确提示了自动生成了sincedb文件:
No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/usr/share/logstash/data/plugins/inputs/file/.sincedb_a171bd20c3269483fada27f50b68caf2", :path=>["/home/logstash/itecban-connectors.log"]}
解决方法:
- 停止Logstash后删除对应sincedb文件再重启:
rm /usr/share/logstash/data/plugins/inputs/file/.sincedb_a171bd20c3269483fada27f50b68caf2 - 测试阶段可在file输入配置中新增
sincedb_path => "/dev/null",关闭sincedb记录,每次启动都从头读取文件。
2. 日志路径不匹配或权限不足
你配置中填写的读取路径是/home/logstash/connectors.log,但启动日志显示实际读取的路径是/home/logstash/itecban-connectors.log,二者不一致,需先确认目标日志文件的真实路径是否存在。
同时需确认Logstash运行用户对目标日志文件有可读权限,对日志所在目录有可执行权限:
- 检查文件是否存在:
ls -l /home/logstash/connectors.log - 权限配置示例:
chmod +r /home/logstash/connectors.log && chmod +x /home/logstash/
3. Grok匹配规则不匹配
若日志已正常读取,但Grok规则和实际日志格式不匹配,不会直接报错,只会给事件打上_grokparsefailure标签,不会输出预期字段。
排查方法:先注释掉整个filter段,仅保留input和stdout输出,确认是否有原始日志输出到控制台,以此判断是读取问题还是匹配规则问题。若确认是规则问题,可使用Kibana自带的Grok调试工具,粘贴实际日志行和规则调试匹配格式。
4. document_id字段缺失导致ES写入失败
你配置中指定了document_id => "%{[@metadata][fingerprint]}",但整个配置中没有生成[@metadata][fingerprint]字段的逻辑(未使用fingerprint过滤插件),写入ES时document_id为空会导致写入失败。
解决方法二选一:
- 直接删除document_id配置,让ES自动生成文档ID
- 在filter段新增fingerprint插件生成对应字段,示例:
filter { fingerprint { source => "message" target => "[@metadata][fingerprint]" method => "SHA1" } # 原有grok规则保留在下方 }
排查验证建议
- 先简化配置,注释掉filter和elasticsearch输出,仅保留file输入和stdout输出,确认能正常读取日志并打印到控制台
- 逐步加回filter规则、ES输出配置,逐段排查哪一环节出现问题
内容的提问来源于stack exchange,提问作者Víctor S

