首页 > 其他分享 >filebeat采集日志存在日志丢失的情况

filebeat采集日志存在日志丢失的情况

时间:2023-11-04 09:11:06浏览次数:37  
标签:文件 filebeat max 丢失 docker data 日志

filebeat搜集的速度跟不上日志打印的速度

问题:filebeat读取k8s container日志,生产到kafka过程中,出现丢数据。如下图实际生产了1w+日志,但只生产了5746条

 

定位:

因为是EFK流程,首先,需要确定是生产还是消费出现了问题,直接kafka命令行使用另外的消费组消费同一topic的kafka数据,得出的数据与kibana查的数据一致,说明消费没问题。

其次,因日志映射到host-path,同时在stdout也有打印(默认存储到了/data/lib/docker/containers/${data.kubernetes.container.id}/*.log),故对比host-path存储的数据与/data/lib/docker/containers/${data.kubernetes.container.id}/*.log数据,发现二者数据量不一致,说明是在收集过程中input的问题。

 

于是通过谷歌【filebeat 丢数据】,联想到是否有文件句柄被打开和未及时释放的问题,可知原因主要如下:

1)当harvester不可用时,文件被删除

2)对于轮询文件,轮询速度的超过了处理的速度

3)inode重新利用,新文件起始位置继续使用旧文件的开始记录位置导致

  

1.模拟单个pod只打印日志,判断harvester是否有问题

 如下图,echo了2w到stdout,kibana获取到了2w条,说明harvester没问题

 

推荐内容  

2.继续排查第二个增加并行work数

修改filebeat.yml,貌似没用(压测过程磁盘写入20M/s左右,cpu 2000m基本用满,有数据丢失。明天扩容cpu再测试)

  partition.round_robin:

    reachable_only: true

  work: 9

  timeout: 30s

  broker_timeout: 10s

  bulk_max_size: 2048

  required_acks: 0

  compression: gzip

  compression_level: 4

  max_message_bytes: 1000000

  keep_alive: 60

3.观察日志文件inode

在压测过程中,进一步观察/data/lib/docker/containers/${data.kubernetes.container.id}/*.log数据,可以看到(第一列为inode文件标识),日志到达50m左右后在不停的rotate,inode也在被操作系统复用循环使用。怀疑是新文件起始位置继续使用旧文件的开始记录位置导致漏读新文件起始位置前的内容

可能是这个原因:

 

所以需要在inode被操作系统循环使用到新文件前,让filebeat把文件内容读取完。

 

 

有两种方式:

1)方法一:修改docker rotate的文件大小,由原始的50m修改为500m,以降低日志rotate滚动频率

通过查看docker配置文件可知,默认设置了单文件最大50m,最多保存5个文件 

cat /etc/docker/daemon.json

{

  "insecure-registries": ["dke-registry:5000"],

  "max-concurrent-downloads": 10,

  "log-driver": "json-file",

  "log-level": "warn",

  "log-opts": {

    "max-size": "50m",

    "max-file": "5"

    },

  "data-root": "/data/lib/docker",

  "iptables": false,

  "bip": "192.168.42.1/24"

}

 

2)方法二:修改filebeat的scan_frequency

scan_frequency默认为10s,按20m/s写入文件,上限50m,2.5s就写完了,而filebeat需要10s后才轮询到文件,导致出现文件不能被Filebeat的input模块扫描到,从而造成数据丢失。所以需要加大scan_frequency的执行频率,时间间隔由默认的10s减少到1s(有的博客说可以设置为0s,但实际启动不了)。

注意:增加扫描频率后,需要观察cpu的使用情况,根据情况适当增加pod cpu逻辑核

结论:

1)调整docker日志滚动策略,降低日志滚动频率

2)加大扫描频率,即减小scan_frequency,需要大于0s

 

20220419

5000qps压测3500w+数据,本地日志数量与kafka生产数量&ES落库数量完全一致。在20220418基础上做的主要操作如下:

1)改 /etc/docker/daemon.json max-size 到 500m  max-file改为10, 重启docker: systemctl restart docker

2)filebeat pod CPU资源加到8c,config中scan_frequency改成0.01s

3)logstash input的consumer_threads改成30,启动命令加-w 64 ,即增加worker线程数为64个(用于output和filter)

4)kafka topic的partition由9增加到15,单个partition的传输速率由1M/s 增加到 3M/s

 

 

参考

FileBeat系列:数据丢失的情况:https://blog.51cto.com/NIO4444/3840849

filebeat数据重复和截断及丢失问题分析:http://niyanchun.com/filebeat-truncate-bug.html

filebeat工作原理:https://blog.csdn.net/zzl394935072/article/details/104629516

docker container如何支持日志rotate https://www.codeleading.com/article/78991029920/

标签:文件,filebeat,max,丢失,docker,data,日志
From: https://www.cnblogs.com/gaoyanbing/p/17808873.html

相关文章

  • sh脚本扫描k8s一批微服务过滤错误日志生成文件
    sh脚本扫描k8s一批微服务过滤错误日志生成文件,并用vim一次性打开所有日志文件进行错误排查#!/bin/bashecho"请输入param参数(多个参数用逗号分隔,默认为admin-center,space,permission,user,project,project-center):"readparamparam=${param:-"admin-center,space,permission,......
  • vcftools 快速安装日志
     下载https://vcftools.github.io/examples.htmltar-xvfvcfools.0.X.XX.tar.gzexportPERL5LIB=/path/to/your/vcftools-directory/src/perl/cdvcftools/先执行./autogen.sh报错autoreconf找不到,执行yuminstall autoreconf./configure 如果这一步执行报错,缺少c++......
  • Scrapy Logging日志
    日志级别Python的内置日志记录定义了5个不同的级别来指示给定日志消息的严重性logging.CRITICAL用于严重错误(最高严重性)logging.ERROR常规错误logging.WARNING用于警告消息logging.INFO用于信息性消息logging.DEBUG用于调试消息(最低严重性)创建项目创建项目scrapystartpro......
  • 如何为Windows服务增加Log4net和EventLog的日志功能
    一、简介最近在做一个项目的时候,需要该项目自动启动、自动运行,不需要认为干预。不用说,大家都知道用什么技术,那就是Windows服务。在以前的NetFramework平台下,Windows服务是一个不错的选择。如果现在在NetCore版本,或者Net5.0以及以上版本,我们会有另外一个选择,这就是......
  • 归档日志碎片化
    概念描述oracle数据库根据每16个CPU分一股strand,每一股独立从log_buffer和redologfile中分配一块空间,当其中一股log_buffer空间写满,会要求继续从redologfile中分配一个空间,如果没有剩余空间可以用,则redo会发生切换。所以log_buffer设置不当也会是引起日志切换过快,并且归档日志碎......
  • VS2015 日志
    VA选项颜色与属性 “以斜体显示系统符号”高亮 引用和光标下所有语言-常规-自动大括号完成(&B)取消停靠窗口时崩溃devenv.exe主进程的同目录下的devenv.exe.config文件修改,需改节点AppContextSwitchOverrides添加值;Switch.System.Windows.Interop.MouseInput.O......
  • 日志数据如何同步到MaxCompute
    https://developer.aliyun.com/article/727331摘要:日常工作中,企业需要将通过ECS、容器、移动端、开源软件、网站服务、JS等接入的实时日志数据进行应用开发。包括对日志实时查询与分析、采集与消费、数据清洗与流计算、数据仓库对接等场景。本次分享主要介绍日志数据如何同步到M......
  • 大学生创新训练项目开发日志 (10-26 ~ 11-2)
    进展资源钩取我们通过如下方法对资源钩取模块进行了改进:对getDrawable()返回的Drawable实例进行了进一步处理,降低被丢弃的资源的比率。通过LayoutInflater.inflate()返回的ImageView实例的getDrawable()方法获取该实例内含的Drawable资源。进行了如下改进后,对......
  • sql server 截断和收缩所有用户数据库日志--用游标循环所有正常状态的用户数据库
    在服务器运维活动中,我们经常需要做一项工具就是将好多年的用户数据库日志文件截断并收缩为最小,以节省大量的磁盘空间。当数据库只有一两个时可以手动操作,但数据库数量众多时,就需要采用sql脚本,批量化执行这个过程。本人写了一段这样的脚本。并且经过验证执行无误。现在分享出来,您......
  • vue打包后导致css属性值丢失的问题如何处理?
    当使用Vue进行打包时,有时可能会出现CSS属性值丢失的问题。这通常是由于CSS的压缩和优化过程导致的。下面是一些可能的解决方案:关闭CSS的压缩和优化:在Vue的配置文件(vue.config.js)中,你可以通过添加以下配置来关闭CSS的压缩和优化:module.exports={css:{extract:false,......