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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 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. 日志采集速度长期无法达到日志产生速度。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
定位技术 UED
卫星电话的工作原理简介
卫星电话的工作原理简介
294 0
|
Kubernetes Java Linux
轻量级日志系统Loki原理简介和使用(3)
轻量级日志系统Loki原理简介和使用(3)
845 0
轻量级日志系统Loki原理简介和使用(3)
|
9月前
|
数据可视化 网络协议 测试技术
03-Jmeter基本概念简介
03-Jmeter基本概念简介
|
10月前
|
监控 安全 数据安全/隐私保护
EFK实战一 - 基础环境搭建
EFK实战一 - 基础环境搭建
203 1
EFK实战一 - 基础环境搭建
|
监控 安全 数据挖掘
日志收集简介| 学习笔记
快速学习日志收集简介
118 0
|
存储 关系型数据库 MySQL
ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理(一)
ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理
ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理(一)
|
存储 关系型数据库 MySQL
ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理(二)
ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理
ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理(二)
|
存储 算法 NoSQL
轻量级日志系统Loki原理简介和使用(2)
轻量级日志系统Loki原理简介和使用(2)
556 0
轻量级日志系统Loki原理简介和使用(2)
|
存储 Prometheus 监控
轻量级日志系统Loki原理简介和使用(1)
轻量级日志系统Loki原理简介和使用(1)
641 0
轻量级日志系统Loki原理简介和使用(1)
|
Kubernetes 负载均衡 应用服务中间件
K8S原理简介及环境搭建(三)
K8S原理简介及环境搭建
150 0
K8S原理简介及环境搭建(三)