首页 > 其他分享 >Filebeat占用CPU过高问题定位与分析

Filebeat占用CPU过高问题定位与分析

时间:2023-10-26 11:55:45浏览次数:32  
标签:Filebeat pprof 占用 filebeat pirate 日志 CPU

一、Filebeat简介:

Filebeat是一个开源的轻量级日志收集器,用于将日志数据发送到指定的中央服务系统。主要分为三个部分。

Prospector
负责检测指定日志目录或文件,并对检测到的每个日志文件,filebeat启动一个收割进程(harvester),Filebeat目前支持两种Prospector类型:log和stdin,每个Prospector类型可以在配置文件中定义多个。

Harvester
负责读取单个文件内容,harvester负责文件的打开和关闭,并将读取到的新内容发送到处理程序(spooler)

Spooler
集合harvester发送的数据,并将数据发送到指定地点。 Filebeat保持每个文件的状态,并频繁地将Harvester上次读取文件的位置从注册表更新到磁盘,确保将全部的日志数据读取出来。
如果output出行故障,Filebeat会将最后的文件读取位置保存下来,直到output恢复快速地对文件进行读取;如果Filebeat故障重启,会从注册表恢复重启之前的状态信息,让Filebeat继续从之前已知的位置开始进行读取。

二、CPU过高原因分析:

考虑可能造成Filebeat CPU的原因:

1、配置问题

配置统一采用运维打包filebeat,并且采用 yum源安装。并对比filebeat国内外服务发现配置完全一样,未做其他变更。

2、日志量过大

日志量均在可控范围内,海外项目数据量均偏少:

韩国妖尾项目日增数据量为:217407条左右

放开三国3项目日增数据量为:20385029条。

放开那三国3cpu占用量较少出现过高问题。

3、版本不兼容问题

 检查filebeat和kafka属于兼容版本,且为官方样例版本。

4、网络波动问题

和运维对接分析,考虑之前PJ及其他国际服项目,采用外网服务,网络波动相对较大。考虑往kafka发送阶段,filebeat获取kafka topic元数据相对缓慢,频繁获取可能导致负载过高。

5、向运维相关人员寻求分析CPU过高问题

检查配置海外节点均为4核左右,负载在0.3~1.7之间,CPU普遍占用量在20%~170%之间,整体负载低于50%以下,认为在合理范围内。

三、性能监控与对比分析:

①基于Filebeat配置优化处理:

max_procs: 2 参数限制核数为1核或者2核,CPU使用量在控制在可控范围内,配置后,发现CPU使用有所下降,负载在0.2~1.0之间,使用量在20%及以上,依然过高。

②各项目对比分析:

挑选国服放三3和日本PJ项目进行具体对比分析:

a、发现三国3采集的数据存在定时归档行为,海外项目归档行为人为不定期归档,数据目录过多。考虑是否为不归档造成CPU使用量过高。

b、协商运维同学对日本PJ项目aliyunjp-pj-data-logic-237-6节点的历史数据进行归档打包并压缩处理,处理后经top命令发现CPU恢复正常范围,负载明显减低,均处于20%以下,图示如下;

 

三、基于go tool pprof插件,针对韩国妖尾项目检测filebeat的CPU具体占用情况。

1、filebeat启动添加pprof功能:--httpprof 0.0.0.0:6060

2、运维安装go tool相关环境,top -cum命令查看消耗cpu的几个进程。

pirate   22429 19105  0 15:50 pts/5    00:00:00 grep --color=auto filebeat
pirate   26545     1 99 12:09 ?        07:03:57 /home/pirate/programs/filebeat/filebeat -c filebeat.yml --httpprof 0.0.0.0:6060
[pirate@kor-krft-data-40-157 ~]$ go tool pprof http://localhost:6060/debug/pprof/profile
Fetching profile over HTTP from http://localhost:6060/debug/pprof/profile
top
Saved profile in /home/pirate/pprof/pprof.filebeat.samples.cpu.002.pb.gz
File: filebeat
Build ID: 929062942e72425e2e93652bda4c5e296694c954
Type: cpu
Time: Oct 23, 2023 at 3:52pm (KST)
Duration: 30s, Total samples = 3.41s (11.37%)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) 
(pprof) top -cum
Showing nodes accounting for 0.91s, 26.69% of 3.41s total
Dropped 95 nodes (cum <= 0.02s)
Showing top 10 nodes out of 178
      flat  flat%   sum%        cum   cum%
         0     0%     0%      1.89s 55.43%  github.com/elastic/beats/filebeat/input.(*Runner).Run
         0     0%     0%      1.89s 55.43%  github.com/elastic/beats/filebeat/input.(*Runner).Start.func1
         0     0%     0%      1.89s 55.43%  github.com/elastic/beats/filebeat/input/log.(*Input).Run
         0     0%     0%      1.75s 51.32%  github.com/elastic/beats/filebeat/input/log.(*Input).scan
     0.01s  0.29%  0.29%      1.71s 50.15%  github.com/elastic/beats/filebeat/input/log.(*Input).getFiles
         0     0%  0.29%      1.33s 39.00%  path/filepath.Glob
         0     0%  0.29%      1.33s 39.00%  path/filepath.glob
     0.01s  0.29%  0.59%      1.06s 31.09%  runtime.systemstack
     0.89s 26.10% 26.69%      0.91s 26.69%  syscall.Syscall6
         0     0% 26.69%      0.68s 19.94%  syscall.fstatat

  Syscall6简介:

1、在 pprof 中,Syscall6 函数类型通常会出现在 CPU profile 的结果中,用于显示程序在运行过程中调用 Syscall6 函数的情况。Syscall6 的出现可能意味着某些操作需要与操作系统进行交互,例如文件读写、网络通信等。
2、通过查看 Syscall6 函数相关的调用栈信息,可以帮助分析和优化程序中与系统调用相关的性能问题。可以关注调用频率高的 Syscall6 函数,以确定是否存在潜在的性能瓶颈或效率低下的代码逻辑。

详细的可以通过"go tool pprof --http="0.0.0.0:8086" /home/pirate/programs/filebeat/pprof.filebeat.samples.cpu.002.pb.gz"命令显示上述cpu.002.pb.gz web界面。(注:需要安装一些go等相关环境)

pprof web主页面(有堆栈、内存、CPU各项参数,可以具体分析CPU占用相关函数等)

 

标签:Filebeat,pprof,占用,filebeat,pirate,日志,CPU
From: https://www.cnblogs.com/-courage/p/17789082.html

相关文章

  • oracle 11g 由于0rc4km05kgzb9占用undo 使用率高问题
    设置参数解决altersystemset"_smu_debug_mode"=33554432;设置这个之后v$undostat.tuned_undoretention会取(maxquerylensecs+300)和参数undo_retention里的最大值altersystemset"_undo_autotune"=false;直接禁用了AutomaticTuningofUndoRetention特性altersystem......
  • 由遍历二维数组的方式引出缓存内存cpu
    对于二维数组,想要遍历的话,一行一行读和一列一列都读可以,但是大多数情况都选择一行一行,为什么呢?涉及到一个缓存的概念,一般都是cpu去计算,它会先去缓存找,如果找不到才去内存,先说缓存,一般缓存就是类似于一行一行,有个临近效应,顺便把旁边的也读了,十分方便,这就是缓存,入股一列一列,读完......
  • docker占用磁盘太大,如何清理
    docker占用的空间可以通过下面的命令查看:dockersystemdfTYPE 列出了docker使用磁盘的4种类型,TOTAL表示该类型资源的总数,ACTIVE表示当前正在使用的数量,SIZE表示该类型资源的总大小,RECLAIMABLE表示可以回收的空间大小。Images:所有镜像占用的空间,包括拉取下来的镜像......
  • 大模型训练中CPU与GPU使用率的优化策略
    随着深度学习和人工智能的快速发展,训练模型的需求不断增加。然而,在实践中,我们经常遇到一个令人困扰的问题:当训练模型时,CPU经常达到100%的使用率,但GPU使用率却仅仅维持在5%左右。这种不均衡的使用情况导致了训练过程的缓慢,甚至可能影响模型的准确性。在了解这个问题之前,我们需要先了......
  • 如何制作CPU
    1.找一块石头2.打碎石头我已经做到这一步了,2/19=10%的进度了3.现在你有了98%的浓缩二氧化硅,将其纯化至99.9%4.进一步提纯至99.9999999%的多晶硅金属5.将多晶硅锭放入坩埚中6.将硅锭加热至1698°K7.取一小块单晶晶种并将其浸入装有熔融硅的槽中8.当晶......
  • Filebeat收集Nginx日志
    4.1为什么收集Nginx日志我们需要获取用户的信息,比如:来源的IP是哪个地域,网站的PV、UV、状态码、访问时间等等;所以需要收集Nginx日志;4.2Nginx日志收集架构图4.3Nginx日志收集实践4.3.1安装Nginxyuminstallnginx-ycat/etc/nginx/conf.d/elk.confserver{ listen5555;......
  • 查看mysql的cpu及内存占用情况
    命令:psaux可查看服务器下所有进程的cpu和内存  查看单独某个进程的cpu和内存,需要加grep进行搜索,如下:命令:psaux|grepmysql可查看mysql的CPU和内存占用情况,如图cup占用0.6  内存占用14.3 ......
  • Jtti:提高新加坡服务器CPU利用率措施有哪些
    要提高新加坡服务器的CPU利用率,通常需要优化应用程序和操作系统的配置,以确保服务器资源得到更有效地利用。以下是一些方法来提高CPU利用率:优化代码:检查您的应用程序代码,寻找潜在的性能瓶颈并进行优化。这可能包括减少不必要的循环、改进算法、使用更高效的数据结构等。并发编程:利用......
  • Filebeat收集系统日志实践
    3.1系统日志有哪些系统日志其实很宽泛、通常我们说的是messages、secure、cron、dmesg、ssh、boot等日志3.2系统日志收集思路系统中有很多日志,挨个配置收集就变得非常麻烦了。所以我们需要对这些日志进行统一、集中的管理。可以通过rsyslog将本地所有类型的日志都写入/var/l......
  • 每天5分钟复习OpenStack(六)CPU虚拟化<2>
    OpenStack是一个IAAS(基础设施即服务)因此免不了会与硬件打交道。下面我介绍下与CPU强关联的一些知识点。1什么是超配2CPU的个数是怎么统计的3vCPU的隔离、绑定1、超配在kvm虚拟化的环境中,一个vCPU本质上是一个kvm的一个线程,如果一台虚拟机有4个vCPU,对应的就是4个线程......