EFK按标签创建索引失效:Fluent-bit推数后Logstash不生成索引
问题排查与修复方案
核心原因分析
Logstash未按标签创建索引的关键问题在于:Fluent-bit未将tag字段注入到发送给Logstash的日志记录中,同时Logstash的条件判断使用了错误的字段名(复数tags而非单数tag)。
步骤1:修改Fluent-bit配置,注入Tag字段
需要在Fluent-bit中添加过滤器,将test-mgmt标签作为字段写入日志记录,并确保输出格式为JSON,让Logstash能正确解析。
修正后的Fluent-bit配置:
[INPUT] Name tail Path /data/logs/RestApiInfoLog*.json Tag test-mgmt Refresh_Interval 5 DB /data/fluent-bit/test-mgmt-taildb read_from_head true Multiline On Mem_Buf_Limit 1048MB Buffer_Max_Size 500MB Buffer_Chunk_Size 400k Parser_Firstline singleline multiline.parser multiline-regex # 添加过滤器:将Tag注入日志记录 [FILTER] Name record_modifier Match test-mgmt Record tag test-mgmt [OUTPUT] Name tcp Match test-mgmt Host xx.xx.xx.xx Port 5052 Format json # 确保输出为JSON格式,包含完整日志字段
步骤2:修正Logstash的条件判断
Logstash原配置中使用[tags](复数数组字段),但我们注入的是单数tag字段,需调整条件匹配逻辑:
修正后的Logstash配置:
input { tcp { port => 5052 codec => json_lines } } output{ # 使用单数tag字段做精确匹配 if [tag] == "test-mgmt" { elasticsearch { hosts => ["https://127.0.0.1:9200"] index => "test-mgmt-%{+YYYY.MM.dd}" ssl_certificate_verification => false user => "xxxxx" password => "xxxxxx" } } # 可选:添加stdout输出,验证日志字段是否正确 stdout { codec => rubydebug } }
额外验证步骤
- 检查Fluent-bit输出:在Fluent-bit配置中添加stdout输出,确认日志记录包含
tag字段:[OUTPUT] Name stdout Match test-mgmt Format json_lines - 检查Logstash接收数据:通过Logstash的stdout输出(rubydebug格式),确认
tag字段存在且值为test-mgmt。
内容的提问来源于stack exchange,提问作者Muhammad Danish
相关产品推荐
相关产品推荐

