2014-04-04 18 views
23

LogStash için yeni. Log4J'de bir Java uygulamasından yazılan bazı günlükler var. Bu kayıtları ElasticSearch'e almaya çalışıyorum. Hayatım boyunca, tutarlı bir şekilde çalışmasını sağlayamıyorum. Şu anda, aşağıdaki logstash yapılandırmayı kullanıyorum:LogStash ile Log4J'yi Kullanma

input { 
    file { 
    type => "log4j" 
    path => "/home/ubuntu/logs/application.log" 
    } 
} 
filter { 
    grok { 
    type => "log4j" 
    add_tag => [ "ApplicationName" ] 
    match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" ] 
    } 
} 
output { 
    elasticsearch { 
    protocol => "http" 
    codec => "plain" 
    host => "[myIpAddress]" 
    port => "[myPort]" 
    } 
} 

Bu konfigürasyon vurmak ya da özledim gibi görünüyor. Neden olduğundan emin değilim. Mesela iki mesajım var. Biri çalışıyor, diğeri ayrıştırma hatası veriyor. Yine de neden emin değilim.

Tags     Message 
------     ------- 
["_grokparsefailure"] 2014-04-04 20:14:11,613 TRACE c.g.w.MyJavaClass [pool-2- 
         thread-6] message was null from https://domain.com/id-1/env- 
         MethodName 

["ApplicationName"] 2014-04-04 20:14:11,960 TRACE c.g.w.MyJavaClass [pool-2- 
         thread-4] message was null from https://domain.com/id-1/stable- 
         MethodName 

[ "ApplicationName"] timestamp ve level benim özel alanlar vardır bir kez: Burada mesajları ve ilgili sonuçlardır. Ancak, ["_grokparsefailure"] ile giriş, özel alanlara sahip DEĞİLDİR. Garip parça, kütükler yukarıdaki mesaj sütununda gösterildiği gibi hemen hemen aynıdır. Bu gerçekten kafamı karıştırıyor, ama sorunun ne olduğunu nasıl anlayacağımı bilmiyorum.

  • Damgası
  • Giriş mesajı
  • Makine Adı
  • Konu
    • Kayıt Düzeyi: Herkes ben logstash içine alma log4j günlükleri kullanmak ve tutarlı aşağıdaki alanları nasıl alabilirim biliyor mu

      Verebileceğiniz herhangi bir yardım için teşekkür ederiz. Sadece günlük seviyesi, zaman damgası ve günlük mesajı bile olsa, BÜYÜK bir yardım olurdu. İçtenlikle takdir ediyorum!

    +3

    i göremiyorum nasıl grok desen hiç uyuşmuyor. % {LOGLEVEL: level} 'dan önce iki alanınız var. Değişken sayıda boşluk ile uğraşmak zorundaysanız, bir veya daha fazla boşlukla eşleşen boşluk yerine \ s + kullanın ve grok hata ayıklayıcıda +1 – Alcanzar

    cevap

    22

    Logstash ve log4j soket ekleyicisi için log4j soket dinleyicisini kullanmanızı öneririm.

    Logstash conf:

    input { 
        log4j { 
        mode => server 
        host => "0.0.0.0" 
        port => [logstash_port] 
        type => "log4j" 
        } 
    } 
    output { 
        elasticsearch { 
        protocol => "http" 
        host => "[myIpAddress]" 
        port => "[myPort]" 
        } 
    } 
    

    log4j.properties:

    fazla bilgi onların Log4j girişi için logstash dokümanlarında var
    log4j.rootLogger=[myAppender] 
    log4j.appender.[myAppender]=org.apache.log4j.net.SocketAppender 
    log4j.appender.[myAppender].port=[log4j_port] 
    log4j.appender.[myAppender].remoteHost=[logstash_host] 
    

    : http://logstash.net/docs/1.4.2/inputs/log4j

    +0

    cevabını veririm Sizinle aynı öneride bulunun, ama şu anda, gönderilecek mesajların miktarı oldukça büyük olduğunda sorun yaşamaya başlıyorum .. log4j olaylarının bir TCP bağlantısından okunabileceğini aklınızda bulundurun: – alicia

    +0

    Log4j_port log4j.properties dosyasında bence logstash_port olmalıdır – imesh

    +0

    '[logstash_host]' localhost mu olmalı? ip adresini belirtmek zorunda mıyız yoksa hostname yeterli mi? – AbtPst