Comment définir le nom de fichier du journal dans flume

J’utilise le canal Apache pour la collecte des journaux. Ceci est mon fichier de configuration

httpagent.sources = http-source httpagent.sinks = local-file-sink httpagent.channels = ch3 #Define source properties httpagent.sources.http-source.type = org.apache.flume.source.http.HTTPSource httpagent.sources.http-source.channels = ch3 httpagent.sources.http-source.port = 8082 # Local File Sink httpagent.sinks.local-file-sink.type = file_roll httpagent.sinks.local-file-sink.channel = ch3 httpagent.sinks.local-file-sink.sink.directory = /home/avinash/log_dir httpagent.sinks.local-file-sink.sink.rollInterval = 21600 # Channels httpagent.channels.ch3.type = memory httpagent.channels.ch3.capacity = 1000 

Mon application fonctionne correctement. Mon problème est que dans le fichier log_dir, les fichiers utilisent un horodatage par défaut (je suppose son horodatage) par défaut.

Comment donner un suffixe de nom de fichier correct pour les fichiers journaux?

En regardant la documentation, il semble qu’il n’y ait pas de paramètre pour configurer le nom des fichiers à créer. Je suis allé aux sources à la recherche d’un paramètre caché , mais il n’y a personne 🙂

Dans les détails de l’implémentation, il semble que le nom du fichier soit géré par la classe PathManager :

 private PathManager pathController; ... @Override public Status process() throws EventDeliveryException { ... if (outputStream == null) { File currentFile = pathController.getCurrentFile(); logger.debug("Opening output stream for file {}", currentFile); try { outputStream = new BufferedOutputStream(new FileOutputStream(currentFile)); ... } 

Qui, comme vous l’avez déjà remarqué, est basé sur l’horodatage actuel (montrant le constructeur et le prochain getter de fichier):

 public PathManager() { seriesTimestamp = System.currentTimeMillis(); fileIndex = new AtomicInteger(); } public File nextFile() { currentFile = new File(baseDirectory, seriesTimestamp + "-" + fileIndex.incrementAndGet()); return currentFile; } 

Donc, je pense que la seule possibilité est d’étendre l’évier File Roll et de remplacer la méthode process() afin d’utiliser un contrôleur de chemin personnalisé.

Pour les sources, vous avez des commandes d’exécution pour mettre en queue et pré-suspendre ou append des détails, en fonction du script shell. Ci-dessous un échantillon:

 # Describe/configure the source for tailing file httpagent.sources.source.type = exec httpagent.sources.source.shell = /bin/bash -c httpagent.sources.source.command = tail -F /path/logs/*_details.log httpagent.sources.source.restart = true httpagent.sources.source.restartThrottle = 1000 httpagent.sources.source.logStdErr = true