Logstash: Redenumirea câmpurile imbricate în funcție de anumite condiții

voturi
0

Am încercat să-l redenumiți câmpurile imbricate din Elasticsearch în timp ce migrarea la Amazonelasticsearch

În documentul, vreau să schimbe 1) Modificați valoarea câmpului la valoarea de cuvinte cheie în cazul în care câmpul de valoare are tipul de date JSON 2) Modificați valoarea câmpului la valoarea standard în cazul în care câmpul de valoare are dimensiuni mai mult de 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,
        }
      }

rezultatul final ar trebui să fie

 _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,
        }
      }
Întrebat 24/10/2019 la 12:02
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Pentru 2), o puteți face în felul următor:

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

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

Regex se .{15,15}potrivește cu orice șir de 15 caractere. În cazul în care câmpul este mai scurt de 15 de caractere, regex nu se potrivește și mutate#renamenu se aplică.

Pentru 1), o posibilă soluție ar fi încercarea de a analiza câmpul cu filtrul JSON și dacă nu există nici o _jsonparsefailureetichetă, redenumiți câmpul.

Publicat 24/10/2019 la 17:14
sursa de către utilizator

voturi
0

Fondata solutia pentru aceasta. Am folosit un filtru de rubin în Logstash pentru a verifica fiecare document precum și documentul imbricate Aici este codul rubin

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
Publicat 14/11/2019 la 11:07
sursa de către utilizator

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