• 对于注定会优秀的人来说,他所需要的,只是时间!
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!

<十五>ELK-学习笔记–Filebeat的Registry文件解读

ELK eryajf 4个月前 (06-06) 311°C 已收录 0个评论
本文预计阅读时间 6 分钟

Registry文件

Filebeat会将自己处理日志文件的进度信息写入到registry文件中,以保证filebeat在重启之后能够接着处理未处理过的数据,而无需从头开始。

registry文件内容为一个list,list里的每个元素都是一个字典,字典的格式如下:

{
    "source": "/data/log/tmp.log",
    "offset": 585451484,
    "FileStateOS": {
        "inode": 75063792,
        "device": 64785
    },
    "timestamp": "2020-06-06T03:10:03.757645551+08:00",
    "ttl": 90000000000000
}

每个字段的意义解释:

  • source: 记录采集日志的完整路径
  • offset: 采集这个日志文件到了哪个位置,总采集字节数
  • inode: 日志文件的inode号,关于inode的详细解释看下文
  • device: 日志所在的磁盘编号,下文stat命令中Device的值
  • timestamp: 日志最后一次发生变化的时间戳
  • ttl: 采集失效时间,-1表示永不失效

Filebeat在每次启动时都会来读取这个文件,如果文件不存在则会创建新文件。

inode相关知识

硬盘格式化的时候,操作系统自动将硬盘分成了两个区域。

一个是数据区,用来存放文件的数据信息

一个是inode区,用来存放文件的元信息,比如文件的创建者、创建时间、文件大小等等

每一个文件都有对应的inode,里边包含了与该文件有关的一些信息,可以用stat命令查看文件的inode信息

$ stat /data/log/tmp.log
  File: ‘/data/log/tmp.log’
  Size: 196901341   Blocks: 503040     IO Block: 4096   regular file
Device: fd11h/64785d    Inode: 71012560    Links: 1
Access: (0640/-rw-r-----)  Uid: (   80/     www)   Gid: (    0/    root)
Access: 2020-06-06 03:10:01.841178994 +0800
Modify: 2020-06-06 14:09:48.536169224 +0800
Change: 2020-06-06 14:09:48.536169224 +0800
 Birth: -

我们可能遇到过明明查看磁盘空间还充足,但无法创建新文件的问题,这时候可能就是因为磁盘的inode用完了,磁盘的inode可以通过命令df -i查看

# df -i
Filesystem        Inodes IUsed     IFree IUse% Mounted on
none           104855552 39836 104815716    1% /
tmpfs            1024703    16   1024687    1% /dev
tmpfs            1024703    10   1024693    1% /sys/fs/cgroup
/dev/vdc1      104855552 39836 104815716    1% /etc/hosts

每个inode都有一个号码,操作系统就是通过这个号码来识别不同文件的,这个号码就是filebet配置中的inode,可以通过ls -i命令查看

$ ls -i /data/log/tmp.log
71012560 /data/log/tmp.log

可能你查看registry文件发现同名的log文件记录有很多条,造成这个的主要原因是你的log文件可能被重命名过,常见的场景例如log4j里边的每日生成一个日志文件,把老的日志文件重命名。

重新从头读取日志

有些情况下我们需要让filebeat重新从头读取日志,尤其是在调试的时候,有了上边的知识我们就很容易实现filebeat重新从头读取日志了,核心的思想就是干掉registry文件

  1. 找到registry文件的位置,如果没有单独配置那么文件路径为/var/lib/filebeat/registry,不在也没关心,可以直接find命令查找。
# find / -name registry
/var/lib/filebeat/registry
  1. 关闭filebeat –> 删掉registry文件 –> 启动filebeat。
/etc/init.d/filebeat stop &&\
rm -r /var/lib/filebeat/registry &&\
/etc/init.d/filebeat start
  1. 查看registry文件内容重新生成了数据。

weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<十五>ELK-学习笔记–Filebeat的Registry文件解读
喜欢 (0)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!永远不要忘记,激情的奋进,就是美好的未来!

您必须 登录 才能发表评论!