使用gsub构造Logstash消息字段



我正在尝试截断通过我的logstash转发器传入的消息。我的数据可以截断,没有截断,它在我的日志提供程序中被切断,导致json损坏。

我已经将以下配置添加到我的logstash配置

filter {
  mutate {
    rename => { "message" => "@message" }
  }
  mutate {
    gsub => ["@message", "^.{1000}(.*)$", "..."]
  }
}

我的假设是gsub regex将从第1001个字符直到字段值结束,并将其替换为"…"

我还必须将字段message重命名为@message以保持一致性。

但它似乎根本不想修剪。

任何想法,我可能做错了或另一种过滤器类型,我应该使用做截断?

您可以使用ruby过滤器:

ruby {
    code => "event['@message'] = event['@message'][0...1000]+'...'"
  }

这将用@message字段中的前1000个字符替换@message字段,然后是...

Update:它可能不能在所有版本的Logstash上工作。它是在2.4版本上测试的(我认为),不会在最新版本的Logstash上工作;使用gsub的其他解决方案应该可以在所有版本中工作。

这对我有用:

    mutate {
        gsub => [             
            "message", "(^.{1,1000}).*$", "1..."
        ]
    }   

我最初尝试了@baudsp的ruby过滤器建议,但无法让它工作

5.1之后logstash有一个截断过滤器:https://www.elastic.co/guide/en/logstash/5.1/plugins-filters-truncate.html

truncate {
  length_bytes => ...
}

在此之前,我认为最好的选择是使用范围过滤器:

range {
    ranges => [ "message", 1000, 100000, "tag:longmessage"]
  }
if "longmessage" in [tags] {
  mutate {
    #truncate long messages
    gsub => [ "message", "(^.{1,1000}).*$", "1..."]
  }
}

前面的答案可以,但是在每条消息的末尾设置3个点

最新更新