2016-05-18 39 views
5

Tam eşlemeye çalıştığım özellik, "onaylanmamış" kullanıcı sayısını görüntüleyen kibana'da bir metrik oluşturmaktır. Bir kullanıcı kaydettiğinde gönderilen bir günlük gönderir, ardından bir kullanıcı doğrulandığında bir günlük gönderir.İfadede kullanılan [] ifadede kullanılan

İstediğim sayım kayıtlı sayı ile onaylanan numara arasındaki farktır.

Kibana'da böyle bir matematik işlemi yapamıyorum, bu yüzden bir geçici çözüm buldum: Bir kullanıcı kaydettiğinde 1'e eşit olan "onaylanmamış" adında bir "komut dosyası" ekledim ve bir kullanıcı hesabını doğruladığında -1 . "Doğrulanmamış" alanın toplamı, geçersiz kılınan kullanıcıların sayısı olmalıdır. doc['ctxt_code'].value == 1 ? 1 : doc['ctxt_code'].value == 2 ? -1 : 0

ile:

Bu benim metne alanda tanımlanan script doğrulanmış günlüğüne olarak kayıt günlüğüne olarak

  • ctxt_code 1

  • ctxt_code 2

This se Tüm günlüklerimde bir "ctxt_code" olduğunda tup iyi çalışır, ancak bu alanda olmadan bir günlük itildiğinde Kibana aşağıdaki hata atıyor: Kibana diyor çünkü ben bu hatayı anlayamıyorum

Field [ctxt_code] used in expression does not exist in mappings kibana error

: böyledir

If a field is sparse (only some documents contain a value), documents missing the field will have a value of 0

.

Herkesin bir ipucu var mı?

+0

, sen Elasticsearch fransız forumunda bize yardımcı olabilir: https://discuss.elastic.co/t/kibana-probleme-de-scripted-field-qui-nexiste-soit-disant-pas-dans-le-mapping/50618 – lenybernard

+0

Haritalamalarda "ctxt_code" alanının bulunduğundan emin misiniz? tüm logstash endekslerinin Son yedi gün içinde çalıştığınız ekran görüntüsünün sağ üst köşesinde, son yedi güne ait logstash indislerinin oluşturulan haritalamada 'ctxt_code' alanına sahip olduğundan emin olabilir misiniz? – Val

+0

Haber yok iyi haber? – Val

cevap

2

ctxt_code alanı olmaksızın günlüklere sahip olmak ... ama Bu alan için dizinlerinizde bir eşleme olması gerekir. logstash-* ile birden çok endeks sorguladığınızı görüyorum, bu yüzden muhtemelen sahip olmayan birisine vuruyorsunuz.

Tüm dizinlerde alanınız için bir eşleme ekleyebilirsiniz. Sadece Sense gidip bunu kullanın:

PUT logstash-*/_mappings/[your_mapping_name] 
{ 
    "properties": { 
    "ctxt_code": { 
     "type": "short",   // or any other numeric type, including dates 
     "index": "not_analyzed" // Only works for non-analyzed fields. 
    } 
    } 
} 

Eğer komut satırından bunu yapabilir tercih edin: Eğer fransız iseniz CURL -XPUT 'http://[elastic_server]/logstash-*/_mappings/[your_mapping_name]' -d '{ ... same JSON ... }'