3

ELK-学习笔记–Filebeat的Registry文件解读 |坐而言不如起而行! 二丫讲梵

 2 years ago
source link: http://www.eryajf.net/5010.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
本文预计阅读时间 6 分钟

Registry文件

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

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

  1. {
  2. "source": "/data/log/tmp.log",
  3. "offset": 585451484,
  4. "FileStateOS": {
  5. "inode": 75063792,
  6. "device": 64785
  7. },
  8. "timestamp": "2020-06-06T03:10:03.757645551+08:00",
  9. "ttl": 90000000000000
  10. }

每个字段的意义解释:

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

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

71cfeb93ly1gf8j9b2skpj20no0zk44z.jpg

inode相关知识

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

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

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

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

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

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

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

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

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

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

重新从头读取日志

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

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

weinxin


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK