Найти определенное слово в значениях, разделенных трубами - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь выяснить, как сопоставить определенное слово в сообщениях, разделенных трубами.

Пример: 20190614 | 3 | method | user | /test/xyz/1.1 | 400 | 0

Как проверить каждое сообщение, которое начинается с "/ test" в 5-м значении?

Ответы [ 3 ]

2 голосов
/ 26 июня 2019

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

n = 5
message = '20190614|3|method|user|/test/xyz/1.1|400|0'
nth_value = message.split('|')[n - 1]
puts 'Matching' if nth_value =~ /^\/test/

Преобразуйте это в функцию и измените ее в соответствии с вашими требованиями.необходимо.

2 голосов
/ 26 июня 2019

Я не совсем уверен насчет желаемого результата, скорее всего, мы можем начать с выражения, похожего на:

^(.+?)\|(.+?)\|(.+?)\|(.+?)\|\/test\/.+?\|(.+?)\|.+$

и проверьте на test.

В этой демоверсии объяснено выражение, если вам может быть интересно.

Пример

re = /^(.+?)\|(.+?)\|(.+?)\|(.+?)\|\/test\/.+?\|(.+?)\|.+$/m
str = '20190614|3|method|user|/test/xyz/1.1|400|0
20190614|3|method|user|/testt/xyz/1.1|400|0'

str.scan(re) do |match|
    puts match.to_s
end
0 голосов
/ 27 июня 2019

В Logstash, если вы хотите фильтровать сообщения, которые начинаются с "/ test" в 5-м значении, вы можете сделать это (используя регулярное выражение от Emma):

filter {
  if [message] =~ /^(.+?)\|(.+?)\|(.+?)\|(.+?)\|\/test\/.+?\|(.+?)\|.+$/ {
    ...
  }
}

Cf https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#conditionals для получения дополнительной информации.

...