2016-04-06 17 views
0

değerleri sağladığında, 'tip' anahtarının çarpışmasından kaçının. Bir dosyayı logstash içine yüklemek için bir pipeline yazmaya çalışıyorum. Kurulumum, giriş bölümünde Run multiple independent logstash config files with input,filter and output'a type alanını belirtmeyi gerektirir. Ne yazık ki kaynak veriler zaten alan type içerir ve kaynak verilerinden gelen değer giriş yapılandırmasından sağlanan değer ile çelişiyor gibi görünüyor.Her iki olay ve logstash girdisi

kaynak verileri aşağıdaki

[ 
    {"key1":"obj1", "type":"looks like a bad choose for a key name"}, 
    {"key1":"obj2", "type":"you can say that again"} 
] 

My boru hattı type sağlanan değere ayarlandığı için çağrılan asla aşağıdaki

input { 
    exec { 
    command => "cat /path/file_containing_above_json_array.txt" 
    codec => "json" 
    type => "typeSpecifiedInInput" 
    interval => 3600 
    } 
} 

output { 
    if[type] == "typeSpecifiedInInput" { 
    stdout { 
     codec => rubydebug 
    } 
    } 
} 

çıktı benziyor gibi bir json dizi içerir Giriş bölümünden sağlanan değer yerine kaynak verileri.

Bu çakışmayı önlemek için giriş boru hattını nasıl kurabilirim? Nathan

cevap

1

girişiniz yerine 'türü' yeniden yeni bir alan oluşturun. Exec {} girişinde add_field kullanılabilir.

+0

Öneriniz için teşekkürler. İşe yaradı. Önerilerinizi kullanarak yanıtı tamamlanmış boru hattıyla güncelledim –

0

type yerine add_field kullanan son boru hattı aşağıdadır. Belgeyi temizlemek için bir filtre aşaması eklenmiştir, böylece type alanı, ElasticSearch (class of similar documents) içine yazmak için gerekli beklenen değeri içerir. Orijinal JSON belgesindeki type değeri, typeSpecifiedFromDoc anahtarında geçerlidir. Mutasyon adımı, orijinal değeri typeSpecifiedFromDoc alanı olarak eklenmeden önce değiştirmenin type etkilemeyeceği şekilde ayrı aşamalara ayrılmalıdır.

input { 
    exec { 
    command => "cat /path/file_containing_above_json_array.txt" 
    codec => "json" 
    add_field => ["msgType", "typeSpecifiedInInput"] 
    interval => 3600 
    } 
} 

filter { 
    if[msgType] == "typeSpecifiedInInput" { 
    mutate { 
     add_field => ["typeSpecifiedFromDoc", "%{type}"] 
    } 
    mutate { 
     replace => ["type", "%{msgType}"] 
     remove_field => ["msgType"] 
    } 
    } 
} 

output { 
    if[type] == "typeSpecifiedInInput" { 
    stdout { 
     codec => rubydebug 
    } 
    } 
}