You need to enable JavaScript to run this app.
文档中心
日志服务

日志服务

复制全文
下载 pdf
LogCollector 简介
LogCollector 限制说明
复制全文
下载 pdf
LogCollector 限制说明
通过 LogCollector 采集日志数据时,请注意以下使用限制。​
说明​
本文档中的限制说明基于 LogCollector 最新正式版本。查看 LogCollector 版本号的步骤请参考2 查看软件版本,LogCollector版本说明请参考LogCollector 版本说明。​
在使用LogCollector采集日志的过程中,如下情况系统会自动重试,如自动重试后仍失败,请联系研发排查原因:​
  • 资源配额超限:当写入数据量持续5分钟超出已有分区的服务能力时,LogCollector会自动重试。​
  • 开启了自动分裂日志分区,系统会自动分裂分区以增加分区数量。​
  • 未开启自动分裂日志分区,手动调整日志分区数量。​
  • 网络异常:客户端超过60s未接收到服务端的响应数据时,客户端会自动重试,可能导致数据重复采集。​
  • 程序异常:程序出现异常时,如异常退出会自动重试,可能导致数据重复采集。​
运行环境​
​
限制项​
说明​
体系结构​
  • LogCollector 支持 Linux x86_64、 ARM 架构。​
  • 暂不支持 Windows 系统。​
系统环境​
Linux Kernel 2.6.32 及以上版本。​
已经过兼容性测试的操作系统版本:​
  • Ubuntu 16.04、Ubuntu 18.04、Ubuntu 20.04、Ubuntu 22.04、Ubuntu 24.04​
  • CentOS 7、CentOS 8、CentOS 9、CentOS Stream8、CentOS Stream9​
  • Debian 8、Debian 9、Debian 10、Debian 11、Debian 12​
  • veLinux 1、veLinux 2​
  • Rocky Linux 8、Rocky Linux 9​
  • AlmaLinux 8、AlmaLinux 9​
  • OpenSUSE 15、OpenSUSE 42​
Kubernetes​
  • 使用 DaemonSet 方式采集日志时,应使用 Kubernetes 1.10.0 或以上版本,即支持 Mount propagation: HostToContainer 的版本。​
  • 使用 CRD 方式采集容器日志时,应使用 Kubernetes 1.16.0 及以上版本。​
  • Kubernetes 1.7.0 及以上版本提供的 apiextensions.k8s.io/v1beta1 API 也支持 CRD 能力,但 Beta 版本的 API 稳定性取决于具体的 Kubernetes 版本,稳定性未知。​
​
文件采集​
​
限制项​
说明​
日志采集长度​
单条日志最大长度为 512KiB。​
  • LogCollector 2.1.0 及后续版本:支持通过启动参数 log_max_bytes 调整单条日志的最大长度,最大不能超过 8MiB。具体操作,请参考设置启动参数。​
  • LogCollector 1.0.48 及后续版本:如果单条日志超出 512 KiB,日志会被拆分为多条进行采集。例如单条日志长度为 1048 KiB,则会被拆分成三条日志,第一条日志长度为 512 KiB,第二条日志长度为 512 KiB,第三条日志长度为 24 KiB。​
  • LogCollector 1.0.48 之前版本:如果单条日志超出 512 KiB,超出部分将被截断;如果单条日志超出 2 MiB,整条日志将被丢弃。​
日志没有以换行符结尾​
当 LogCollector 读取到没有以换行符结尾的日志时,LogCollector 默认会等待 5 秒,然后上传这条日志。​
日志文件大小​
无限制。​
日志文件编码​
支持 UTF-8 编码的日志文件。​
日志聚合上传​
LogCollector 会将同一文件的日志自动聚合上传。相较于逐条上传日志的方式,聚合日志可以显著减少网络请求次数,提高日志上传的吞吐量。​
聚合条件如下,任一条件满足则触发聚合。​
  • LogCollector 2.3.2 及后续版本:日志超过 4000 条、总大小超过 512KiB 、聚合时间超过 3 秒​
  • LogCollector 2.3.2 之前版本:日志超过 1024 条、总大小超过 512KiB 、聚合时间超过 3 秒​
日志文件轮转​
LogCollector 支持当日志文件达到一定大小或时间限制时,使用轮转场景采集日志。​
  • 轮转方式​
  • rename 日志文件轮转(推荐):将当前的日志文件重命名为一个新的文件名,例如添加时间戳或序号,然后创建一个新的日志文件,并继续写入新的日志。​
  • copytruncate 日志文件轮转:将当前的日志文件复制到一个新的日志文件中,例如添加时间戳或序号,然后清空原日志文件,并继续写入新的日志。​
  • 采集配置​
  • 需确保采集规则的采集路径能匹配轮转后的文件名。推荐使用 rename 轮转方式和通配符匹配以保证采集到完整日志。​
  • 例如原日志文件为 bar.log,轮转后生成 bar.log.1、bar.log.2 文件。​
  • 当采集路径配置为 bar.log,日志文件轮转前 10s 可能会丢失日志。​
  • 当采集路径配置为 bar.log*,可采集到完整日志,但使用 copytruncate 轮转方式时会存在日志重复采集。​
  • 注意事项​
  • LogCollector 仅同时采集最多 20 个轮转日志文件,超过的轮转日志无法被采集。如果日志文件轮转过于频繁,短时间内轮转创建大量的日志文件,可能导致部分轮转日志文件尚未被采集就被删除,从而导致日志丢失。​
日志文件的首次采集位置​
LogCollector 支持采集历史日志文件和新日志文件。LogCollector 会定时扫描采集路径匹配的日志文件,包括历史日志文件和新日志文件,然后并发采集。LogCollector 同时会通过 inotify 监控新日志文件的写入事件,然后并发采集。​
  • 历史日志文件:LogCollector 会从上次采集结束的位置继续开始采集。​
  • 新日志文件:如果新日志文件小于等于增量采集回溯量,那么 LogCollector 会从新日志文件的起始位置开始首次采集。如果新日志文件的大小大于增量采集回溯量,那么 LogCollector 会从新日志文件的末尾位置减去增量采集回溯量开始首次采集。​
忽略历史日志文件​
LogCollector 默认会忽略 30 天没有被更新的日志文件。​
日志文件标识​
LogCollector 使用 inode、device 和前 1024 个字节的校验和来唯一标识日志文件。​
说明​
  • 使用 vim 修改日志文件时,vim 会重建日志文件,导致日志文件的 inode 发生变化,LogCollector 会将其视为全新的日志文件并从头开始采集其中的日志。​
  • 当日志文件被 truncate 时,日志文件的前 1024 个字节内容会发生变化,导致日志文件的前 1024 个字节的校验和(Checksum)发生变化,因此 LogCollector 会将其视为全新的日志文件并从头开始采集其中的日志。​
采集文件数量​
LogCollector 最多能同时采集 10,000 个日志文件。待采集的日志文件数量超出 10,000 时,超出的日志文件暂时无法被采集。​
采集路径通配符​
LogCollector 采集路径支持通配符星号 *、双星号**、问号?。​
  • * 表示任意多个字符(目录分隔符 / 除外)。​
  • ? 表示任意单个字符(目录分隔符 / 除外)。​
  • ** 表示任意多个字符(包括目录分隔符 /)。​
  • LogCollector 采集路径中,双星号**通配符最多配置一个。​
  • 日志采集路径中指定通配符 ** 时,表示多层目录匹配,仅在此时,日志服务才会监听指定目录下深至 8 级的子目录。例如采集路径是 /var/**/a.log,LogCollector 将默认解析为 /var/a.log,/var/*/a.log,/var/*/*/a.log,/var/*/*/*/a.log,/var/*/*/*/*/a.log,/var/*/*/*/*/*/a.log,/var/*/*/*/*/*/*/a.log,/var/*/*/*/*/*/*/*/a.log,/var/*/*/*/*/*/*/*/*/a.log。​
扫描日志文件周期​
LogCollector 每隔 10 秒扫描一次,发现与采集路径匹配的日志文件。​
扫描日志文件数量​
LogCollector 单次扫描最多能够扫描 100,000 个日志文件。如果采集路径匹配的日志文件数量超过100,000,那么只有 100,000 个日志文件被扫描,其他日志文件无法被扫描。​
inotify 数量​
LogCollector 最多持有 16 个 inotify 实例。​
一个采集 pipeline 独占一个 inotify 实例。如果采集 pipeline 的数量超过 16,那么只有 16 个采集 pipeline 能够成功获取到 inotify 实例,并使用定期扫描和 inotify 实时监控发现待采集的日志文件,其他采集 pipeline 无法获取到 inotify 实例,只能使用定期扫描发现待采集的日志文件。​
说明​
  • 物理机场景下,一个采集 pipeline 为一个采集规则。​
  • 容器场景下,一个采集 pipeline 为一个采集规则及其匹配的一个容器。​
inotify 监控的日志目录数量​
单个 inotify 实例最多能够监控的日志目录个数。​
  • LogCollector 2.3.x 及以后版本:1000​
  • LogCollector 2.3.x 以前版本:200​
inotify 实例只监控日志目录,不监控日志文件。如果需要被监控的日志目录数量超过最多监控日志目录数量,那么超出部分的日志目录无法被监控。​
  • 当被监听目录下的目录项缓存(dentry cache)数量达到千万级别时,使用 inotify 机制对该目录进行监听,可能会引发 CPU 出现毫秒级的卡顿现象。​
  • 支持配置启动参数 input.log.enable_inotify关闭 inotify 机制,关闭后只能使用定期扫描发现待采集的日志文件,可能存在漏采集的日志。​
日志文件的句柄释放策略​
当 LogCollector 持续读取到日志文件结束符 EOF 的时间超过 60 秒时,LogCollector 将关闭日志文件的句柄。LogCollector 还支持其他日志文件句柄释放策略,包括:​
  • 当日志文件被删除时,关闭文件句柄。​
  • 当日志文件被重命名时,关闭文件句柄。​
  • 当 LogCollector 读取到日志文件 EOF 时,关闭文件句柄。​
  • 当 LogCollector 读取日志文件的时间超过多少秒时,关闭文件句柄。​
一个日志文件匹配多个采集配置​
当一个日志文件匹配多个采集配置时,LogCollector 会尽可能地保证日志文件被最新创建的采集配置所采集。​
说明​
部分场景可能会出现不符合预期的情况:​
  • 多个采集规则都采集某个日志文件的全部日志。​
  • 多个采集规则都只采集某个日志文件的部分日志。​
软链接​
物理机部署环境中,LogCollector 支持采集软链接。​
  • 单个采集配置同时匹配软链接和软链接所指向的实际文件的场景下,LogCollector 只会采集软链接或其指向的实际文件,不会同时采集两者。因此,日志携带的 __path__ 元数据可能为软链接的路径,也可能为软链接所指向的实际文件的路径。​
  • 如果是通过定期扫描发现的日志文件,那么 LogCollector 会选择采集路径字典序较小的日志文件,因此 __path__ 元数据可能为软链接的路径,也可能为软链接所指向的实际文件的路径。​
  • 如果是通过 inotify 发现的日志文件,那么 LogCollector 只会选择采集软链接指向的实际文件,因此 __path__ 元数据只会为软链接所指向的实际文件的路径。​
正则表达式​
支持 Perl 兼容正则表达式。​
JSON​
支持标准JSON(RFC7159、ECMA-404)。​
​
容器采集​
通过LogCollector采集容器日志时,除上述文件采集的限制项外,还存在如下限制项。​
​
分类​
限制项​
说明​
通用限制​
Kubernetes 容器生命周期​
默认情况下,容器生命周期至少应在 10 秒以上,LogCollector 才能采集到日志。若有更短容器生命周期的采集需求,请通过工单系统联系技术支持。​
​
Kubernetes Pod销毁事件​
接收到 Kubernetes Pod 销毁事件时,LogCollector 不会立即停止采集该 Pod 内的容器日志,而是会额外采集 15 秒后释放该 Pod 内容器的文件句柄,这可能会延长 Pod 的销毁时间。​
您可以通过启动参数 cleanup_timeout 调整额外的采集时间。具体操作,请参考设置启动参数。​
​
容器运行时​
LogCollector 支持 Docker 和 Containerd 两种容器运行时。​
  • Docker:LogCollector 通过 /run/docker.sock 访问 Docker 容器运行时,请确保该路径存在且具备访问权限。​
  • Containerd:LogCollector 通过 /run/containerd/containerd.sock 访问 Containerd 容器运行时,请确保该路径存在且具备访问权限。​
​
工作负载​
使用 Daemonset 部署 LogCollector 后,LogCollector 会通过 Kubernetes ApiServer list-watch Pod/ReplicaSet/Job 资源。 当 Kubernetes 资源数量过多时,可能会造成 Kubernetes ApiServer 负载过高。如有以上情况,请通过工单系统联系技术支持。​
容器内日志文件​
挂载方式​
容器内日志文件的采集路径目前仅支持“不挂载”、“emptyDir 挂载”和“hostPath 挂载” 3 种方式。​
​
软链接​
容器内日志文件不支持软链接。​
​
rootfs​
如果使用 Containerd 作为容器运行时,且日志所在目录没有使用 hostPath 挂载时,LogCollector 将使用 /run/containerd 或者 /var/run/containerd 目录来尝试发现容器的rootfs。 暂不支持将 containerd 的容器路径挂载到其他路径。​
​
Job 工作负载​
针对 Job 工作负载类型的 Kubernetes Pod,销毁 Pod 之前 Kubernetes 会首先清理 Pod 内容器的资源(例如 rootfs 下的文件句柄),因为 LogCollector 没有接收到 Kubernetes Pod 销毁事件,所以 LogCollector 不会释放正在采集的日志文件句柄,导致 Kubernetes Pod 销毁时间延长。建议使用“emptyDir 挂载”和“hostPath 挂载”,不要使用“不挂载”。​
容器标准输出​
标准输出日志驱动​
如果使用 Docker 作为容器运行时,必须在 Docker 的配置文件 daemon.json 中添加 "log-driver": "json-file"。​
​
标准输出日志轮转​
容器标准输出的标准输出文件由 docker 或 kubelet 进行日志文件轮转。其中,kubelet 日志文件轮转的大小默认为 10MB,如果容器每秒标准输出的速率大于 10MB/s,将导致标准输出文件快速轮转,建议改用容器内日志文件方式进行采集或修改 kubelet 的 containerLogMaxSize 参数以避免日志丢失。​
​
采集配置​
​
限制项​
说明​
采集配置更新生效的延时​
从通过 API 或者控制台更新的采集配置到 LogCollector 客户端配置生效的延时约为 60 秒。​
采集配置动态加载​
LogCollector 支持动态加载采集配置,且其中某一采集配置的更新不影响其他配置。​
单个 LogCollector 可加载配置数​
理论上无限制。建议一台服务器中的 LogCollector 采集配置数不超过 100 个。​
多账号采集​
请通过工单系统联系技术支持。​
多地域采集​
请通过工单系统联系技术支持。​
​
采集性能​
​
限制项​
说明​
磁盘带宽限流​
根据系统配置资源变化,自动对磁盘(或存储设备)的读写数据传输速率进行限流。​
限流阈值计算公式:内存大小 * 0.05 * 2​
网络带宽限流​
根据系统配置资源变化,自动对网络传输最大速率进行限流。​
限流阈值计算公式:带宽大小 * 0.05 * 2​
​
​
最近更新时间:2026.08.26 11:39:27
这个页面对您有帮助吗?
有用
有用
无用
无用