Filebeat的Registry文件解读

Registry文件

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

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

{
    "source": "/home/logs/app/exception.log",
    "offset": 8137,
    "FileStateOS": {
        "inode": 1048,
        "device": 29
    },
    "timestamp": "2019-03-28T13:31:10.87878789+08:00",
    "ttl": -1
}

每个字段的意义解释:

source: 记录采集日志的完整路径

offset: 采集这个日志文件到了哪个位置,总采集字节数

inode: 日志文件的inode号,关于inode的详细解释看下文

device: 日志所在的磁盘编号,下文stat命令中Device的值

timestamp: 日志最后一次发生变化的时间戳

ttl: 采集失效时间,-1表示永不失效

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

inode相关知识

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

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

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

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

# stat /home/logs/app/exception.log
  File: '/home/logs/app/exception.log'
  Size: 40210       Blocks: 80         IO Block: 4096   regular file
Device: 1dh/29d Inode: 1038        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-03-28 00:27:01.522594000 +0800
Modify: 2019-03-28 15:59:14.582594000 +0800
Change: 2019-03-28 15:59:14.582594000 +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 /home/logs/app/exception.log
1048 /home/logs/app/exception.log

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

logstash有关配置参数

registry_file: registry文件路径,可以只写文件名,那么文件会创建在默认的${path.data}目录下,也可以指定一个绝对路径

registry_file_permissions: registry文件的权限,默认是0600,只有属主有读写权限

registry_flush: registry文件的刷新时间,默认为0,表示实时刷新,filebeat处理一条日志就实时的将信息写入到registry文件中,这在日志量大的时候会频繁读写registry文件,可考虑适当增加这个值来降低磁盘开销

如果filebeat在处理发送事件时还没有等到output的响应就意外关闭或僵死了,新发送的日志状态没有来得及记录进registry文件中,那么在filebeat重新启动后会去读取registry文件记录的信息重新发送日志,这确保了所有日志都被发送过,但可能会有重复的日志被发送

重新从头读取日志

有些情况下我们需要让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

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/8239

(0)
郭靖的头像郭靖
上一篇 2023年5月25日 下午5:00
下一篇 2023年5月26日 下午5:16

相关推荐

  • VPS主机和服务器磁盘IO读写速度测试方法-VPS主机真实IO检测工具

    VPS主机磁盘IO的好坏直接影响到VPS主机性能的高低。对于测试VPS主机的性能,我们有非常多的脚本工具,例如:VPS主机速度和性能综合测试工具整理汇总中我们就分享了不少的脚本工具,可以快速地测试VPS主机的CPU、内存和带宽等。 不过,有好友反馈说对于VPS主机的磁盘IO测试,脚本测出来的结果差别比较大,甚至直到建站时才发现购买的VPS主机的IO太低,严重…

    2023年11月24日
    62200
  • Linux如何搭建docker环境

    1、docker的版本信息 Docker CE在17.03版本之前叫Docker Engine,版本号从0.1.0(2013-03-23)~1.13.1(2017-02-08),详见https://docs.docker.com/release-notes/docker-engine/Docker分为CE和EE。CE即社区版(免费);EE即企业版,强调安全,…

    2022年11月16日
    68800
  • Racadm安装指南

    安装 racadm 重置密码 查看磁盘阵列 查看虚拟磁盘信息 共三个阵列, 两个 raid1 , 一个 raid5. 状态都是 OK 查看物理盘信息 列出所有的物理磁盘 一共12个物理磁盘

    2023年5月17日
    96810
  • centos 服务器性能测试工具UnixBench

    选取云服务器时候有时看似配置相同,但是性能上可能天壤之别。 数据解读

    2023年2月23日
    60100
  • Docker镜像管理

    镜像和容器 如果曾经做过 VM 管理员,可以把 Docker 镜像理解为 VM 模板,而运行的VM就是容器如果你是名研发人员,则可以将镜像理解为类(Class),而容器就是对象用一句话来说镜像是容器的模板,容器是镜像的运行实例 镜像仓库服务 Docker 镜像存储在镜像仓库服务(Image Registry)当中。用户可以从Registry进行镜像下载和访问…

    2022年11月17日
    1.7K00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信