二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancker
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
推广
  • 本站索引

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

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (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)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancker
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
推广
  • 本站索引

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

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (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
上次更新: 2022/08/19, 09:49:20

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

最近更新
01
极客时间课程推荐
02-02
02
Vuepress配置rss订阅功能
02-01
03
Vuepress添加首页轮播图与打赏按钮的配置
02-01
更多文章>
Theme by Vdoing | Copyright © 2017-2023 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式