Logstash: Μετονομασία ένθετα πεδία που βασίζονται σε κάποια κατάσταση

ψήφοι
0

Προσπαθώ να μετονομάσετε τα ένθετα πεδία από Elasticsearch, ενώ μεταναστεύουν για να Amazonelasticsearch

Στο έγγραφο, θέλω να αλλάξω το 1) Αλλάξτε την τιμή πεδίου σε τιμή-κλειδί , αν το πεδίο τιμών έχει JSON είδος των δεδομένων 2) Αλλάξτε την τιμή πεδίου σε αξία-πρότυπο , αν το πεδίο τιμών έχει μέγεθος πάνω από 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,
        }
      }

το τελικό αποτέλεσμα θα πρέπει να είναι

 _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,
        }
      }
Δημοσιεύθηκε 24/10/2019 στις 12:02
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Για 2), μπορείτε να το κάνετε ως εξής:

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

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

Η τυπική έκφραση .{15,15}ταιριάζει με οποιαδήποτε συμβολοσειρά μήκους 15 χαρακτήρων. Αν το πεδίο είναι μικρότερη από ό, τι μήκος 15 χαρακτήρες, η τυπική έκφραση δεν ταιριάζει και mutate#renameδεν εφαρμόζεται.

Για 1), μια πιθανή λύση θα ήταν να προσπαθεί να αναλύσει το πεδίο με το φίλτρο JSON και αν δεν υπάρχει _jsonparsefailureετικέτα, να μετονομάσετε το πεδίο.

Απαντήθηκε 24/10/2019 στις 17:14
πηγή χρήστη

ψήφοι
0

Βασίζεται η λύση για αυτό. Έχω χρησιμοποιήσει ένα φίλτρο ρουμπίνι στο Logstash για να ελέγξετε την κάθε εγγράφου, καθώς και ένθετα έγγραφο Εδώ είναι ο κώδικας ρουμπίνι

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
Απαντήθηκε 14/11/2019 στις 11:07
πηγή χρήστη

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