Logstash: Bazı durumuna göre iç içe alanlar yeniden adlandırma

oy
0

Ben Amazonelasticsearch geçiş yaparken Elasticsearch içe yerleştirilmiş alanları yeniden adlandırmak çalışıyorum

Belgede, I) 1 değiştirmek değiştirme istediğiniz değeri için alan değer anahtar kelime değer alanı 2) değiştirin veri JSON türü varsa değer alanını standart değer değer alanı boyutu 15'ten fazla ise

 _source: {
          applicationid : appid,
          interactionId: 716bf006-7280-44ea-a52f-c79da36af1c5,
          interactionInfo: [
            {
              value: {edited:false},
              title: msgMeta
            },
            {
              title: msg,
              value: hello testing,
            },
            {
              title: testing,
              value: I have a text that can be done and changed only the size exist more than 20 so we applied value-standard ,
            }
          ],
          uniqueIdentifier: a21ed89c-b634-4c7f-ca2c-8be6f31ae7b3,
        }
      }

Nihai sonuç olmalıdır

 _source: {
          applicationid : appid,
          interactionId: 716bf006-7280-44ea-a52f-c79da36af1c5,
          interactionInfo: [
            {
              value-keyword: {edited:false},
              title: msgMeta
            },
            {
              title: msg,
              value: hello testing,
            },
            {
              title: testing,
              value-standard: I have a text that can be done and changed only the size exist more than 20 and so we applied value-standard  ,
            }
          ],
          uniqueIdentifier: a21ed89c-b634-4c7f-ca2c-8be6f31ae7b3,
        }
      }
Oluştur 24/10/2019 saat 12:02
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

) 2 için, bunu şöyle yapabilirsiniz:

filter {
    if [_source][interactionInfo][2][value] =~ /.{15,15}/ {

        mutate {
            rename => ["[_source][interactionInfo][2][value]","[_source][interactionInfo][2][value-standard]"]
        }
    }
}

Regex .{15,15}15 karakter uzunluğunda herhangi bir dize ile eşleşir. Alan 15 karakter uzunluğunda daha kısa olursa, regex eşleşmiyor ve mutate#renameuygulanmaz.

) 1 için, olası bir çözüm json filtresiyle alanı ayrıştırmak için çalışıyor olacağını ve hiçbir varsa _jsonparsefailureetiketi alanını yeniden adlandırın.

Cevap 24/10/2019 saat 17:14
kaynak kullanıcı

oy
0

Bunun için bir çözüm kurulmuştur. Ben her belgeyi yanı sıra Burada iç içe belgeyi kontrol etmek Logstash bir yakut filtresi kullandık yakut kodudur

require 'json'

def register(param)
end

def filter(event)
  infoarray = event.get("interactionInfo")
  infoarray.each {  |x|
      if x.include?"value"
         value = x["value"]
         if value.length > 15
           apply_only_keyword(x)
         end
       end
      if x.include?"value"
        value = x["value"]
         if validate_json(value)
           apply_only_keyword(x)
         end
       end
  }
event.set("interactionInfo",infoarray)
return [event]
end


def validate_json(value)
  if value.nil?
    return false
  end
  JSON.parse(value)
  return true
rescue JSON::ParserError => e
  return false
end

def apply_only_keyword(x)
  x["value-keyword"] = x["value"]
  x.delete("value")
  if x.include?"value-standard"
    x.delete("value-standard")
  end
  if x.include?"value-whitespace"
    x.delete("value-whitespace")
  end
end
Cevap 14/11/2019 saat 11:07
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more