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?
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"
}
}
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:
ls -i yourFile | awk '{print $1}'
)Avec la clé start_position => "début, Logstash analysera tout le fichier.
Exemple de fichier sincedb:
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.
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.
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
}
}
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.
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"
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.
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
si vous utilisez tar.gz install filebeat, vous pouvez supprimer ce fichier, $FilebeatPath/data/registry/filebeat/data.json
, et réexécuter la filebeat