【最佳实践】使用CloudLens排查文件/目录数超限问题(STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
日志服务 SLS,月写入数据量 50GB 1个月
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:包括STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM等诊断错误的文件/目录数超限问题,。

本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:包括STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM等诊断错误的文件/目录数超限问题,。

目标读者

数字化系统开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。

背景介绍

iLogtail 是阿里云日志服务(SLS)团队自研的可观测数据采集 Agent,拥有的轻量级、高性能、自动化配置等诸多生产级别特性,可以署于物理机、虚拟机、Kubernetes 等多种环境中来采集遥测数据。目前 iLogtail 已有千万级的安装量,每天采集数十 PB 的可观测数据,广泛应用于线上监控、问题分析/定位、运营分析、安全分析等多种场景,在实战中验证了其强大的性能和稳定性。

CloudLens for SLS是日志服务推出的一款应用,帮助用户监控和管理日志服务Project、Logstore等资产,提升用户对日志服务资产的管理效率、快速了解其消耗情况。

使用场景

文件日志采集是日志采集Agent最常见的数据采集场景,iLogtail目前支持主机上文件采集以及容器场景下的文件采集。但是文件采集在实战中会遇到各种各样的问题,基于此场景,CloudLens for SLS集成了针对iLogtail的状态监控,可以实时的反馈当前iLogtail Agent的运行状况。

本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:iLogtail文件、目录数超过上限的问题。

问题描述

问题发现

CloudLens for SLS页面,点击报表中心下采集监控,然后查看iLogtail异常监控-关键错误(必须处理)

image.png

在关键错误表格中,会展示当前影响iLogtail采集的重要错误,对于这些错误必须处理,否则可能会造成日志采集丢失,采集性能低下等问题。示例中主要出现了STAT_LIMIT_ALARM和DIR_EXCEED_LIMIT_ALARM两种错误;在页面的下方,有文件、目录数超过上限问题(STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM)对应的表格,其中会详细展示超限的类型、路径和配置文件上限。

image.png

问题影响范围

在容器和主机场景下,都有可能出现文件、目录数超过上限的问题,导致部分文件和目录不会被采集,导致日志丢失。

原理介绍

iLogtail在监听配置的文件目录时会占用一定量的内存,为了控制资源占用,iLogtail会限制自己所占用的CPU和内存,对于iLogtail可监控的文件数,使用了与mem_usage_limit正相关的计算方法,具体如下:

image.png
  • 在主机环境下,mem_usage_limit的默认值为384,所以单个iLogtail采集配置可监控的最大文件数是384 / 100 * 5000 = 15000

  • 在容器环境下,如果是daemonset方式部署logtail-dsmem_usage_limit会默认从alibaba-log-configuration中的mem-limit获取配置,其默认值为512,所以单个iLogtail采集配置可监控的最大文件数是 512 / 100 * 5000 = 25000。注意,这里的25000是指当前主机上所有被采集的容器的文件数之和。

STAT_LIMIT_ALARM原理:

采集配置的日志路径下所有匹配的文件数、文件目录数(不包含采集黑名单中的文件目录超过了上述计算公式的上限。

单个采集配置计算公式:mem_usage_limit/100x5,000

单个Logtail客户端所有采集配置计算公式:mem_usage_limit/100x50,000

DIR_EXCEED_LIMIT_ALARM原理

采集配置的日志路径下所有匹配的文件目录数不包含采集黑名单中的文件目录)超过了上述计算公式的上限。

单个Logtail客户端所有采集配置计算公式:mem_usage_limit/100x5,000

具体场景与方案建议

场景一:主机文件数/目录数过多超过上限

问题原因

iLogtail配置的日志路径的前半部分,表示iLogtail监听的目录,该目录下如果目录数过多,超过了mem_usage_limit/100x5000的限制,会出现目录数过多的警告。主机上mem_usage_limit默认为384,所以默认单个配置的文件(包括目录)上限为:384 / 100 x 500 = 15000

image.png

如何定位

通过CloudLens For SLS 查看关键错误和文件、目录数超过上限问题(STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM)。

image.png image.png

解决方案

  • 检查配置中日志路径是否合理,可以尽可能“精确”地设置日志路径,比如实际要采集的目录是/var/log/nginx/access.log,可以把路径配置成/var/log/nginx而不是/var或者/var/log。

image.png

比较有用的命令:查找某个目录下的子目录及文件是否过多,以/var/log目录为例:find /var/log/ | wc -l

  • 如果日志路径不能更精确了,但是子目录中存在不必要收集日志的子目录,可以通过设置采集黑名单的方式将需要忽略的子目录设置排除。

image.png

或者通过设置最大监控目录深度,减少监听不必要的子目录,0表示只监控本层目录

image.png
  • 如果确实需要监听的目录或者文件数较多,可以通过调大iLogtail启动参数中的mem_usage_limit来支持更多的监听。单个iLogtail配置支持的最大监听文件数是mem_usage_limit/100x500

修改:/usr/local/ilogtail/ilogtail_config.json

image.png

场景二:容器文件数/目录数过多超过上限

问题原因

iLogtail配置的日志路径的前半部分,表示iLogtail监听的目录,该目录下如果目录数过多,超过了mem_usage_limit/100x5000的限制,会出现目录数过多的警告。

image.png

ACK容器环境下,在kube-system命名空间下的配置项alibaba-log-configuration中配置的mem-limit为512,这个mem-limit会作用到集群的logtail的daemonset,在容器环境下默认单个配置的文件(包含目录)配置上限为512 / 100 x 5000 = 25000

image.png image.png

注意:alibaba-log-configuration中的mem-limit不能超过resources.limits.memory的配置,避免容器内容资源超限导致K8s杀掉logtail-ds。

如何定位

通过CloudLens For SLS 查看关键错误和文件、目录数超过上限问题(STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM)。在告警详情中会展示类似The polling stat count of this docker config has exceeded limit, current count: 25001 total count:25001 path: /var/log/toomany的字样。

image.png image.png

解决方案

  • 检查配置中日志路径是否合理,可以尽可能“精确”地设置日志路径,比如实际要采集的目录是/var/log/nginx/access.log,可以把路径配置成/var/log/nginx而不是/var或者/var/log。

image.png
  • 如果目录中有很多轮转后的历史日志,可以定期删除或者设置轮转文件数量,定时删除不必要的目录和文件。

  • 如果确实需要监听的目录或者文件数较多,通过以下步骤调大mem_usage_limit

  • 调大kube-system命名空间下的配置项alibaba-log-configuration中配置的mem-limit

image.png

  • 然后重新部署kube-system命名空间下的守护进程集:logtail-ds来使mem_usage_limit生效。单个iLogtail配置支持的最大监听文件数是mem_usage_limit/100x5000

image.png
  • 注意:

  • 容器场景可以使用K8s相关过滤条件,过滤掉不需要采集日志的容器,定位到真正需要采集的容器的日志文件,可以避免容器场景下类似问题。

image.png

业务日志输出配置建议

  • 将日志文件存放在特定的目录中,与其他程序运行文件、库分开存放,使得iLogtail监听目录最小化。

  • 输出日志文件时,采用轮转机制,设置一定的日志轮转数量,可以避免过多的历史日志文件占用磁盘,同时也可以减少监听的文件数。定期删除不必要的历史目录和文件。

  • 日志打印目录层级树不要设置过多,目录层级尽量扁平化。

参考资料

极简模式设置采集黑名单:https://help.aliyun.com/document_detail/137903.html

日志服务采集数据常见的错误类型:https://help.aliyun.com/document_detail/89808.html

通过DaemonSet-控制台方式采集容器文本日志:https://help.aliyun.com/document_detail/66655.html

关于iLogtail

iLogtail作为阿里云SLS提供的可观测数据采集器,可以运行在服务器、容器、K8s、嵌入式等多种环境,支持采集数百种可观测数据(日志、监控、Trace、事件等),已经有千万级的安装量。目前,iLogtail已正式开源,欢迎使用及参与共建。

GitHub: https://github.com/alibaba/ilogtail

官网:https://help.aliyun.com/document_detail/65018.html

钉钉群:iLogtail社区

image.png
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5月前
|
移动开发 Serverless 异构计算
函数计算操作报错合集之Reserve resource exceeded limit 通常出现在什么情况下
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
101 0
|
5月前
|
监控 前端开发 Serverless
函数计算操作报错合集之遇到报错:{"ErrorCode":"ResourceThrottled","ErrorMessage":"Reserve resource exceeded limit"},该如何处理
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
错误: 实例 "ahwater-linux-core" 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: Exceeded maximum number of retries. Exceeded max scheduling attempts 3 for instance 7c1609
错误: 实例 "ahwater-linux-core" 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: Exceeded maximum number of retries. Exceeded max scheduling attempts 3 for instance 7c1609c9-9d0f-4836-85b3-cefd45f942a7.
5469 0
|
4月前
|
监控 Serverless 对象存储
函数计算操作报错合集之部署报错Reserve resource exceeded limit,该如何解决
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
4月前
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之在flush操作中报错:"context deadline exceeded (Client.Timeout exceeded while awaiting headers)",该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
487 2
|
5月前
|
监控 Serverless 文件存储
函数计算操作报错合集之显示的错误信息 "Reserve resource exceeded limit",一般是什么导致的
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
5月前
|
安全 Serverless API
函数计算操作报错合集之进不去页面,报错乱码 ResourceThrottled, Reserve resource exceeded limit 一般是由于什么导致的
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
5月前
|
监控 网络协议 Serverless
函数计算操作报错合集之遇到报错:{"ErrorCode":"ResourceThrottled","ErrorMessage":"Reserve resource exceeded limit"}该如何处理
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
6月前
|
DataWorks 数据管理 大数据
DataWorks操作报错合集之出现报错 "ERROR: Total memory used by all existing queries exceeded memory limitation."如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
137 2
|
存储 缓存 大数据
Starrocks执行查询报错:Memory of process exceed limit. Used: XXX, Limit: XXX. Mem usage has exceed the limit of BE
Starrocks执行查询报错:Memory of process exceed limit. Used: XXX, Limit: XXX. Mem usage has exceed the limit of BE