Logstash: átnevezése beágyazott mezőket alapján néhány feltétel

szavazat
0

Próbálom átnevezésére beágyazott mezőket Elasticsearch miközben vándorolnak Amazonelasticsearch

A dokumentumban azt akarja változtatni a 1) Változás az érték mező értéket kulcsszó , ha az érték mező JSON adatok típusát 2) Módosítsa a értéke mező érték szabványos , ha az érték mező mérete több mint 15

 _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,
        }
      }

A végeredmény legyen

 _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,
        }
      }
A kérdést 24/10/2019 12:02
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

2), meg tudod csinálni, mint ez:

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

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

A regex .{15,15}bármilyen karakterláncot 15 karakter hosszú lehet. Ha a mező rövidebb, mint 15 karakter hosszú, a regex nem egyezik, és a mutate#renamenem alkalmazzák.

1), az egyik lehetséges megoldás az lenne, hogy megpróbálja elemezni a mezőt a JSON szűrőt és ha nincs _jsonparsefailurecímke, nevezze át a területen.

Válaszolt 24/10/2019 17:14
a forrás felhasználó

szavazat
0

Megalapította a megoldás ez. Én egy rubin szűrő Logstash hogy ellenőrizze minden egyes dokumentum, valamint beágyazott dokumentum Itt látható a rubin kód

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
Válaszolt 14/11/2019 11:07
a forrás felhasználó

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