Logstash配置双Filebeat输入分文件输出是否正确?求指导
你的配置核心逻辑是正确的,但需要注意几个关键细节
一、配置正确性确认
Filebeat 配置
你为两个filestream输入分别设置了唯一ID、启用状态、对应标签tag1/tag2以及目标日志路径,这部分配置合规,标签会被正确携带并传递给Logstash。Logstash 配置
- Input模块监听5044端口接收Beats数据,符合标准配置;
- Filter模块的grok匹配、日期解析和字段类型转换逻辑合理,只要你的日志格式完全匹配
%{COMBINEDAPACHELOG}模式,这部分就能正常工作; - Output模块通过
if "tag1" in [tags]的条件判断实现日志分流,核心逻辑完全正确。
二、需要补充/检查的关键点
- Filebeat 输出配置:你未提供Filebeat的output部分,必须确保已配置Logstash输出,否则日志无法传递到Logstash,示例配置如下:
output.logstash: hosts: ["<你的Logstash服务器IP>:5044"]
目录权限检查:确认Logstash进程对
/var/central-log目录有读写权限,否则会出现无法写入日志文件的错误。Grok匹配容错:如果日志格式和
%{COMBINEDAPACHELOG}不完全匹配,会导致grok解析失败,这类日志会被标记为_grokparsefailure。建议在output里添加else分支处理失败日志,避免丢失:
output { if "tag1" in [tags]{ stdout { codec => rubydebug } file { path => "/var/central-log/Output1.log" } } else if "tag2" in [tags]{ stdout { codec => rubydebug } file { path => "/var/central-log/Output2.log" } } else { file { path => "/var/central-log/failed-parsing.log" } } }
- 标签传递验证:如果遇到分流不生效的情况,可在Logstash的filter模块添加调试字段,确认tags是否正确传递:
filter { # 保留原有过滤逻辑 mutate { add_field => { "current_tags" => "%{tags}" } } }
通过stdout的rubydebug输出查看current_tags字段,确认标签是否存在。
内容的提问来源于stack exchange,提问作者Vrops
相关产品推荐
相关产品推荐

