小于博客 小于博客
首页
  • Java学习笔记
  • Docker专区
  • 实战教程
  • Shell
  • 内存数据库
  • Vue学习笔记
  • Nginx
  • Php
  • CentOS
  • Docker
  • Gitlab
  • GitHub
  • MySql
  • MongoDB
  • OpenVPN
  • 配置文件详解
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 电影音乐
  • 效率工具
  • 博客相关
  • 最佳实践
  • 迎刃而解
  • 学习周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

小于博客

行者常至,为者常成
首页
  • Java学习笔记
  • Docker专区
  • 实战教程
  • Shell
  • 内存数据库
  • Vue学习笔记
  • Nginx
  • Php
  • CentOS
  • Docker
  • Gitlab
  • GitHub
  • MySql
  • MongoDB
  • OpenVPN
  • 配置文件详解
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 电影音乐
  • 效率工具
  • 博客相关
  • 最佳实践
  • 迎刃而解
  • 学习周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

  • Jenkins系列文章

  • ELK笔记

    • ELK

    • FileBeat

      • Filebeat的Registry文件解读
        • Registry文件
          • inode相关知识
        • 重新从头读取日志
      • filebeat采集端配置文件详解
      • filebeat报错too many open files处理
    • LogStash

    • ElasticSearch

    • Kibana

  • Kubernetes笔记

  • 系列专题
  • ELK笔记
  • FileBeat
小于博客
2020-06-06
目录

Filebeat的Registry文件解读

# 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
}
1
2
3
4
5
6
7
8
9
10

每个字段的意义解释:

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

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

img

# 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: -
1
2
3
4
5
6
7
8
9

我们可能遇到过明明查看磁盘空间还充足,但无法创建新文件的问题,这时候可能就是因为磁盘的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
1
2
3
4
5
6

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

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

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

# 重新从头读取日志

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

  • 找到registry文件的位置,如果没有单独配置那么文件路径为/var/lib/filebeat/registry,不在也没关心,可以直接find命令查找。

    # find / -name registry
    /var/lib/filebeat/registry
    
    1
    2
  • 关闭filebeat –> 删掉registry文件 –> 启动filebeat。

    /etc/init.d/filebeat stop &&\
    rm -r /var/lib/filebeat/registry &&\
    /etc/init.d/filebeat start
    
    1
    2
    3
  • 查看registry文件内容重新生成了数据。

#filebeat#elk
上次更新: 2024/01/11, 14:21:50

← 记一次日志突然写不进去了的处理 filebeat采集端配置文件详解→

最近更新
01
SpringBoot 快速实现 api 加密!
03-21
02
SpringBoot整合SQLite
03-07
03
SpringBoot配置使用H2数据库的简单教程
02-21
更多文章>
Theme by Vdoing | Copyright © 2017-2024 | 点击查看十年之约 | 豫ICP备2022014539号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式