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

发布于 2022-09-12 23:48:47 字数 1865 浏览 30 评论 0

以下是我的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值

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文