我如何parsingLogstash中的可读字节数?

我正在处理包含如下部分的日志文件:

538,486K of 1,048,576K 

这些表示以可读格式呈现的内存使用(Java堆空间)。 我想在Kibana的图表中跟踪这些数字。 要做到这一点,我想以某种方式使用Logstash的grokfilter来parsing这些数字,但我不知道如何处理(即忽略)千位分隔符。

理想情况下,我会有一些也可以处理“K”和乘以一千的东西。 在这个时候,我不知道任何系统都以千字节为单位login,但我不想做这个假设。

mutatefilter允许使用gsub选项进行文本replace。

gsub需要一个数组,其中每个值的三元组表示:

  • 目标字段名称
  • search模式
  • replace模式

它在技术上支持正则expression式,但是在这种情况下我们并不需要这个。

首先,我们删除逗号。 很简单。

其次,我们相乘。 K乘以1000? 如果是这样,在我看来,我们可以简单地用K取代K

把这些放在一起:

 filter { mutate { gsub {[ "some_field", ",", "", "some_field", "K", "000" ]} } } 

您可以根据需要添加其他replace选项。

根据你的情况, K可能乘以1024,这会更复杂一些。 我没有看到任何解决scheme,但你可以使用rubyfilter运行一些算术。

我认为路德的答案应该适用于我的情况。 以下是我在阅读之前最终做的事情:

 filter { grep { match => { "message" => "...something identifying the message..." } drop => false add_tag => [ "MyMarker" ] } if "MyMarker" in [tags] { grok { match => [ "message", "...(?<rawCurValue>[0-9,]+)K of (?<rawMaxValue>[0-9,]+)K..." ] break_on_match => false } if "_grokparsefailure" not in [tags] { ruby { code => " if(event['rawCurValue']) event['curValue'] = Integer(event['rawCurValue'].gsub(',','')) * 1000 end if(event['rawMaxValue']) event['maxValue'] = Integer(event['rawMaxValue'].gsub(',','')) * 1000 end " } } } } 

我怀疑它可以更简洁,但它似乎工作。