Skip to content

MOBX/JLogstashFileInput

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JLogstashFileInput

logstash file input plugin implements by java

写在前面

写程序有时候真的有点难,要考虑各种情况。

应用在运行中,会不断生成日志文件。假如要实现一个日志收集的工具,不考虑其它的分析功能,只考虑收集,有哪些方面要考虑的?

首先看下一般的log框架是如何输出日志的:

可能是这样的:zxc.log.1, zxc.log.2, zxc.log.3, zxc.log.4, zxc.log.5 循环输出;

可能是这样的:zxc.2016-1-1.log, zxc.2016-1-1.log, zxc.2016-6-6.log,每天生成一个日志文件;

可能是这样的:log.out,每次重启都会生成一个新的log.out,覆盖旧的文件。

那么,我们有哪些方面要实现和注意的?

  • 提供正则或者globs方式的通配符。
  • 要能判断文件是不是新建的。
  • 如何判断文件有没有更新?
  • 如何保存文件的读取进度?
  • 如果我们在读取文件的过程中,文件被删除了会怎样?
  • 如果我们在读取文件过程中,进程挂了,读取进度有没有及时保存?
  • 在保存文件进度时,如果挂了,重启能不能正确恢复文件进度?
  • 能不能保证读取的内容不重复?
  • 如果日志文件很快生成,又很快删除了,是否能保证不漏掉?
  • 如果日志文件是软链接(soft link),能不能正确处理?
  • 文件系统的inode会被回收利用,能不能处理这个?
  • 有没有控制读进内存的数据的大小,防止占用过多的内存?

logstash的实现

  • 利用inode来识别新文件;
  • 区分了设备,文件名,文件的不同版本;
  • 利用rename原子性地保存pos;
  • 能否保证不重复,不丢失数据? 这个无法做到,除非是分布式事务,否则,总有可能丢失或者重复发送数据。任何日志收集软件或者消息队列软件都是如此
  • 基于filewatch这个库实现;

About

logstash file input plugin implements by java

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published