Logtail从入门到精通(六):工作原理简介

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: Logtail数据采集原理介绍,包括文件采集原理以及插件采集原理。

文件采集原理


Logtail文件采集的流程包括:文件监听、文件读取、日志处理、日志过滤、日志聚合和数据发送6个环节。下面将分别进行介绍:

cdc72df3-4011-476c-907c-03bac0239cf1.png

  • 注意:本节只介绍正常运行模式中Logtail的文件采集原理,该模式下不支持采集历史文件,如有采集历史文件需求,请参考采集历史文件




文件监听


  1. 当Logtail获取到采集配置后,根据配置的日志路径、文件名、最大监控目录深度递归扫描目录下符合文件名规则的日志目录和文件。
  2. 为保证日志采集时效性以及稳定性,Logtail会对采集目录注册事件监听(Linux下Inotify、Windows下使用ReadDirectoryChangesW)以及定期轮询。
  3. 当第一次应用配置时,对于目录下存量的日志文件不会进行采集,直到文件在配置应用后产生修改事件才会采集。
  4. 当监听到文件修改后,会进入文件读取环节。


文件读取


  1. 每次Logtail读取会从该文件上一次读取的偏移处开始。
  2. 若该文件首次读取,会检查该文件大小,若文件小于1MB,则从文件头开始读取,否则从文件尾1MB处开始读取。
  3. 每次读取最多512KB数据,因此一条日志最大支持512KB。


日志处理


  1. 对于读取的数据块,会根据行首配置进行分行,切分成多条日志。
  2. 对于每条日志内容执行对应的解析,例如正则、分隔符、JSON等。
  3. 若未配置时间字段,则日志时间为当前解析时间;若配置了时间提取字段,则从解析的日志字段中提取时间,若时间距离当前时间超过12小时,则丢弃该日志并上传错误信息。
  4. 若该日志可以被正确解析,则进入日志过滤环节。
  5. 若该日志解析失败且开启 高级配置中的丢弃解析失败日志,则直接丢弃该日志,并上报解析失败的报错信息
  6. 若该日志解析失败,但未开启 高级配置中的丢弃解析失败日志,则将解析失败的原始日志上传,其中Key为raw_log、Value为日志内容


日志过滤


  1. 若用户未设置 高级配置 中的 过滤器配置,则跳过日志过滤环节。
  2. 若用户已经设置过滤器配置,则会对每条日志中的所有字段进行遍历并验证。
  3. 只有过滤器中配置的所有字段都在该日志出现,且所有对应的字段全部符合过滤器配置时,日志才会被采集,否则丢弃该日志。


日志聚合


  1. 为降低网络请求次数,当日志处理、过滤完毕后,会在Logtail内部缓存一段时间再进行发送。
  2. 缓存规则有3条,任一一条满足则触发发送:
  1. 日志聚合时间超过3秒
  2. 日志聚合条数超过4096条
  3. 日志聚合总大小超过1MB


日志发送


  1. 日志发送前会进行压缩,目前Logtail采用的是LZ4压缩算法。
  2. 日志发送受限于max_bytes_per_secsend_request_concurrency 限制,Logtail会保证发送速率以及并发不超过配置值,具体参数请参考启动参数配置
  3. 若数据发送失败,则根据错误信息选择重试还是丢弃数据:
  1. 401错误,说明没有权限采集数据,直接丢弃。
  2. 404错误,说明project或logstore不存在,直接丢弃。
  3. 403错误,Quota超限,等待3秒后重试。
  4. 500错误,等待3秒后重试。
  5. 网络超时,等待3秒后重试。


插件采集原理


Logtail的插件采集流程主要包括以下环节:插件数据采集、数据处理、日志聚合和日志发送。


插件数据采集


插件数据采集的原理在每个插件的文档中都有介绍,具体请参见各个插件的帮助文档。


aefd4313-e203-4918-bd60-db80c8c521f4.png


数据处理


插件数据处理逻辑请参考插件-数据处理


日志聚合


插件的日志聚合逻辑和文件采集的日志聚合逻辑一致。


日志发送


插件的日志发送逻辑和文件采集的日志发送逻辑一致。


资源限制


Logtail会根据配置文件中的资源限制进行工作,若资源占用长时间(5分钟)超过限定值,则Logtail会进行强制重启。重启后可能会产生一定的数据重复。


数据采集可靠性


Logtail在采集数据时,会定期将采集的点位(CheckPoint)信息保存到本地,若遇到宕机、Crash等异常时,Logtail再次启动会从上一次记录的位置处开始采集数据,尽可能保证数据不丢失。


Logtail内部采用了很多机制提升日志采集可靠性,但并不能保证日志绝对不会丢失。以下情况可能造成日志丢失:


  1. Logtail未运行且日志轮转多次。
  2. 日志轮转速度极快,例如1秒轮转1次。
  3. 日志采集速度长期无法达到日志产生速度。
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
运维 Kubernetes Cloud Native
腾讯云私有云平台运维面试
根据会议将面试问题进行总结,很多问题感觉当时没回答好,这是为啥呢?应该还是不熟练吧,或者不善于表达。将次经历分享出来,大家多练练。
1052 0
|
存储 算法 Linux
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
640 0
|
监控 Java Go
深入探索 RUM 与全链路追踪:优化数字体验的利器
本文主要介绍了基于 OpenTeletemetry 与 W3C 协议构建端到端全链路的解决方案,同时探讨了 RUM 与端到端链路集成的最佳实践,希望可以为大家在生产环境落地应用提供一些参考。
1013 116
|
Kubernetes 测试技术 微服务
Kruise Rollout 全链路灰度实践
OpenKruise 是一个基于 Kubernetes 的扩展套件,主要聚焦于云原生应用的自动化,比如部署、发布、运维以及可用性防护。本文介绍通过 OpenKruise 构建自动化运维的方式实现基于 Istio 的全链路灰度功能。
48642 252
|
Java 开发者 Spring
Spring高手之路24——事务类型及传播行为实战指南
本篇文章深入探讨了Spring中的事务管理,特别是事务传播行为(如REQUIRES_NEW和NESTED)的应用与区别。通过详实的示例和优化的时序图,全面解析如何在实际项目中使用这些高级事务控制技巧,以提升开发者的Spring事务管理能力。
463 1
Spring高手之路24——事务类型及传播行为实战指南
|
分布式计算 资源调度 Hadoop
Hadoop 2.0 与 Hadoop 1.x 有何不同?
【8月更文挑战第12天】
426 4
|
机器学习/深度学习 网络协议 C语言
程序技术好文:网络编程中的SIGPIPE信号
程序技术好文:网络编程中的SIGPIPE信号
550 0
|
Ubuntu Linux
Pi(树莓派/香蕉派/NanoPi/香橙派)Ubuntu换KDE桌面
由于自带的Ubuntu桌面太丑了~ 所以换KDE虽然不推荐搭建使用图形,但是有时候还是需要的~ 比如当作桌面系统使用的时候 KDE #添加PPA源 sudo add-apt-repository ppa:kubuntu-ppa/backpo...
4561 0
|
分布式计算 Prometheus 资源调度
分布式计算引擎 Flink/Spark on k8s 的实现对比以及实践
以 Flink 和 Spark 为代表的分布式流批计算框架的下层资源管理平台逐渐从 Hadoop 生态的 YARN 转向 Kubernetes 生态的 k8s 原生 scheduler 以及周边资源调度器,比如 Volcano 和 Yunikorn 等。这篇文章简单比较一下两种计算框架在 Native Kubernetes 的支持和实现上的异同,以及对于应用到生产环境我们还需要做些什么。
2000 55
分布式计算引擎 Flink/Spark on k8s 的实现对比以及实践
|
分布式计算 Prometheus 资源调度
分布式计算引擎 Flink/Spark on k8s 的实现对比以及实践
以 Flink 和 Spark 为代表的分布式流批计算框架的下层资源管理平台逐渐从 Hadoop 生态的 YARN 转向 Kubernetes 生态的 k8s 原生 scheduler 以及周边资源调度器,比如 Volcano 和 Yunikorn 等。这篇文章简单比较一下两种计算框架在 Native Kubernetes 的支持和实现上的异同,以及对于应用到生产环境我们还需要做些什么。
886 54
分布式计算引擎 Flink/Spark on k8s 的实现对比以及实践