flume1.7.0-taildirSource 支持多文件监控和断点续传
来源:互联网 发布:中国制造2025 知乎 编辑:程序博客网 时间:2024/05/21 22:20
flume 1.7.0 推出了 taildirSource 组件。tail 监控 目录下匹配上正则表达式的 的所有文件,实现断点续传。
问题
但是官方的 taildirSource 组件貌似是支持nginx 日志,对于log4j 日志好像不太管用。
因为log4j 日志会自动切分,log4j 切分日志其实就是新建一个文件,然后把原来的日志文件都改名。但是 taildirSource 组件时不支持文件改名的。如果文件改名会认为是新文件,就会重新读取,这就导致了日志文件重读。
解决
为了解决这个问题,我去读了 taildirSource 的源码。
发现了两个地方 需要修改
1.修改 ReliableTaildirEventReader
修改ReliableTaildirEventReader 类的 updateTailFiles 方法。
将其中的 tf.getPath().equals(f.getAbsolutePath()) 判断条件去除。
只用判断文件不为空即可,不用判断文件的名字,因为log4j 日志切分文件被重命名了。
// if (tf == null || !tf.getPath().equals(f.getAbsolutePath())) { if (tf == null) {//文件不存在 position 中则全读。
2.修改TailFile
修改TailFile 类的 updatePos 方法
此处同样的原因,inode 已经能够确定唯一的 文件了,所以不用加 path 作为判定条件了。所以去掉该条件就支持了文件重命名情况。
// if (this.inode == inode && this.path.equals(path)) if (this.inode == inode)
修改这两个地方就支持了文件重命名 的问题,实现了目录下多文件监控,断点续传。
添加自定义source入口,也就是将源码拷贝过来,然后将修改过的代码打包为自定义source的jar 包运行flume 。
参考 : flume自定义组件的 jar 包管理
3.配置文件
提供 taildirsource 的配置文件如下
a1.sources = r1a1.sources.r1.type = com.xx.xx.source.taildir.TaildirSourcea1.sources.r1.channels = c1a1.sources.r1.positionFile = /opt/apps/log4j/taildir_position.jsona1.sources.r1.filegroups = f1a1.sources.r1.filegroups.f1 = /opt/apps/log4j/logs/*.log.*a1.sources.r1.fileHeader = true
通过这些修改就 实现了多文件监控和断点续传。支持log4j 日志监控。
参考: http://blog.csdn.net/test103/article/details/55096786#reply
- flume1.7.0-taildirSource 支持多文件监控和断点续传
- Flume1.7.0的TaildirSource介绍
- flume1.7 TailDirSource断点续传与文件更名后数据重复采集的bug修复
- flume1.7 TailDirSource断点续传与文件更名后数据重复采集的bug修复
- flume 1.7.0-taildirSource 支持 windows系统
- 【Flume】flume文件监控的source组件开发,增量传输文件内容,支持断点续传功能
- java支持断点续传文件上传和下载组件
- java 文件上传支持断点续传
- 支持断点续传的多文件上传开发控件
- android 支持多线程和断点续传
- 文件断点续传和下载
- 利用Winsock下载文件(支持断点续传)
- 让自定义文件下载支持断点续传
- 利用Winsock下载文件(支持断点续传)
- 支持断点续传的PHP文件下载类
- C++/php 文件上传,支持断点续传
- php下载远程文件(支持断点续传)
- C#实现文件下载,支持断点续传
- Given an input string, reverse the string word by word.
- Maven简单配置
- 华为Java编程规范
- 各类硬盘对比
- RTP时间戳
- flume1.7.0-taildirSource 支持多文件监控和断点续传
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
- linux命令大全
- 【LeetCode 539】 Minimum Time Difference
- Ubuntu下Arduino中Serial port不能识别的问题
- 漫步数理统计八——随机变量(下)
- 我的科研生活2017-3-14
- 马云的故事--思考
- leetcode 146. LRU Cache 460. LFU Cache