日志服务
限制项 | 说明 |
体系结构 |
|
系统环境 | Linux Kernel 2.6.32 及以上版本。 已经过兼容性测试的操作系统版本:
|
Kubernetes |
|
限制项 | 说明 |
日志采集长度 | 单条日志最大长度为 512KiB。
|
日志没有以换行符结尾 | 当 LogCollector 读取到没有以换行符结尾的日志时,LogCollector 默认会等待 5 秒,然后上传这条日志。 |
日志文件大小 | 无限制。 |
日志文件编码 | 支持 UTF-8 编码的日志文件。 |
日志聚合上传 | LogCollector 会将同一文件的日志自动聚合上传。相较于逐条上传日志的方式,聚合日志可以显著减少网络请求次数,提高日志上传的吞吐量。 聚合条件如下,任一条件满足则触发聚合。
|
日志文件轮转 | LogCollector 支持当日志文件达到一定大小或时间限制时,使用轮转场景采集日志。
|
日志文件的首次采集位置 | LogCollector 支持采集历史日志文件和新日志文件。LogCollector 会定时扫描采集路径匹配的日志文件,包括历史日志文件和新日志文件,然后并发采集。LogCollector 同时会通过 inotify 监控新日志文件的写入事件,然后并发采集。
|
忽略历史日志文件 | LogCollector 默认会忽略 30 天没有被更新的日志文件。 |
日志文件标识 | LogCollector 使用 inode、device 和前 1024 个字节的校验和来唯一标识日志文件。 说明
|
采集文件数量 | LogCollector 最多能同时采集 10,000 个日志文件。待采集的日志文件数量超出 10,000 时,超出的日志文件暂时无法被采集。 |
采集路径通配符 | LogCollector 采集路径支持通配符星号 *、双星号**、问号?。
|
扫描日志文件周期 | LogCollector 每隔 10 秒扫描一次,发现与采集路径匹配的日志文件。 |
扫描日志文件数量 | LogCollector 单次扫描最多能够扫描 100,000 个日志文件。如果采集路径匹配的日志文件数量超过100,000,那么只有 100,000 个日志文件被扫描,其他日志文件无法被扫描。 |
inotify 数量 | LogCollector 最多持有 16 个 inotify 实例。 一个采集 pipeline 独占一个 inotify 实例。如果采集 pipeline 的数量超过 16,那么只有 16 个采集 pipeline 能够成功获取到 inotify 实例,并使用定期扫描和 inotify 实时监控发现待采集的日志文件,其他采集 pipeline 无法获取到 inotify 实例,只能使用定期扫描发现待采集的日志文件。 说明
|
inotify 监控的日志目录数量 | 单个 inotify 实例最多能够监控的日志目录个数。
inotify 实例只监控日志目录,不监控日志文件。如果需要被监控的日志目录数量超过最多监控日志目录数量,那么超出部分的日志目录无法被监控。
|
日志文件的句柄释放策略 | 当 LogCollector 持续读取到日志文件结束符 EOF 的时间超过 60 秒时,LogCollector 将关闭日志文件的句柄。LogCollector 还支持其他日志文件句柄释放策略,包括:
|
一个日志文件匹配多个采集配置 | 当一个日志文件匹配多个采集配置时,LogCollector 会尽可能地保证日志文件被最新创建的采集配置所采集。 说明 部分场景可能会出现不符合预期的情况:
|
软链接 | 物理机部署环境中,LogCollector 支持采集软链接。
|
正则表达式 | 支持 Perl 兼容正则表达式。 |
JSON |
分类 | 限制项 | 说明 |
通用限制 | Kubernetes 容器生命周期 | |
| Kubernetes Pod销毁事件 | 接收到 Kubernetes Pod 销毁事件时,LogCollector 不会立即停止采集该 Pod 内的容器日志,而是会额外采集 15 秒后释放该 Pod 内容器的文件句柄,这可能会延长 Pod 的销毁时间。 |
| 容器运行时 | LogCollector 支持 Docker 和 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 参数以避免日志丢失。 |
限制项 | 说明 |
磁盘带宽限流 | 根据系统配置资源变化,自动对磁盘(或存储设备)的读写数据传输速率进行限流。 限流阈值计算公式:内存大小 * 0.05 * 2 |
网络带宽限流 | 根据系统配置资源变化,自动对网络传输最大速率进行限流。 限流阈值计算公式:带宽大小 * 0.05 * 2 |