2015-03-01 25 views
6

Yeni bir kullanıcıyım, ELK stack. UWSGI'yi sunucum olarak kullanıyorum. Grows kullanarak benim uwsgi günlükleri ayrıştırmak ve sonra bunları analiz etmeliyim.Logstash Growst uwsgi günlükleri için filtre

İşte benim günlükleri biçimi şöyledir: -

[pid: 7731|app: 0|req: 357299/357299] ClientIP() {26 vars in 511 bytes} [Sun Mar 1 07:47:32 2015] GET /?file_name=123&start=0&end=30&device_id=abcd&verif_id=xyzsghg => generated 28 bytes in 1 msecs (HTTP/1.0 200) 2 headers in 79 bytes (1 switches on core 0) 

benim filtreyi oluşturmak için this link kullanılan, ancak bilgilerin çoğunu ayrıştırmak etmedi.

yukarıdaki bağlantısı tarafından oluşturulan filtre Burada

%{SYSLOG5424SD} %{IP}() {26 vars in 511 bytes} %{SYSLOG5424SD} GET %{URIPATHPARAM} => generated 28 bytes in 1 msecs (HTTP%{URIPATHPARAM} 200) 2 headers in 79 bytes (1 switches on core 0) 

benim logstash-conf dosyasıdır. tarihin doğru biçimlendirilmiş

{ 
     "message" => "[pid: 7731|app: 0|req: 357299/357299] ClientIP() {26 vars in 511 bytes} [Sun Mar 1 07:47:32 2015] GET /?file_name=123&start=0&end=30&device_id=abcd&verif_id=xyzsghg => generated 28 bytes in 1 msecs (HTTP/1.0 200) 2 headers in 79 bytes (1 switches on core 0)", 
     "@version" => "1", 
    "@timestamp" => "2015-03-01T07:57:02.291Z", 
      "host" => "cube26-Inspiron-3542", 
      "tags" => [ 
     [0] "_grokparsefailure" 
    ] 
} 

- Bu conf dosyası ile logstash çalışan üzerine

input { stdin { } } 

filter { 
    grok { 
    match => { "message" => "%{SYSLOG5424SD} %{IP}() {26 vars in 511 bytes} %{SYSLOG5424SD} GET %{URIPATHPARAM} => generated 28 bytes in 1 msecs (HTTP%{URIPATHPARAM} 200) 2 headers in 79 bytes (1 switches on core 0)" } 
    } 
    date { 
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
    } 
} 

output { 
    stdout { codec => rubydebug } 
} 

, ben belirten bir hata mesajı alabilirsiniz. Nasıl böyle benim query parameters(filename, start,end, deviceid etc) ve ClientIP Ayrıca Response code vb

, orada olduğu gibi, benim günlükleri diğer bilgileri ayıklamak yapmak herhangi yerleşik UWSGI günlük ayrıştırıcı kullanılabilecek böyle apache ve syslog için inşa biri olarak?

DÜZENLEME başıma bu yazdım, ama aynı hatayı atar:

%{SYSLOG5424SD} %{IP:client_ip}() {%{NUMBER:vars} vars in %{NUMBER:bytes} bytes} %{SYSLOGTIMESTAMP:date} %{WORD:method} %{URIPATHPARAM:request} => generated %{NUMBER:generated_bytes} bytes in {NUMBER:secs} msecs (HTTP/1.0 %{NUMBER:response_code}) %{NUMBER:headers} headers in %{NUMBER:header_bytes} (1 switches on core 0) 

DÜZENLEME 2

Sonunda kendim çatlak edebiliyorum. Ben

  • **

    1. ?? grop filtreyi log uwsgi herhangi bir varsayılan vardır:

      \[pid: %{NUMBER:pid}\|app: %{NUMBER:app}\|req: %{NUMBER:req_num1}/%{NUMBER:req_num2}\] %{IP:client_ip} \(\) \{%{NUMBER:vars} vars in %{NUMBER:bytes} bytes\} %{SYSLOG5424SD} %{WORD:method} /\?file_name\=%{NUMBER:file_name}\&start\=%{NUMBER:start}\&end\=%{NUMBER:end} \=\> generated %{NUMBER:generated_bytes} bytes in %{NUMBER:secs} msecs \(HTTP/1.0 %{NUMBER:response_code}\) %{NUMBER:headers} headers in %{NUMBER:header_bytes} 
      

      Ama sorularım hala kalır: Yukarıdaki günlüğü için Grok filtresi olacak Farklı sorgu parametreleri için farklı eşlemeler uygulanmaktadır. Grok'da farklı sorgu parametrelerini tek başına getiren herhangi bir şey var mı?

  • cevap

    6

    Ben sorgu parametrelerini almak için çözüm bulundu: -

    İşte

    benim son yapılandırma: - günlük satırında için

    [pid: 7731|app: 0|req: 426435/426435] clientIP() {28 vars in 594 bytes} [Mon Mar 2 06:43:08 2015] GET /?file_name=wqvqwv&start=0&end=30&device_id=asdvqw&verif_id=qwevqwr&lang=English&country=in => generated 11018 bytes in 25 msecs (HTTP/1.0 200) 2 headers in 82 bytes (1 switches on core 0) 
    

    yapılandırma

    input { stdin { } } 
    
    filter { 
        grok { 
        match => { "message" => "\[pid: %{NUMBER}\|app: %{NUMBER}\|req: %{NUMBER}/%{NUMBER}\] %{IP} \(\) \{%{NUMBER} vars in %{NUMBER} bytes\} %{SYSLOG5424SD:DATE} %{WORD} %{URIPATHPARAM} \=\> generated %{NUMBER} bytes in %{NUMBER} msecs \(HTTP/1.0 %{NUMBER}\) %{NUMBER} headers in %{NUMBER}" } 
        } 
        date { 
        match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
        } 
        kv { 
        field_split => "&? " 
        include_keys => [ "file_name", "device_id", "lang", "country"] 
        } 
    } 
    
    
    output { 
        stdout { codec => rubydebug } 
        elasticsearch { host => localhost } 
    } 
    
    olduğunu
    3

    Çözümünüzün HTTP/1.1 desteği olmadığını gördüm. Onu tamir ettim ve değişkenler adını da ekledim.

    grok { 
        match => { "message" => "\[pid: %{NUMBER:pid}\|app: %{NUMBER:id}\|req: %{NUMBER:currentReq}/%{NUMBER:totalReq}\] %{IP:remoteAddr} \(%{WORD:remoteUser}?\) \{%{NUMBER:CGIVar} vars in %{NUMBER:CGISize} bytes\} %{SYSLOG5424SD:timestamp} %{WORD:method} %{URIPATHPARAM:uri} \=\> generated %{NUMBER:resSize} bytes in %{NUMBER:resTime} msecs \(HTTP/%{NUMBER:httpVer} %{NUMBER:status}\) %{NUMBER:headers} headers in %{NUMBER:headersSize} bytes %{GREEDYDATA:coreInfo}" } 
    } 
    date { 
        match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
    } 
    
    : Ref

    İşte benim grok yapılandırma var