繁体   English   中英

在我的情况下,add_field 在 logstash 中不起作用

[英]add_field is not working in my case in logstash

_source 是“tot_rjt_file_cnt:0 @version:1 log.file.path:/home/xxx/xxx-logs/ase/load01/xxxxx.xxx.com_SORT_dis_loader_daily_rpt.log log.offset:67,825 tot_rty_file_cnt:0 ecs.version:1.0。 0 agent.version:7.2.0 agent.ephemeral_id:0b7a5cff-79c8-4d45-9936-9d14db9eab54 agent.hostname:xxxxxx.xxxxx.com agent.id:fa4e2cd0-7ad4-"

这里我的日志文件路径是

/home/xxxx/xxx-logs/ase/load01/xxxxxx.xxxx.com_SORT_dis_loader_daily_rpt.log

我想用“ase”创建新文件。 添加logstash过滤器:

filter {
     grok { match => { "message" => "%{WORD:timestamp}\s%{BASE10NUM:total_file_cnt:int}\s%{BASE10NUM:total_ld_ok_cnt:int}\s%{BASE10NUM:total_ld_time:float}\s%{BASE10NUM:sec_per_tot_file:float}\s%{BASE10NUM:sec_per_ld_file:float}\s%{BASE10NUM:tot_rty_file_cnt:int}\s%{BASE10NUM:tot_rjt_file_cnt:int}" }
        overwrite => [ "message" ]
        }
        date {
                locale => "en"
                match => [ "timestamp", "yyyyMMdd" ]
                }

        if "ase" in [log.file.path] { mutate {  add_field => { "site" => "ASE" } }
        }

}

请您帮忙将字段名称添加为“站点”,值为“ASE”

谢谢。

问题来自if中的条件:

if "ase" in [log.file.path] { }

将查看数组log.file.path包含字符串ase ,显然不是这种情况(因为log.file.path不是数组)。

如果要检查log.file.path包含/ase/ ,请使用:

if [log.file.path] =~ "\/ase\/" { }

您的log字段是带有嵌套字段的 json object。

{ 
  "log": { 
     "file": {
         "path": "your-filename.log"
      }
   }
} 

在logstash中访问嵌套字段的正确方法是使用方括号,尝试将条件更改为在字段名称中使用方括号。

if "ase" in [log][file][path] { 
    mutate {  
        add_field => { "site" => "ASE" } 
    }
}

[log][file][path]log.file.path ,第一个是 json object,这是beats收集器存储数据的方式,第二个是名称中带有点的字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM