从Logstash文件输入中了解sincedb文件

Ald*_*ian 14 logstash

在Logstash中使用文件输入时,会写入sincedb文件以跟踪受监视日志文件的当前位置.如何理解其内容?

sincedb文件的示例:

 286105 0 19 20678374
Run Code Online (Sandbox Code Playgroud)

Ald*_*ian 18

共有4个领域(来源):

  • 索引节点
  • 主设备号
  • 次要设备号
  • 字节偏移量

假设硬盘将被分割成数千个非常小的部分,并且每个部分都有一个数字,则inode将或多或少地类似于文件开始的微小部分的数量.因此,给定的inode对于每个硬盘都是唯一的,但是为了解决同一服务器上有多个磁盘的情况,需要使用主设备号和次设备号以保证三元组{inode,次设备号的唯一性,次要设备号}.有关维基百科上的 inode的更准确信息.

也就是说,我不太确定(例如)通过NFS挂载的文件不会与本地文件冲突,因为通过NFS挂载的文件的inode似乎是远程文件.即使我不认为插件编写者对这种情况感到困扰,尽管我自己使用NFS,但到目前为止从未遇到任何麻烦.我还怀疑碰撞概率非常小.

现在有了由inode和主要和次要设备编号组成的三元组,我们有一种方法可以定位插件正在读取的单个日志文件(或者至少是原始意图).最后一个数字,字节偏移量,跟踪输入日志文件已经读取并输出到Logstash的距离.

在一些特定的体系结构(如SolarisWindows)中,有一些错误,ruby错误地检测到inode编号,这等于0.这可能会导致logstash没有检测到文件轮换等问题.