Étant donné que vous essayez de transmettre les fichiers journaux , vous devrez peut-être utiliser le plugin d'entrée file pour récupérer un fichier ou un nombre x de fichiers d'un chemin donné. Ainsi, un input
de base pourrait ressembler à quelque chose comme ceci:
input {
file {
path => "/your/path/*"
exclude => "*.gz"
start_position => "beginning"
ignore_older => 0
sincedb_path => "/dev/null"
}
}
Ce qui précède est juste un échantillon pour vous reproduire. Ainsi, une fois que vous avez les fichiers et que vous commencez à les traiter ligne par ligne, vous pouvez utiliser le filtre grok afin de faire correspondre les mots-clés de votre fichier journal. Un filtre à échantillon pourrait ressembler à ceci:
grok {
patterns_dir => ["/pathto/patterns"]
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:logsource} %{SYSLOGPROG}: + %{SRCFILE:srcfile}:%{NUMBER:linenumber} where SRCFILE is defined as [a-zA-Z0-9._-]+" }
}
Vous pourriez avoir à utiliser différents filtres si vous avez des différents types de journaux imprimés dans un seul fichier OU vous pourriez avoir dans la même ligne avec un ,
valeurs séparées par des virgules. Quelque chose comme:
grok {
match => { "message" => [
"TYPE1,%{WORD:a1},%{WORD:a2},%{WORD:a3},%{POSINT:a4}",
"TYPE2,%{WORD:b1},%{WORD:b2},%{WORD:b3},%{WORD:b4}",
"TYPE3,%{POSINT:c1},%{WORD:c2},%{POSINT:c3},%{WORD:c4}" ]
}
}
Et alors peut-être vous pourriez jouer avec le message
, puisque vous avez toutes les valeurs que vous aviez besoin juste à l'intérieur. J'espère que cela aide!