各位长老 logstash分析syslog问题 关于@timestamp数组

以下是我的logstash 的conf 目的是从waf回收syslog日志 使用ruby plugin进行解析字符串

input {
  syslog {
    port => 1514
    syslog_field => "syslog"
  }
}

filter{

    if "waf_attack" not in [message] { drop{} }

    ruby{
            init=>"@names=['os', 'osVersion', 'logdate', 'wafos', 'attack_level', 'shebei', 'logtype', 'buzhidao', 'originIp', 'originPort', 'aimIp', 'aimPort', 'protocol', 'celue', 'serverDomain', 'url', 'parama', 'method', 'clientType', 'buzhidao2', 'buzhidao3', 'realIp', 'fengxiandengji', 'attack_type', 'guizebianhao', 'chuzhifangshi', 'buzhidao5', 'wenti1', 'wenti2', 'buzhidao8', 'buzhidao9']"
           code=>"message = event.get('message')
                  arr_message = message.scan(/(?<=\").*?(?=\")/)
          arr_message.delete_if{|x| x==' '}
          newevent = LogStash::Event.new(Hash[@names.zip(arr_message)])
                  event.append(newevent)"
        remove_field => [ "@timestamp" ]
        add_field => { "@timestamp" => "%{logdate}" }
    }

    geoip {
        source => "originIp"
    }

}

output {

  stdout {
        codec => rubydebug
        }
}

问题出现在 解析结果上
image.png
解析结果产生@timestamp为一个数组了 这导致我无法将这个结果传给elasticsearch

我想使用以下方法 删除再创建 但是由于@timestamp是数组 导致ruby语法错误

remove_field => [ "@timestamp" ]
add_field => { "@timestamp" => "%{logdate}" }

想请问
1.为什么@timestamp出现两条记录?
2.是否是由于ruby插件造成的 我该如何将两条记录删除一条 把@timestamp转变成正常的文本类型

请赐教

补充 不使用filter的情况下 @timestamp是正常的
image.png

补充2 目前可以断定是因为下面这一句造成的
event.append(newevent)"
执行这一句之后 会产生第二条@timestamp值

阅读 1.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
项目管理
子站问答
访问
宣传栏