Logstash配置过滤丢弃无userId字段日志规则不生效问题求助
Logstash过滤规则不生效问题解决
错误原因
你的配置存在两处核心问题导致过滤规则未生效:
- 过滤器执行顺序颠倒:你先执行了
userId存在性判断,之后才调用json插件解析message字段的内容。如果原始输入是完整JSON字符串存放在message字段中,执行判断逻辑时contextMap字段还没有被解析生成,判断规则自然无法命中。 - 字段存在性判断语法错误:
if "userId" not in [contextMap]是用于判断数组contextMap中是否包含"userId"这个值的语法,而你需要判断的是contextMap对象(哈希结构)下是否存在userId这个键,二者逻辑完全不符。
修正后的配置
你只需要调整filter块的逻辑顺序和判断语法即可,参考配置如下:
filter { # 优先解析message字段中的JSON内容,生成结构化字段 json { source => "message" } # 判断contextMap存在、且其下没有userId字段时,丢弃当前日志 if [contextMap] and !([contextMap][userId]) { drop {} } }
可选优化
如果你的TCP输入接收的就是标准JSON格式数据,也可以直接在tcp输入中启用json编解码,省去filter阶段的JSON解析步骤:
input { tcp { port => 5000 codec => json { charset=>"UTF-8" } } stdin {} }
内容的提问来源于stack exchange,提问作者Navigator
相关产品推荐
相关产品推荐

