Logstash ile birden fazla heterojen girdi nasıl işlenir?


95

Diyelim ki teknik ve iş günlükleri gibi çok farklı 2 tür günlüğünüz var ve istediğiniz:

  • ham teknik günlükler bir gelfçıktı kullanılarak graylog2 sunucusuna yönlendirilebilir ,
  • json iş günlükleri, adanmış elasticsearch_httpçıktı kullanılarak bir elasticsearch kümesinde depolanabilir .

Syslog-NGÖrneğin, yapılandırma dosyasının, gönderilmeden önce ayrı ayrı işlenebilecek birkaç farklı girdinin tanımlanmasına izin verdiğini biliyorum ; ne Logstashyapamaz görünüyor. İki özel yapılandırma dosyasıyla bir örnek başlatılabilse bile, tüm günlükler aynı kanalı alır ve aynı işlemler uygulanır ...

Farklı günlük türlerine sahip olduğum kadar örnek çalıştırmalı mıyım?


2
Ben Lim'in doğru cevabını kabul etmelisiniz!
Ben Wheeler

Yanıtlar:


191

Farklı günlük türlerine sahip olduğum kadar örnek çalıştırmalı mıyım?

Hayır! Farklı günlük türlerini işlemek için yalnızca bir örnek çalıştırabilirsiniz.

Logstash yapılandırma dosyasında, her bir girişi farklı tipte belirtebilirsiniz . Daha sonra filtrede , farklı işlemeyi ayırmak için if kullanabilirsiniz ve ayrıca çıktıda farklı hedefe "if" çıktısını kullanabilirsiniz.

input {
    file {
            type => "technical"
            path => "/home/technical/log"
    }
    file {
            type => "business"
            path => "/home/business/log"
    }
} 
filter {
    if [type] == "technical" {
            # processing .......
    }
    if [type] == "business" {
            # processing .......
    }
}
output {
    if [type] == "technical" {
            # output to gelf
    }
    if [type] == "business" {
            # output to elasticsearch
    }
}

Umarım bu size yardımcı olabilir :)


1
Ayrıca , filtre ve çıktı tanımlarında typeözniteliği (aynı type => "value"sözdizimiyle) kullanabilirsiniz; bu, yapılandırma dosyasındaki fazladan biçimlendirmeyi biraz azaltmalıdır. Örnek: gist.github.com/fairchild/3030472 Belgelere göre: Bu girdi tarafından işlenen tüm olaylara bir 'tür' alanı ekleyin. Tipler esas olarak filtre aktivasyonu için kullanılır. Tür, olayın bir parçası olarak saklanır, böylece türü web arayüzünde aramak için de kullanabilirsiniz.
Tony Cesaro

5
Görünüşe göre Ben'in sağladığı şey bunu yapmanın yeni yolu. Bir type => "value"çıktıda kullandığımda , şu mesaj görüntülendi: Standart çıktıda ayarlanmış "Kullanımdan kaldırılmış bir yapılandırma ayarı kullanıyorsunuz" türü ". Kullanımdan kaldırılan ayarlar çalışmaya devam edecek, ancak gelecekte logstash'ten kaldırılması planlanıyor. bu aynı davranış yeni koşul ifadelerinde olduğu gibi:. if [type] == "sometype" { stdout { ... } }" Önceki yorumumu geri çekiyorum. :)
Tony Cesaro

typeGirişte zaten bir tür alanı varsa özniteliğin uygulanmayacağını unutmayın . Bu, geçersiz kılınmayan ve belgelenen özel bir niteliktir. tagsadd_fieldtype
Elastic'te

@BornToCode, tam olarak anlamıyorum. Ben'in kodunda bir sorun olduğunu mu söylüyorsunuz? Veya günlük yolları aynı dosya olsaydı işe yaramayacağını mı? İşe yaramadığı senaryo nedir?
Ben Wheeler

2
@BenLim OP cevabınızı kabul etmedi ama ben çok faydalı buldum ve size olumlu oy verdim.
bigbadmouse

16

Birden çok dosya girişi için etiket kullandım:

input {
    file {
        type => "java"
        path => "/usr/aaa/logs/stdout.log"
        codec => multiline {
            ...
        },
        tags => ["aaa"]
    }

    file {
        type => "java"
        path => "/usr/bbb/logs/stdout.log"
        codec => multiline {
                ...
        }
        tags => ["bbb"]
    }
}
output {
    stdout {
        codec => rubydebug
    }
    if "aaa" in [tags] {
        elasticsearch {
            hosts => ["192.168.100.211:9200"]
            index => "aaa"
            document_type => "aaa-%{+YYYY.MM.dd}"
        }
    }

    if "bbb" in [tags] {
        elasticsearch {
            hosts => ["192.168.100.211:9200"]
            index => "bbb"
            document_type => "bbb-%{+YYYY.MM.dd}"
        }
    }
}

Bu, kabul edilen cevaptan daha iyidir: logstash'te birden çok dosya atışı girdisine izin verir. Bu tür durumlarda, "type" özelliği "log" olarak ayarlanır ve değiştirilemez.
Régis B.

Ancak bu, son etiketi (bbb) olan etiketlerin üzerine yazılmıyor mu? Ve sonra tekrar, if statememt'te, etiketler bir dizi veya tek dizge olsaydı, her iki IF da çalışırdı. Yani mantıksal olarak bu yanlış, ama belki logstash'in if's içinde farklı bir mantığı var
meso_2600

0

Logstash'in Giriş bölümünde 2 dosyadan fazlasını okuyamayacağını düşünüyorum. aşağıdakileri deneyin

input {
    file {
            type => "technical"
            path => "/home/technical/log"
    }
    file {
            type => "business"
            path => "/home/business/log"
    }
 file {
            type => "business1"
            path => "/home/business/log1"
    }
} 

Evet, aynı 'sorunla' karşılaş
meso_2600
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.