You need to enable JavaScript to run this app.
导航
LogCollector 限制说明
最近更新时间:2024.05.13 16:04:11首次发布时间:2023.05.10 14:20:18

通过 LogCollector 采集日志数据时,请注意以下使用限制。

说明

本文档中的限制说明基于 LogCollector 最新正式版本。查看 LogCollector 版本号的步骤请参考查看软件版本,LogCollector版本说明请参考LogCollector 版本说明

运行环境

限制项

说明

体系结构

  • LogCollector 支持 Linux x86_64 架构,已经过兼容性测试的操作系统版本请参考安装环境
  • 暂不支持 ARM 架构。
  • 暂不支持 Windows 系统安装 LogCollector。

系统环境

Linux Kernel 2.6.32 及以上版本。

Kubernetes

使用 DaemonSet 方式采集日志时,应使用 Kubernetes 1.10.0 或以上版本,即支持 Mount propagation: HostToContainer 的版本。

文件采集

限制项

说明

日志采集长度

单条日志最大长度为 512 KiB。

  • LogCollector 1.0.48 及后续版本:如果单条日志超出 512 KiB,日志会被拆分为多条进行采集。例如单条日志长度为 1048 KiB,则会被拆分成三条日志,第一条日志长度为 512 KiB,第二条日志长度为 512 KiB,第三条日志长度为 24 KiB。
  • LogCollector 1.0.48 之前版本:如果单条日志超出 512 KiB,超出部分将被截断;如果单条日志超出 2 MiB,整条日志将被丢弃。

日志聚合上传

LogCollector 会将同一文件的日志自动聚合上传。相较于逐条上传日志的方式,聚合日志可以显著减少网络请求次数,提高日志上传的吞吐量。
聚合条件为:日志超过 8192 条、日志总大小超过 4 MiB 或者日志采集时间超过 3 秒,任一条件满足则触发聚合。

键值索引字段数量

单个日志主题中,键值索引字段的最大数量为 100 个。

日志轮转

LogCollector 支持轮转场景的日志采集。
应用程序通常配置了日志轮转规则,以避免日志文件过大,占满磁盘空间。常见的日志轮转规则为 rename,表示根据文件大小或日期进行轮转,即重命名原日志文件,并新建原名的空日志文件以供新日志写入。例如原日志文件为 bar.log,轮转后会生成 bar.log.1bar.log.2 等日志文件。
对于日志轮转场景,您可以正常配置日志采集路径与文件名,LogCollector 会自动识别轮转前后的日志文件。例如设置采集的文件名为 bar.log,LogCollector 会监测日志的轮转过程,保证日志数据完整、有序。

说明

  • 仅支持频率大于 10 秒/次的日志轮转场景。如果日志轮转过于频繁,例如 LogCollector 的采集读取远落后于日志轮转的速度,LogCollector 仅监听最早的 20 个轮转文件,从而可能导致部分轮转文件尚未被采集就被新日志覆盖。
  • 推荐使用 rename 日志轮转模式。如果使用 copytruncate 日志轮转模式,LogCollector 存在采集延迟时,日志文件轮转会导致延迟采集的日志丢失。
  • 如果在 LogCollector 重启过程中发生日志轮转,可能造成日志丢失。

采集历史日志文件

LogCollector 支持采集历史日志文件。对于采集配置中匹配到的日志文件,LogCollector 会并发采集,包括历史日志文件。这种场景下可能会造成日志乱序,即预览日志文件或查看上下文时,日志数据可能会乱序展示。

说明

LogCollector 使用 inode 来标识日志文件。使用 vim 编辑日志文件时,vim 会修改日志文件的 inode,导致 LogCollector 将其视为全新的日志文件并从头开始采集其中的日志数据。

监控文件数量

每台宿主机或容器中的 LogCollector 客户端同时可监控最多 10000 个日志文件。超出数量限制时,其他文件暂时无法被监控。
当监控中的某个文件被采集完毕并且超过 1 分钟仍然没有写入新日志时,LogCollector 将释放该文件的句柄,此时因监控文件数量超限而无法被监控的某个日志文件将加入监控范围。

正则匹配与过滤

在单行完整正则、多行完整正则模式和高级配置 > 过滤器配置中,日志服务支持 PCRE 的正则表达式标准。

容器采集

限制项

说明

挂载方式

容器内日志文件的采集路径目前仅支持“不挂载”、“emptyDir 挂载”和“hostPath 挂载” 3 种方式。

软链接

采集容器文件中的日志时,不支持目录及文件的软连接。

容器生命周期

默认情况下,容器生命周期至少应在 10 秒以上,LogCollector 才能采集到日志。若有更短容器生命周期的采集需求,请提工单联系技术支持。

K8s 集群规模

LogCollector 通过 K8s ListWatch 机制来监听容器的事件。在集群节点数大于 1000 等集群规模较大的场景下,建议在 K8s ApiServer 侧针对 ListWatch 进行限流,避免大量 ListWatch 请求造成 K8s ApiServer 负载过大、业务时延增大。

工作负载

采集 StatefulSet 类型的 Pod 时,Pod 的删除或者扩缩容不会删除 StatefulSet 关联的 Volume。因此 Volume 中可能存在历史 Pod 信息,在特定情况下(例如采集路径使用了 /xxx/POD_{__pod_name__}*/xxx),StatefulSet 发生扩缩容会导致重复采集历史 Pod 中的日志文件。

采集配置

限制项

说明

配置更新生效的延时

从通过 API 或者控制台更新的采集配置到 LogCollector 客户端配置生效的延时约为 30 秒。

配置动态加载

支持动态加载配置,且其中某一配置的更新不影响其他配置。

单个 LogCollector 可加载配置数

理论上无限制。建议一台服务器中的 LogCollector 采集配置数不超过 100 个。

单个文件匹配的采集配置数量

单个文件只能匹配一个采集配置,若同一个文件同时匹配多个采集配置时,仅创建时间最新的采集配置会生效。