В: Возможно ли это?
A: Да.
Предполагается, что ваши json - и сплит-фильтры работают правильно и поле business_time_left содержит одно значение, как вы показали (например, 4 дня 23 часа 58 минут ). Я лично сделал бы следующее:
Сначала убедитесь, что ваши данные находятся в виде значения шаблона, вы стандартизуете «количественные описания». Это означает, что минуты всегда обозначаются как «Минуты», а не «Минуты», «Мин.» Или что-то в этом роде.
В дальнейшем вы можете проанализировать поле с помощью фильтра grok следующим образом: извлечет все доступные значения в нужные поля, например, cal c .days. Символ ? предотвращает сбой грока, если, например, нет секунд. Вы можете проверить шаблон на этом сайте .
С извлеченными данными вы можете реализовать фильтр ruby для агрегирования числовых значений c следующим образом (не проверено):
ruby{
code => '
days = event.get("calc.days")
hours = event.get("calc.hours")
minutes = event.get("calc.minutes")
sum = 0
if days
days_numeric = days.to_i
days_as_hours = days_numeric * 24
sum += days_as_hours
end
if hours
sum += hours.to_i
end
if minutes
sum += (minutes.to_i / 100)
end
# seconds and so on ...
event.set("business_time_left_as_hours", sum)
'
}
Таким образом, в основном вы проверяете наличие значений и добавляете их к сумме с вашими пользовательскими логами c.
event.set("business_time_left_as_hours", sum) will set the result as a new field to the document.
Эти фрагменты кода не предназначены для работы из коробки, они просто намеки. Поэтому, пожалуйста, проверьте документацию о ruby фильтре, ruby кодировании в целом и т. Д.
Я надеюсь, что смогу вам помочь.