2014-04-07 12 views
20

Tomcat günlük dosyalarına genel bakış için Logstash + Elasticsearch + Kibana kullanıyorum.Logstash: dosya adı bir alan olarak nasıl eklenir?

Her günlük girdisi için, geldiği dosyanın adını bilmem gerekiyor. Bunu bir alan olarak eklemek isterim. Bunu yapmanın bir yolu var mı? Ben biraz googled ettik ve sadece this SO question bulduk, ama cevap artık güncel değil. Ben logstash her seferinde yeniden yapılandırmak gerek sonra

input { 
    file { 
    type => "catalinalog" 
    path => [ "/path/to/my/files/catalina**" ] 
    add_field => { "server" => "prod1" } 
    } 
} 

Ama yeni bir olası vardır:

Şimdiye kadar gördüğüm tek çözüm bu kadar gibi farklı "add_field" ile olası her dosya adı için ayrı yapılandırma belirtmektir dosya adı. Daha iyi bir fikir?

cevap

35

Merhaba Sadece bunu yapmak için bir grok filtresi ekledim. Sadece dosya ismini yoluna almak istemedim, ancak bunu ihtiyaçlarınız için değiştirebilirsiniz.

durumda
filter { 
    grok { 
    match => ["path","%{GREEDYDATA}/%{GREEDYDATA:filename}\.log"] 
    } 
} 
+0

Cevabınız için teşekkürler :) Bu dosya adı INSIDE log dosyası içeriğine bakmıyor mu? – machinery

+2

Genellikle mesaj alanında grok ile çalışmazsınız, ancak logstash tarafından otomatik olarak eklenen özel bir alan olan yol alanını kullanırım. –

+0

Çok teşekkürler :) Çözümünüz çalışıyor - "{GREEDYDATA: dosyaadı}" önce yüzde işaretini ekledikten sonra. Lütfen cevabınızı güncelleyin ve çözüm olarak kabul ediyorum. Sadece "yol" alanının varlığından haberdar değildim. – machinery

1

Bir olay mesajı ve dosya adını birleştirmek istiyorum:

filter { 
grok { 
    match => { 
     message => "ERROR (?<function>[\S]*)" 
     } 
} 
grok { 
    match => { 
     path => "%{GREEDYDATA}/%{GREEDYDATA:filename}\.log" 
     } 
}} 

sonuç ElasticSearch içinde ('dosya' ve 'işlev' alanlarındaki odaklanmayı):

"_index": "logstash-2016.08.03", 
    "_type": "logs", 
    "_id": "AVZRyEI49-A6kyBCq6Yt", 
    "_score": 1, 
    "_source": { 
     "message": "27/07/16 12:16:18,321 ERROR blaaaaaaaaa.internal.com", 
     "@version": "1", 
     "@timestamp": "2016-08-03T19:01:33.083Z", 
     "path": "/home/admin/mylog.log", 
     "host": "my-virtual-machine", 
     "function": "blaaaaaaaaa.internal.com", 
     "filename": "mylog" 
    }