Я имею дело с файлами журнала, содержащими части, такие как:
538,486K of 1,048,576K
Они представляют использование памяти (пространство "кучи" Java) представленный в человекочитаемом формате. Я хотел бы отследить те числа в диаграммах в Kibana. Чтобы сделать это, я хотел бы так или иначе использовать фильтр grok Logstash для парсинга этих чисел, но я не знаю, как обработать (т.е. проигнорировать), тысячи разделителя.
Идеально у меня было бы что-то, что может также обработать "K" и умножиться на одна тысяча. В данный момент я не знаю, что любая система входит в систему единица кроме килобайта, но я предпочел бы не делать то предположение.
Фильтр mutate
позволяет заменять текст на gsub Параметр
.
gsub
принимает массив, в котором каждый триплет значений указывает:
Во-первых, мы удалим запятые. Достаточно просто.
Во-вторых, мы умножаем. Следует ли K
умножить на 1000? Если это так, мне кажется, что мы можем просто заменить K
на 000
.
Собираем все вместе:
filter {
mutate {
gsub {[
"some_field", ",", "",
"some_field", "K", "000"
]}
}
}
При необходимости вы можете добавить другие варианты замены.
В зависимости от ваших обстоятельств, K
может умножаться на 1024, что будет немного сложнее. Я не вижу никакого решения прямо из коробки, но вы можете использовать фильтр ruby
для выполнения некоторых арифметических операций.
Я думаю, что ответ rutter должен работать в моем случае. Вот что я в итоге сделал до того, как прочитал его:
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
"
}
}
}
}
Я подозреваю, что его можно было бы сделать более кратким, но, похоже, это работает.