ELK-学习笔记–Filebeat的Registry文件解读 |坐而言不如起而行! 二丫讲梵
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.
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文件
- 找到registry文件的位置,如果没有单独配置那么文件路径为
/var/lib/filebeat/registry
,不在也没关心,可以直接find命令查找。
# find / -name registry
/var/lib/filebeat/registry
- 关闭filebeat –> 删掉registry文件 –> 启动filebeat。
/etc/init.d/filebeat stop &&\
rm -r /var/lib/filebeat/registry &&\
/etc/init.d/filebeat start
- 查看registry文件内容重新生成了数据。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK