你可能没有注意但很重要的filebeat小知识

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
  1. 查看registry文件内容重新生成了数据

相关文章推荐阅读:

Filebeat的Registry文件解读的更多相关文章

  1. filebeat相关registry文件内容解析

    filebeat的registry文件中存放的是被采集的所有日志的相关信息. linux中registry中一条日志记录的内容如下 {"source":"/var/log ...

  2. trace文件解读

    *********************************************************************示例:全表扫描的10046文件解读************** ...

  3. Solr 03 - Solr的模式设计与优化 - 最详细的schema.xml模式文件解读

    目录 1 关于schema.xml文件 2 解读schema.xml文件 2.1 field - 配置域 2.2 fieldType - 配置域类型 2.3 copyField - 配置复制域 2.4 ...

  4. Linux系统下的 /etc/fstab 文件解读

    1 [root@localhost ~]# cat /etc/fstab 2 3 # 4 # /etc/fstab 5 # Created by anaconda on Sat Nov 3 12:03 ...

  5. /proc/cpuinfo文件解读(超易理解)

    在linux系统中,提供了/proc目录下文件,显示系统的软硬件信息.如果想了解系统中CPU的提供商和相关配置信息,则可以查/proc/cpuinfo.但是此文件输出项较多,不易理解.例如我们想获取, ...

  6. maven工程pom.xml文件解读

    maven的核心是pom.xml,POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述如何构建,声明项目依赖.以Hello World项目为例,创建一个hel ...

  7. EPANET头文件解读系列9——VARS.H

    /*************************************************************************            Global Variabl ...

  8. Visual Studio 2010 C++ 工程文件解读

    在 VS2010 中,C++ 的工程文件已经和 2005 / 2008 有了很大的不同,而是完全采用 MSBUILD 的属性方式进行表达,并且可以让用户通过一次性的配置而对所有的属性进行自定义: 根据 ...

  9. 【QT相关】类头文件解读、QT编辑模式、读取text文本

    Wizard产生的头文件类包含了必须的#include文件.构造函数.析构函数和UI对象: #include <QMainWindow> namespace Ui {class Notep ...

随机推荐

  1. 20175234 2018-2019-2 《Java程序设计》第四周学习总结

    20175234 2018-2019-2 <Java程序设计>第四周学习总结 教材学习内容总结 教材学习了子类,其重点是方法重写.对象的上转型对象和多态,强调了面向抽象编程的思想. 学习I ...

  2. Linux Curl命令

    一.简介 linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具.   二.安装 wget http://c ...

  3. 多进程和mongo的配合使用

    这篇文章主要是讲在多线程下使用mongo数据库的一个报错,算是一个警告,如下: /usr/lib64/python2.6/site-packages/pymongo/topology.py:75: U ...

  4. HOOK NTFS 禁止格式化

    if(bHooked == FALSE) { RtlInitUnicodeString (&HookDriverName, L"\\FileSystem\\Ntfs"); ...

  5. 深入理解JVM(四)JVM性能监控与故障处理工具

    4.2 JVM命令行工具 1.jps(JVM Process Status Tool):JVM进程查看工具,命令行进入到jdk的bin目录下,使用命令:jps -l/-q/-v/-m 2.jstat( ...

  6. Navicat导入.xls等文件失败

    一.问题 在学习django的models时,使用Navicat premium导入.xls数据的时候会出现导入失败的原因,即使是换成了csv文件也是失败的,原因是数据库的表有外键,而需要设置外键限制 ...

  7. mui.init方法配置

    mui框架将很多功能配置都集中在mui.init方法中,要使用某项功能,只需要在mui.init方法中完成对应参数配置即可,目前支持在mui.init方法中配置的功能包括: 创建子页面. 关闭页面. ...

  8. BootLoader简介(借鉴)

    一.BootLoader内容 Bootloader内容包含CPU的初始化.硬件外围接口初始化和内存空间映射表建立.其目的是建立适合操作系统和应用软件运行的系统环境.BootLoader固化在ROM或F ...

  9. java基础-位运算符

    1.位运算符 << 左移 :            右边以0填充 >> 带符号右移:    负数前面补1,整数补0 >>>不带符号右移 & 按位与运算 ...

  10. Avro实现RPC

    场景:一个客户端,一个服务端(创建两个avro工程).客户端向服务端发送数据,服务端根据算法算出结果,返回给客户端. Http主外,RPC主内.(解决分布式环境下,节点间的数据通信或远程过程调用) 实 ...