2015-05-18 25 views
26

Bir ELK yığınına gelen günlük dosyalarım var. Üzerinde çeşitli mutasyonlar gerçekleştirmek için bir alanı (foo) kopyalamak istiyorum, ancak alan (foo) her zaman mevcut değildir.logstash alan var mı kontrol edin

foo yoksa, o zaman hala oluşturulan alır bar, ama nasıl bir saha var olduğu takdirde bir mutasyon gerçekleştirebilirsiniz literal dize

"%{foo}" atanır?

Böyle bir şey yapmaya çalışıyorum.

cevap

26

"foo" değişmez bir dizedir.

[foo] bir alandır. alan foo varsa

# technically anything that returns 'true', so good for numbers and basic strings: 
if [foo] { 
} 

# contains a value 
if [foo] =~ /.+/ { 
} 
+4

Bu işe yarayacak gibi görünüyor, ancak alan ['foo'] bir boole ise bu hata var. https://github.com/elastic/logstash/issues/1867 – spuder

+0

Sonuncu örnek numaralar için çalışmaz (Logstash 1.5.4). – Newerth

51

kontrol etmek için:

1) Sayısal tip alanları için kullanın:: boolean, string kullanımının gibi sayısal dışındaki türleri için

if ([foo]) { 
    ... 
} 

2)

if ("" in [foo]) { 
    ... 
} 
+0

Bu oldukça zarif bir çözümdür. Çok sezgisel – alfredocambera

+4

Ayrıca, şu şekilde olumsuzlanabilir: "if!" ("[Foo] içinde) {...}" – worldsayshi

+0

Eğer yapabilirsem +2'yi kazanırdım. Teşekkürler! –

11

Logstash 2.2.2'de ("" in [field]) yapısı benim için çalışmıyor gibi görünüyor.

if ![field] { } 

olmayan bir sayısal alanı için, yapar.

+0

1 aşağıda @ YVF cevabı harika çalıştı. [Field] 'notasyonundaki' ''aslında garip aralıklı sonuçlar verdi – darkwing