J'ai installé Logstash pour analyser les fichiers Apache. Il m'a fallu pas mal de temps pour obtenir les bons paramètres et j'ai toujours essayé de vrais journaux. J'ai remarqué (comme le dit la documentation) que logstash "se souvient" où il se trouvait dans un fichier. Maintenant, mes réglages sont corrects et j'aimerais que Logstash «oublie». Cela semble plus difficile que moi. J'ai déjà fait ce qui suit:
utilisé:
start_position => "beginning"
a supprimé le dossier "data" complet d'elastissearch (et l'a arrêté en premier)
regardé quels fichiers ont été ouverts par logstash avec
lsof -p PID
et supprimé tout ce qui était prometteur (dans mon cas/tmp/jffi*.tmp
)
Pourtant, Logstash n'oublie pas et analyse uniquement les fichiers "frais" dans le dossier où se trouvent les journaux
Des idées?
/opt/logstash/data/plugins/inputs/file
Réponses:
Par défaut, logstash écrit la dernière position sur un fichier journal qui réside généralement dans
$HOME/.sincedb
. Logstash peut être dupé en pensant qu'il n'a jamais analysé le fichier journal en spécifiant/dev/null
commesincedb_path
.Voici la partie de la documentation Fichier d'entrée .
Exemple de configuration
la source
sincedb_path => "NUL"
pour obtenir le même effet. Détails iciingnore_older => 0
pour que logstash les prenne quelle que soit la date. Par défaut, si les fichiers sont plus anciens, 24h sera ignoré.ignore_older => 0
travaux dans logstash! J'ai été coincé par le même problème que le questionneur. Semble être une découverte non évidente! (googler "ignore_older" et "logstash" n'affiche que des pages sur filebeat, je n'ai trouvé aucune trace de la façon de gérer cela dans logstash)ignore_older
dans votre configuration filebeat, filbeat est obligé de lire à nouveau le fichier entier elastic.co/guide/en/beats/filebeat/current/...L'historique de stockage du fichier du plugin de "tailing" dans le fichier sincedb, par défaut: sous $ HOME / .sincedb *, voir http://logstash.net/docs/1.3.3/inputs/file#sincedb_path
Le fichier since db contient une ligne ressemblant à:
Donc, si vous souhaitez analyser à nouveau un fichier complet, vous devez:
ls -i yourFile | awk '{print $1}'
)Avec la clé
start_position => "beginning"
, Logstash analysera tout le fichier.Exemple de fichier sincedb:
.sincedb_7a7413a84171aa550d5318c17fd756e9
le nom contient sincedb_ et un MD5 (Digest :: MD5.hexdigest) de tous les répertoires dans le chemin clé ( http://logstash.net/docs/1.3.3/inputs/file#path ). Voir le code du fichier du plugin: https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105la source
start_position => "beginning"
, la documentation dit:> Cette option ne modifie que les situations de "premier contact" où un fichier est nouveau et jamais vu auparavant. Si un fichier a déjà été vu auparavant, cette option n'a aucun effet.Logstash conservera l'enregistrement au format
$HOME/.sincedb_*
. Vous pouvez supprimer tous les.sincedb
et redémarrer logstash, Logstash analysera le fichier.la source
En combinant toutes les réponses, devinez que c'est la meilleure façon d'analyser les fichiers. J'ai fait la même chose pour mes tests.
Pour un test rapide, au lieu de
ignore_older
, vous pouvez égalementtouch /tmp/access_log
modifier l'horodatage du fichier.la source
ignore_older => 0
fera le contraire.Si vous utilisez logstash-forwarder, recherchez
.logstash-forwarder
plutôt un fichier dans votre maison :la source
/var/lib/logstash-forwarder/
.Après la suppression,
$HOME/.sincedb_*
il n'intégrait toujours pas de données pour moi.Après avoir essayé un tas de choses, j'ai supprimé tout sauf le
.conf
fichier principal/etc/logstash/conf.d
et redémarré Logstash, et tout a fonctionné. Je ne peux que supposer qu'il y avait quelque chose dans l'un des.conf
fichiers sur lequel logstash s'accrochait silencieusement.la source
En fait, la réparation à chaque fois est très coûteuse si le fichier contient des données volumineuses. Vous devez donc faire attention avant de faire cela. Si nous voulons le forcer à analyser à nouveau, définissez le paramètre à l'intérieur du bloc d'entrée
Cette option ne stockera pas le fichier .sincedb et logstash analysera à chaque fois. Mais si vous voulez analyser occasionnellement pas à chaque fois, ce que vous pouvez faire est de supprimer manuellement le chemin .sinceDb qui est créé lors de l'analyse du fichier. Généralement, il est présent dans le répertoire de base en tant que fichier caché si vous n'êtes pas un utilisateur root sinon dans le répertoire racine. Vous pouvez également définir sincedb_path sur un autre emplacement pour suivre facilement ce fichier.
la source
Si vous voulez éviter de jouer avec les options de logstash, j'ai trouvé que renommer ou supprimer le fichier journal existant et créer un nouveau fichier à partir de l'ancien contenu du fichier entraînera logstash dans la réindexation.
la source
Je l'ai trouvé dans mon répertoire personnel, mais après l'avoir supprimé, logstash a refusé de sélectionner à nouveau les fichiers journaux existants. La façon dont je l'ai fait fonctionner était d'ajouter
à mon plugin de fichier. Je pense à réinitialiser à chaque fois, il suffit de changer le chemin de sincedb_path
la source
si vous utilisez tar.gz install filebeat, vous pouvez supprimer ce fichier
$FilebeatPath/data/registry/filebeat/data.json
, et réexécuter le fichier filebeatla source
Essayez de supprimer le
/var/lib/logstash
dossier de votre ENVla source
logstash version 5 nouveau répertoire est dans
La définition de path.data se trouve dans logstash.yml
la source