云优cms采集插件(Logtail数据采集原理介绍-上海怡健医学())
优采云 发布时间: 2021-10-10 23:28云优cms采集插件(Logtail数据采集原理介绍-上海怡健医学())
摘要:Logtail数据采集的原理介绍,包括文件采集的原理和插件采集的原理。
文档采集原则
Logtail文件采集的过程包括:文件监控、文件读取、日志处理、日志过滤、日志聚合、数据发送。下面将分别介绍:
文件监控
Logtail获取采集配置后,根据配置的日志路径、文件名和最大监控目录深度,递归扫描符合文件名规则的日志目录和目录中的文件。为了保证日志采集的及时性和稳定性,Logtail会监控采集目录注册事件(Linux下为Inotify,Windows下为ReadDirectoryChangesW)并定期轮询。第一次应用配置时,不会对目录中存储的日志文件执行采集,并且在应用配置后修改文件才会执行采集。当*敏*感*词*到文件修改时,会进入文件读取链接。
文件读取
每次 Logtail 读取都会从文件的最后一次读取的偏移量开始。如果是第一次读取文件,则会检查文件大小。如果文件小于 1MB,则从文件开头读取,否则从文件末尾 1MB 读取。一次最多读取512KB的数据,所以一个日志最大支持512KB。
日志处理
对于读取的数据块,会根据行首的配置进行分支,分成多个日志。对每个日志内容进行相应的分析,如regular、separator、JSON等。如果没有配置时间字段,则日志时间为当前分析时间;如果配置了时间提取字段,则从解析的日志字段中提取时间;如果时间与当前时间相差12小时以上,则丢弃日志并上传错误信息。如果可以正确解析日志,则进入日志过滤链接。如果日志解析失败,并且在高级配置中开启了discard解析失败日志,则直接丢弃该日志并上报解析失败的错误信息。如果日志解析失败,但是高级配置中的discard解析失败日志没有开启,日志会被解析。原创日志上传失败,其中Key为__raw_log__,Value为日志内容
日志过滤
如果用户没有在高级配置中设置过滤配置,日志过滤链接将被跳过。如果用户设置了过滤器配置,每个日志中的所有字段都会被遍历和验证。只有当过滤器中配置的所有字段都出现在日志中,并且所有对应的字段都满足过滤器配置时,日志才会为采集,否则日志将被丢弃。
日志聚合
为了减少网络请求次数,日志处理和过滤完成后,会在Logtail中缓存一段时间后再发送。有3条缓存规则,任意一条都会触发发送:日志聚合时间超过3秒,日志聚合次数超过4096条,日志聚合总大小超过1MB
日志发送
日志在发送前会被压缩,目前Logtail使用的是LZ4压缩算法。日志发送受 max_bytes_per_sec 和 send_request_concurrency 限制。Logtail 会保证发送速率和并发数不超过配置值。具体参数请参考启动参数配置。如果数据发送失败,根据错误信息选择是重试还是丢弃数据:401 error,表示没有采集数据的权限,直接丢弃即可。404错误,表示项目或logstore不存在,直接丢弃即可。403 错误,配额超出限制,请等待 3 秒并重试。500 错误,等待 3 秒,然后重试。网络超时,请等待 3 秒,然后重试。插件采集原理
Logtail的插件采集流程主要包括以下几个环节:插件数据采集、数据处理、日志聚合、日志发送。
插件数据采集
插件数据采集的原理在每个插件的文档中都有介绍。具体请参考各插件的帮助文档。
数据处理
插件数据处理逻辑请参考插件数据处理。
日志聚合
插件的日志聚合逻辑与文件采集的日志聚合逻辑一致。
日志发送
插件的日志发送逻辑与文件采集的日志发送逻辑一致。
资源限制
Logtail 会根据配置文件中的资源限制来工作。如果资源使用量长时间(5分钟)超过限制,Logtail会强制重启。重启后可能会出现一定的数据重复。
数据采集 可靠性
在采集的数据中,Logtail会定期将采集的checkpoint信息保存到本地。如果遇到宕机或者死机等异常,Logtail会从上次记录的位置重新开始,以采集数据开始,尽量保证数据不丢失。
Logtail使用了很多机制来提高日志采集的可靠性,但是不能保证日志永远不会丢失。以下情况可能会导致日志丢失:
Logtail 未运行且日志轮换多次。日志旋转速度极快,例如每秒一次。日志采集速度长期达不到日志生成速度。