Цикл конфигурации logstash по полям

Нуб ruby/logstash здесь использует стек ELK.

У меня есть куча полей

[Сообщение][Детали][Показания][Значение1]

[Сообщение][Детали][Показания][Значение2]

[Сообщение][Детали][Показания][Значение3]

который я хочу пройти через рубин в конфигурации logstash.

Затем я хочу выполнить простую операцию для каждого, например, изменить их с шестнадцатеричного на десятичное, например.

event.set('[currField]', event.get('[currField]').to_s.hex);

но я не могу найти правильный синтаксис с помощью Google ... любая помощь приветствуется.

Я знаю имена полей, поэтому в худшем случае мне придется их жестко закодировать, но я бы хотел избежать этого, если это возможно.

РЕДАКТИРОВАТЬ: я еще не тестировал свою конфигурацию, поэтому я не знаю, будет ли Readout хэш-картой; я использую фильтр grok, чтобы добавить значения в конфигурацию

"(?<[Message][Detail][Readout][Value1]>(?<=0x.{8})([A-F0-9]{2}))",
"(?<[Message][Detail][Readout][Value2]>(?<=0x.{8})([A-F0-9]{2}))" 

так далее

Псевдо:

event.get('[Message][Detail][Readout]') each { |k, v|
  event[k] = newValue;
}

person Master Azazel    schedule 27.12.2020    source источник
comment
Итак, [Message][Detail][Readout] — это хэш, и вы хотите перебирать элементы?   -  person Badger    schedule 27.12.2020
comment
нет, это отдельные поля, но все с префиксом [Readout]   -  person Master Azazel    schedule 27.12.2020
comment
Вы говорите, что имена полей содержат квадратные скобки, или [Сообщение] является объектом, содержащим хэш [Подробности]?   -  person Badger    schedule 27.12.2020
comment
нет, я думаю, это просто то, как вы получаете к ним доступ в конфигурации logstash. Думаю, что они с точками, когда я смотрю на них в кибане. Message.Detail.Readout.Value1   -  person Master Azazel    schedule 27.12.2020
comment
честно говоря, я не уверен, что посмотрю это в необработанном сообщении   -  person Master Azazel    schedule 27.12.2020
comment
я думаю, что это хэш, я посмотрел его в необработанном JSON, но я добавляю свои поля с помощью grok, поэтому я не уверен, будут ли они добавлены как хеш   -  person Master Azazel    schedule 27.12.2020


Ответы (1)


Вы должны использовать .each для перебора хеша [Message][Detail][Readout]. Ваш псевдокод установит значения на верхнем уровне. Чтобы перезаписать их, используйте

ruby {
    code => '
        readout = event.get("[Message][Detail][Readout]")
        if readout
            readout.each { |k, v|
                event.set("[Message][Detail][Readout][#{k}]", v.to_s.hex)
            }
        end
    '
}
person Badger    schedule 27.12.2020
comment
ваше предложение сработало как шарм; Спасибо! - person Master Azazel; 20.01.2021