101 votes

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

Supposons que vous ayez deux types de journaux très différents, à savoir des journaux techniques et des journaux d'entreprise, et que vous vouliez.. :

  • les journaux techniques bruts sont acheminés vers un serveur graylog2 à l'aide d'une gelf sortie,
  • Les journaux d'entreprise json sont stockés dans un cluster elasticsearch à l'aide de l'outil de gestion des journaux d'entreprise dédié. elasticsearch_http sortie.

Je sais qu'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 distribuées ; ce qui Logstash semble incapable de le faire. Même si une instance peut être initiée avec deux fichiers de configuration spécifiques, tous les logs prennent le même canal et sont appliqués les mêmes traitements ...

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

198voto

Ben Lim Points 2543

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

Non ! Vous ne pouvez utiliser qu'une seule instance pour traiter différents types de journaux.

Dans le fichier de configuration de logstash, vous pouvez spécifier chaque entrée avec des paramètres différents. type . Ensuite, dans le filtre, vous pouvez utiliser si à un traitement distinct et différent, et aussi à la sortie, vous pouvez utiliser "si" la sortie vers 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 pourra vous aider :)

18voto

Robin Wang Points 385

J'ai utilisé des balises pour l'entrée de fichiers multiples :

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

3voto

Njal Karevoll Points 301

Auparavant, il était possible d'utiliser des balises avec les options de configuration includes et excludes pour différencier les entrées provenant de différentes sources, mais cela a été déprécié récemment, et la meilleure façon de procéder est simplement d'exécuter plusieurs instances Logstash en utilisant des configurations différentes (c'est-à-dire différentes gelf ports) à cette fin.

Cela présente l'avantage de ne pas abandonner temporairement toutes les nouvelles entrées de journal (dans le cas d'entrées non tamponnées telles que gelf etc.) lors de la modification de la configuration / de la mise à niveau et du redémarrage de l'une des instances de Logstash.

0voto

KM Prak Points 127

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X