本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍Logtail的使用限制。
运行环境
限制项 | 限制说明 |
体系结构 |
|
内存 | 负载为空时,不开启插件最少需要20 MB内存,开启插件最少需要120 MB内存。 实际使用量与采集速率、监控目录和文件数量、发送阻塞程度有关。 |
系统环境 |
|
Kubernetes |
|
Docker | 采集容器标准输出的限制说明如下:
|
ACK logtail-ds组件 |
重要 以上组件均为system-cluster-critical优先级,集群资源不足时请勿部署,否则可能驱逐节点上原有的Pod。 |
文件采集
限制项 | 限制说明 |
单条日志长度 | 默认限制为512 KB。您可通过启动参数max_read_buffer_size进行调整,最大不能超过8 MB。具体操作,请参见设置Logtail启动参数。 多行日志按行首正则表达式划分后,每条日志大小限制仍为512 KB。如果日志超过512 KB,会被强制拆分为多条进行采集。例如:单条日志大小为1025 KB,则第一次处理512 KB,第二次处理512 KB,第三次处理1 KB,最终采集结果为多条不完整的日志。 |
文件编码 | 支持UTF-8或GBK的编码日志文件,建议使用UTF-8编码获得更好的处理性能。 警告 如果日志文件为其它编码格式则会出现乱码、数据丢失等问题。 |
日志文件大小 | 无限制。 |
日志文件轮转 | 日志轮转队列大小默认为20。您可通过启动参数logreader_max_rotate_queue_size进行调整。具体操作,请参见设置Logtail启动参数。 支持设置采集路径为 重要 同一个Logtail实例中请勿混用两种形式,否则可能导致同一文件匹配多个Logtail采集配置,出现重复采集。 如果未处理完成的文件超过20个,将导致新生成的日志丢失。此类情况,请优先排查Logstore Shard写入Quota是否超限,并调整Logtail并发水平。具体操作,请推荐参数值。 更多信息,请参见相关技术文章。 |
日志解析阻塞时采集行为 | 日志解析阻塞时,Logtail会保持该日志文件描述符为打开状态,避免阻塞期间文件被删除,导致日志丢失。 如果解析阻塞期间出现多次日志文件轮转,Logtail会将文件放入轮转队列。 |
正则表达式 | 支持Perl兼容正则表达式。 |
JSON | 完全支持标准JSON(RFC7159、ECMA-404)。不支持非标准JSON,例如 |
同一文件对应多个Logtail配置 | 默认一个文件只能匹配一个Logtail采集配置。如果文件中的日志需要被采集多份,请参见如何实现文件中的日志被采集多份。 重要 采集多份时,文件读取的IO、计算资源和网络IO都会线性增加。 |
文件打开行为 | Logtail会保持被采集的文件和轮转队列中待采集的文件处于打开状态,以保证采集数据完整性。出现以下情况,会关闭文件。
如果无论文件是否采集完成或仍有日志写入文件,您都希望文件在删除后的可控时间内释放文件句柄,则您可通过启动参数force_release_deleted_file_fd_timeout设置超时时间。具体操作,请参见设置Logtail启动参数。 |
首次日志采集行为 | Logtail只采集增量的日志文件。首次发现文件被修改后,如果文件大小超过1 MB(容器标准输出为512 KB),则从最后1 MB处开始采集,否则从开始位置采集。 您可通过Logtail采集配置中的tail_size_kb参数调整新文件首次采集的大小。具体操作,请参见Logtail配置。 如果下发Logtail采集配置后,日志文件一直无修改,则Logtail不会采集该文件。如果需要采集历史文件,请参见导入历史日志文件。 |
文件发生覆盖的行为 | Logtail采用inode+文件中前1024字节的Hash识别文件。文件被覆盖后,如果inode或文件前1024字节Hash发生变化,则文件会作为新文件从头开始采集,否则不会被采集。 |
文件发生移动的行为 | 文件发生移动后,如果匹配Logtail采集配置,且该Logtail采集配置之前从未匹配过该文件,则移动后的文档将被当成新文件从头开始采集,否则不会被采集。 |
文件采集历史 | Logtail会在内存中保留文件采集历史进度,保证文件发生变化后仅采集增量部分,超过保留范围的日志如果发生写入,会导致重复采集。
|
非标准文本日志 | 对于日志中包含\0的行,该条日志会被截断到第一个\0处,之后部分丢弃。对于其他转义字符(如ASCII颜色)或不可见字符,Logtail将按原样上报。 |
容器采集
通过Logtail采集容器日志时,除上述文件采集的限制项外,还存在如下限制项。
限制项 | 限制说明 |
首次日志采集行为 | 如果采集的是容器标准输出,则首次发现文件修改后,默认如果文件大小超过512 KB,则从最后512 KB处开始采集,否则从头采集。您可通过Logtail采集配置中的StartLogMaxOffset参数调整。具体操作,请参见通过DaemonSet-控制台方式采集容器标准输出。 |
软链接 | 采集容器文件中的日志时,不支持目录及文件的软连接。 |
容器生命周期 | 默认情况下,容器生命周期至少在10秒以上,Logtail才能采集到日志。在容器文件采集场景下,出于性能因素,Logtail将限制3分钟内容器更新次数为10次。您可通过启动参数docker_config_update_interval和max_docker_config_update_times进行调整。具体操作,请设置Logtail启动参数。 |
标准输出日志轮转 | 容器的标准输出文件由docker或kubelet进行轮转,kubelet日志文件轮转默认大小为10 MB(docker日志轮转在ACK上被设置为100 MB),如果容器每秒输出标准输出的速率大于10 MB/s,将导致文件快速轮转,建议改用容器文件方式采集或修改kubelet的containerLogMaxSize参数以避免日志丢失。 |
标准输出日志驱动 | 如果使用Docker作为容器运行时,必须在Docker的配置文件daemon.json中添加 |
CheckPoint管理
限制项 | 限制说明 |
CheckPoint超时时间 | 默认情况下,如果文件超过30天未被修改,该Checkpoint将被删除。如果在Logtail采集配置中设置了 |
CheckPoint保存策略 | 定期保存(15分钟),程序退出时会自动保存。您可以通过启动参数check_point_dump_interval进行调整。具体操作,请参见设置Logtail启动参数。 |
CheckPoint保存位置 | 保存路径默认为 |
宕机时的处理 | 由于CheckPoint是定期保存,因此宕机恢复时将从上一个完整保存的CheckPoint开始恢复,可能导致数据采集重复。调整Checkpoint保存策略以减少数据被重复采集。 |
Logtail采集配置
限制项 | 限制说明 |
配置更新生效的延时 | 从通过控制台或API更新配置到Logtail客户端配置生效的延时约为30秒。 |
配置动态加载 | 支持,且其中某一配置更新不影响其他配置。 |
单个Logtail实例的总体可加载配置数 | 理论上无限制。建议一台服务器中的Logtail采集配置数不超过100个。 |
第三方Flusher输出 | 通过日志服务控制台或者API创建的配置会与Logstore建立关联,因此,当您在插件配置中使用第三方Flusher时,Logtail会默认往当前Logstore发送一份数据。 |
多账号、跨账号 | 支持。更多信息,请参见多账号场景和通过Logtail跨阿里云账号采集容器日志。 |
多地域 | 默认不支持,如有需求请提工单申请。 |
全球加速 | 支持。需在服务侧开启后,在客户端设置全球加速。更多信息,请参见开启全球加速服务。 |
机器组
限制项 | 限制说明 |
机器数量 | 理论上无限制,建议配置不超过100,000个,否则心跳无法正常获取。 |
应用配置数 | 理论上无限制,建议配置数不超过1,000个。 |
性能
限制项 | 限制说明 |
日志处理吞吐能力 | 原始日志流量默认限制为20 MB/s(数据被编码压缩后上传,一般压缩率为5~10倍)。超过该日志流量则有可能丢失日志,您可启动参数max_bytes_per_sec进行调整。具体操作,请参见设置Logtail启动参数。 |
最大性能 | 单核的能力如下:
通过启动参数process_thread_count设置多个处理线程,可提升1.5~3倍性能。 |
最大监控目录及文件数 | 与内存使用限制参数mem_usage_limit有关(主机场景默认为384 MB,容器场景默认为2048 MB),分为以下四个层级:
当上述任一层级所监控的目录及文件数达到上限时,Logtail不再对该层级中剩余的目录和文件进行监控。您可以通过提高Logtail采集配置监控目录的精度或调整启动参数mem_usage_limit来提高监控上限。关于mem_usage_limit参数的更多信息,请参见设置Logtail启动参数。 另外,针对Linux系统,Logtail还支持通过inotify机制对目录进行监听,从而减少日志采集的延时。inotify机制所能监控的最大目录数(含子目录)为3000。 |
资源超限处理策略 | 如果Logtail占用相关资源超过最大限制的时间5分钟,则Logtail会强制重启,此时数据可能会丢失或重复。 |
多租户隔离 | Logtail在配置级别实现隔离,即单个Logtail采集配置出现异常不影响其他Logtail采集配置。更多信息,请参见相关技术文章。 |
日志采集延迟 | 正常情况下从日志写入磁盘到Logtail采集到日志的延迟不超过1秒。 |
日志上传策略 | Logtail会将同一文件的日志自动聚合上传,聚合条件为日志超过4000条、日志总大小超过512 KB或者日志采集时间超过3秒。任一条件满足则触发上传行为 |
错误处理
限制项 | 限制说明 |
网络错误处理 | 在出现网络异常时会主动重试并自动调整重试间隔。在极端情况下,可能存在日志重复采集或丢弃的风险:
|
资源配额超限处理 | 如果数据发送速率超出Logstore最大配额,Logtail会阻塞采集并自动重试。请尝试扩大Logstore的Shard数量。更多信息,请参见相关技术文章。 |
客户端时间异常 | 可能因为请求时间和服务端时间差别超过15分钟,导致最大重试5次仍然不成功,数据被丢弃。请修正客户端机器时间。 |
Project或Logstore不存在 | 重试5次仍然不成功后丢弃数据。这种情况可能是因为您通过API删除了Logstore。请通过API删除对应Logtail采集配置和配置应用。 |
鉴权失败 | 重试5次仍然不成功后丢弃数据。这种情况通常有2种可能。
|
其他未知错误 | 重试5次仍然不成功后丢弃数据。 |
超时最大尝试时间 | 如果数据持续发送失败超过6小时,该数据将被丢弃。 |
状态自检 | 支持异常情况下自动重启,例如程序异常退出及使用资源超限等。 |