web-dev-qa-db-fra.com

Comment forcer Logstash à réparer un fichier?

J'ai installé Logstash pour analyser les fichiers Apache. Il m'a fallu du temps pour que les réglages soient corrects et j'ai toujours essayé sur de vrais journaux. J'ai remarqué (comme le dit la documentation) que logstash "se souvient" de l'endroit où il se trouvait dans un fichier. Maintenant, mes réglages sont Ok et je voudrais que Logstash "oublie". Cela semble plus difficile que moi cependant. J'ai déjà fait ce qui suit:

  • utilisé: start_position => "beginning"

  • a supprimé le dossier "data" complet de elastissearch (et l'a d'abord arrêté)

  • a examiné quels fichiers ont été ouverts par logstash avec lsof -p PID et a supprimé tout ce qui était prometteur (dans mon cas, /tmp/jffi*.tmp)

Toujours Logstash n’oublie pas et n’analyse que les "nouveaux" fichiers du dossier où se trouvent les journaux.

Des idées?

83
Christophe Claude

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 amené à croire qu'il n'a jamais analysé le fichier journal en spécifiant /dev/null en tant que sincedb_path.

Voici la partie de la documentation Fichier d'entrée .

Où écrire la base de données depuis (garde une trace de la position actuelle Des fichiers journaux surveillés). La valeur par défaut de la variable d'environnement "$ SINCEDB_PATH" ou "$ HOME/.sincedb".

Exemple de configuration

input {
    file {
        path => "/tmp/logfile_to_analyse"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
123
flazzarini

Historique du magasin de fichiers de plug-in "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 db contient des lignes ressemblant à ceci: 

[inode] [major device number] [minor device number] [byte offset]

Donc, si vous voulez analyser à nouveau un fichier complet, vous devez: 

  • supprimer les fichiers sindedb
  • OU supprime uniquement la ligne correspondante dans le fichier sincedb, vérifiez le numéro d'inode avant de votre fichier (ls -i yourFile | awk '{print $1}')
  • Et redémarrez Logstash

Avec la clé start_position => "début, Logstash analysera tout le fichier.

Exemple de fichier sincedb: 

18
yesnault

Logstash conservera l'enregistrement dans $ HOME/.sincedb_ *. Vous pouvez supprimer tous les fichiers .sincedb et redémarrer logstash. Logstash procédera à l’analyse du fichier. 

10
Ben Lim

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.

input {
  file {
    path => "/tmp/access_log"
    start_position => beginning
    sincedb_path => "/dev/null"
    ignore_older => 0
  }
}

Pour un test rapide, au lieu de ignore_older, vous pouvez également touch /tmp/access_log pour modifier l'horodatage du fichier.

9
vikas027

Si vous utilisez logstash-forwarder, recherchez dans votre maison le fichier .logstash-forwarder:

{
  "/var/log/messages": {
    "source": "/var/log/messages",
    "offset": 43715,
    "inode": 12967,
    "device": 51776
  }
}
5
elwarren

Après la suppression de $ HOME/.sincedb_ *, il n’était toujours pas en train d’acquérir des données pour moi. 

Après avoir essayé de nombreuses choses, j'ai supprimé tout le fichier sauf/le fichier principal .conf de /etc/logstash/conf.d et redémarré logstash. Je ne peux que supposer qu'il y avait quelque chose dans l'un des fichiers .conf que logstash pendait silencieusement.

3
Seth

Réévaluer chaque fois est très coûteux si le fichier contient des données volumineuses. Donc, vous devez faire attention avant de faire ceci . Si nous voulons le forcer à réparer à nouveau, définissez le paramètre à l'intérieur du bloc d'entrée 

sincedb_path => "/dev/null" 

Cette option ne stockera pas le fichier .sincedb et logstash procédera à une nouvelle analyse à chaque fois. Mais si vous souhaitez effectuer une analyse occasionnelle à chaque fois, vous pouvez supprimer manuellement le chemin .sinceDb 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 de racine . Vous pouvez également définir le chemin sincedb_path sur un autre emplacement pour suivre facilement ce fichier.

sincedb_path => "/home/shubham/sinceDB/productsSince.db"
1
Shubham Gupta

Si vous voulez éviter de jouer avec les options de logstash, j'ai constaté que renommer ou supprimer le fichier journal existant et créer un fichier new à partir du contenu de l'ancien fichier inciterait logstash à réindexer.

1
GreensterRox

Je l'ai trouvé dans mon répertoire personnel, mais après l'avoir supprimé, logstash a refusé de reprendre les fichiers journaux existants. La façon dont je l'ai fait au travail a été d'ajouter 

sincedb_path => "/opt/elk/sincedb/"  

à mon fichier plugin. Je pense que pour réinitialiser à chaque fois, changez simplement le chemin de sincedb_path

0
Dan

si vous utilisez tar.gz install filebeat, vous pouvez supprimer ce fichier, $FilebeatPath/data/registry/filebeat/data.json, et réexécuter la filebeat

0
L.T