web-dev-qa-db-fra.com

Comment gérer plusieurs entrées hétérogènes avec Logstash?

Supposons que vous disposiez de 2 types de journaux très différents, tels que des journaux techniques et commerciaux, et que vous souhaitez:

  • les journaux techniques bruts doivent être routés vers un serveur graylog2 en utilisant une sortie gelf,
  • les journaux Json Business doivent être stockés dans un cluster elasticsearch à l’aide du fichier dédié elasticsearch_http sortie.

Je sais que avec Syslog-NG _ par exemple, le fichier de configuration permet de définir plusieurs entrées distinctes qui peuvent ensuite être traitées séparément avant d'être envoyées; ce que Logstash semble incapable de faire. Même si une instance peut être lancée avec deux fichiers de configuration spécifiques, tous les journaux utilisent le même canal et sont appliqués aux mêmes traitements ...

Devrais-je exécuter autant d'instances que j'ai différents types de journaux?

92
David

Devrais-je exécuter autant d'instances que j'ai différents types de journaux?

Non! Vous ne pouvez exécuter qu'une seule instance pour gérer différents types de journaux.

Dans le fichier de configuration logstash, vous pouvez spécifier chaque entrée avec différents type . Ensuite, dans le filtre, vous pouvez utiliser if pour distinguer différents traitements, et vous pouvez également utiliser à la sortie "if" pour une destination différente.

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

J'espère que cela peut vous aider :)

182
Ben Lim

J'ai utilisé des balises pour la saisie de plusieurs fichiers:

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}"
        }
    }
}
14
Robin Wang

Je pense que logstash ne peut pas lire plus de 2 fichiers dans la section Input. essayez le ci-dessous

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