falcon 数据丢失处理方法参考


本文由 简悦 SimpRead 转码, 原文地址 www.cnblogs.com

背景: 使用 netstat -ano | grep ESTABLISH | grep 11883 监控 send_Q 和 recv_Q 的值, 由于单次推送数据量在 1w 条以上, 导致 falcon-agent 处理不过来, 造成数据丢失, 图形断点.

1, 为什么 falcon 图形会断点?

有如下两条原因:

  • tcp 连接断开,导致当前监控点无数值。
  • 数据丢失,空白点位时间段数据未上传。

2, 验证数据丢失

  • 机器上找一个长连接进行监控,并用脚本打点到日志文件,与 falcon 图形比对丢失点连接是否存在。经过实际验证,发现数据确实是 丢失 。

invalid image (图片无法加载)

  • test.sh

invalid image (图片无法加载)

  • 结果:

invalid image (图片无法加载)

3, 为什么数据会丢失?

  • 因为我们的连接数在 5k~1w 之间,

invalid image (图片无法加载)

  • 每分钟取值,并打两个指标上去,

invalid image (图片无法加载)

  • 也就是每分钟我们会推送 1w~2w 条数据到 falcon,

  • 单线程执行总花费时间 37s 左右,

  • 多线程执行总花费时间为 0s

一开始我们怀疑是单线程执行慢的原因,担心数据未完成插入,被丢弃,所以采用了拉长推送时间,改为每 2/3/5 分钟尝试,结果都是失败。

后来尝试改为多线程,但是问题依旧,后来经过讨论以及请教其它同事,怀疑是不是因为短时间内推送数据过多(根据同事提供历史单次推送在 2000 条,没有数据丢失问题),导致 falcon-agent 处理不过来,所以丢弃了部分数据。

于是在原基础上,对数据推送进行切割,分批次推送(500/List)+ 延时(20ms,避免多进程执行过快),控制数据推送总花费时间在 15s 以内,完美解决了此次数据丢失问题。
invalid image (图片无法加载)

invalid image (图片无法加载)

invalid image (图片无法加载)

总结

原因: 短时间内推送数据量过大

解决办法: 分批次推送数据 + 延时

补充知识:

1⃣️send_Q 与 recv_Q 代表什么?

https://stackoverflow.com/questions/36466744/use-of-recv-q-and-send-q?noredirect=1&lq=1
https://milestone-of-se.nesuke.com/sv-basic/linux-basic/ss-netstat/

2⃣️什么是 tcp 三次握手?

https://github.com/jawil/blog/issues/14


Jonny 2022年2月27日 13:54 984 0 条评论 收藏文檔
表情图片预览
0 条评论
  • 最早
  • 最新