2014-09-22 14 views
10

Bu yüzden, istek başına bazı günlük verilerini içeren istek başına bir JSON dosyası basan bir web platformum var. Ne zaman, sadece belirli düzeylerde, şeyler giriş yapmalıyım hakkında çeşitli kurallar yapılandırabilir ...JSON Dosyalarını Logstash + Elasticsearch + Kibana'ya Aktarın

Şimdi Logstash + Elasticsearch + Kibana3 yığını ile oynuyordum ve bir yol bulmayı çok istiyorum. Kibana'da bu kayıtları görmek için. Sorum şu: Logstash'ın bu tür dosyaları içe aktarmasının bir yolu var mı, yoksa bunun için özel bir giriş eklentisi mi yazmalıyım? Çevremde arama yaptım ve gördüklerim için, eklentiler Ruby ile yazılmış bir dil değil. LogStash, birçok eklenti sağladığı için farklı biçimleri ve kaynakları içe aktarabilir.

cevap

10

Logstash, çeşitli syslog dosyalarını JSON'a dönüştürmek ve bunları elasticsearch'e (veya grafit veya ...) yüklemek için kullanılan bir araçtır.

Dosyalarınız zaten JSON'da olduğundan, logstash'a ihtiyacınız yoktur. Curl kullanarak doğrudan elasticsearch'e yükleyebilirsiniz.

Kibana iyi çalışacak amacıyla Ancak

Import/Index a JSON file into Elasticsearch olduğuna bakın, JSON dosyaları minimumda olması gerekir.

  1. Düz - Kibana yuvalanmış JSON yapılarını grok değil. Basit bir anahtar/değer çiftine ihtiyacınız var.

  2. Tanımlanabilir bir zaman damgası edinin.

Ne JSON dosyaları arıyor öneriyoruz çıkışları logstash ve bu yapıyı eşleşecek şekilde JSON dosyaları masaj eğer görmeye. Bunu, JSON'u destekleyen gibi herhangi bir dilde yapabilirsiniz. jq programı, json'u bir formattan diğerine filtrelemek için çok kullanışlıdır.

Logstash biçimi - https://gist.github.com/jordansissel/2996677

jq - http://stedolan.github.io/jq/

+0

Logstash tek bir JSON girdisiyle çok sayıda dosyayı işleyemez mi?Aksi takdirde, şimdi 1 satırdan fazla varsa, curl kullanın veya Logstash'a içe aktarın. Kesinlikle tek satır dosyaları Logstash'ın bakış açısından farklı değil mi? –

+0

Logstash ve json dosyaları hakkında hiçbir şey söylemiyorum. Ben sadece eğer logstash istediğini yapamazsa ve eğer veri zaten JSON'da ise, logstash'ın ne yaptığını yapmak oldukça basittir. –

1

Aynı zamanda, nxlog, rsyslog, syslog-ng, flume, kafka, fluentd, vb. Gibi logstash günlükleri gönderebilen diğer günlük toplayıcı ve iletici araçları da vardır. Çoğu insanın nxlog'u windows üzerinde kullandığını duydum. linux eşit derecede iyi) düşük kaynak ayak izi nedeniyle ELK yığını ile birlikte. (Yasal Uyarı: Projeyle bağlantılı kulüpler)

14

Logstash dinamik dosyalarını işlemek için çok iyi bir araçtır. İşte

logstash kullanarak elasticsearch içine json dosyasını almak için yoludur:

yapılandırma dosyası: json olması gerekiyor

{"foo":"bar", "bar": "foo"} 
{"hello":"world", "goodnight": "moon"} 

Not: json dosyası

input 
{ 
    file 
    { 
     path => ["/path/to/json/file"] 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
     exclude => "*.gz" 
    } 
} 

filter 
{ 
    mutate 
    { 
     replace => [ "message", "%{message}" ] 
     gsub => [ 'message','\n',''] 
    } 
    if [message] =~ /^{.*}$/ 
    { 
     json { source => message } 
    } 

} 

output 
{ 
    elasticsearch { 
    protocol => "http" 
    codec => json 
    host => "localhost" 
    index => "json" 
    embedded => true 
    } 

    stdout { codec => rubydebug } 
} 

örnek bir satırda. Çok satırlı bir json dosyasını ayrıştırmak isterseniz, ilgili dosyalarınızı yapılandırma dosyanızda değiştirin:

input 
{ 
    file 
    { 
     codec => multiline 
     { 
      pattern => '^\{' 
      negate => true 
      what => previous     
     } 
     path => ["/opt/mount/ELK/json/*.json"] 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
     exclude => "*.gz" 
    } 
} 

filter 
{ 
    mutate 
    { 
     replace => [ "message", "%{message}}" ] 
     gsub => [ 'message','\n',''] 
    } 
    if [message] =~ /^{.*}$/ 
    { 
     json { source => message } 
    } 

} 
+0

İlk yapılandırma çalışmıyor. : response => {"create" => {"_ index" => "fb", "_type" => "günlükler", "_id" => "AVZUyqwOVPEDPgwGc4_k", "status" => 400, "error" => {"type" => "mapper_parsing_exception", "reason" => "ayrıştırılamadı", "emerg_by" => {"type" => "illegal_state_exception", "reason" => "Alan türlerini karıştırma: sınıf org. elasticsearch.index.mapper.core.StringFieldMapper $ StringFieldType! = class org.elasticsearch.index.mapper.internal.IdFieldMapper $ IdFieldType alandaki _id "}}}},: level =>: warn} – KevinOelen