Hoe om te gaan met meerdere heterogene invoer met Logstash?

Stel dat u 2 zeer verschillende soorten logboeken hebt, zoals technische en zakelijke logboeken, en dat u het volgende wilt:

  • onbewerkte technische logboeken worden doorgestuurd naar een greylog2-server met behulp van een gelf-uitvoer,
  • json-bedrijfslogboeken worden opgeslagen in een elasticsearch-cluster met behulp van de speciale elasticsearch_http-uitvoer.

Ik weet dat met bijvoorbeeld Syslog-NGhet configuratiebestand het mogelijk maakt om verschillende afzonderlijke inputs te definiëren die vervolgens afzonderlijk kunnen worden verwerkt voordat ze worden verzonden; wat Logstashniet lijkt te kunnen doen. Zelfs als één instantie kan worden gestart met twee specifieke configuratiebestanden, gebruiken alle logboeken hetzelfde kanaal en worden dezelfde verwerkingen toegepast …

Moet ik zoveel instanties uitvoeren als ik verschillende soorten logboeken heb?


Antwoord 1, autoriteit 100%

Moet ik zoveel instanties uitvoeren als ik verschillende soorten logboeken heb?

Nee! U kunt slechts één instantie uitvoeren om verschillende soorten logboeken te verwerken.

In het logstash-configuratiebestand kunt u elke invoer specificeren met verschillende type.
Dan kun je in het filter ifverschillende verwerkingen te onderscheiden,
en ook bij de uitgang kun je de “if”-uitvoer naar een andere bestemming gebruiken.

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
    }
}

Ik hoop dat dit je kan helpen 🙂


Antwoord 2, autoriteit 9%

Ik heb tags gebruikt voor invoer van meerdere bestanden:

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}"
        }
    }
}

Antwoord 3

Ik denk dat logstash niet meer dan 2 bestanden in het invoergedeelte kan lezen. probeer het onderstaande

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

Other episodes