ilogtail采集提示STAT_LIMIT_ALARM解决

问题

iLogtail 采集日志时,如果配置的日志路径下匹配到的文件数或目录数超过上限,会触发 STAT_LIMIT_ALARM(文件数超限)或 DIR_EXCEED_LIMIT_ALARM(目录数超限)。后果是部分文件不会被采集,导致日志丢失。

原理

iLogtail 可监控的文件/目录数与内存限制 mem_usage_limit 正相关:

场景 mem_usage_limit 默认值 单配置最大文件数
主机 384 MB 384/100 × 5,000 = 15,000
容器 (ACK DaemonSet) 512 MB 512/100 × 5,000 = 25,000

两个告警含义:

  • STAT_LIMIT_ALARM: 所有匹配文件 + 目录总数超限
  • DIR_EXCEED_LIMIT_ALARM: 匹配目录数(不含黑名单)超限

1.如何发现

在 CloudLens for SLS 控制台 → 报表中心 → 采集监控 → iLogtail 异常监控-关键错误中查看。告警详情会展示超限类型、路径和当前数量。

2.解决方案

方案一:精确化日志路径

  • 将路径配置到最小必要目录,例如只采集 /var/log/nginx 而非 /var/log
  • find /var/log/ | wc -l 确认目录下的实际文件数

方案二:排除不需要采集的目录

  • 设置采集黑名单,排除不需要的子目录
  • 设置最大监控目录深度(0 表示只监控本层)

方案三:调大内存限制

  • 主机环境修改 /usr/local/ilogtail/ilogtail_config.json 中的 mem_usage_limit
  • 容器环境修改 kube-system 命名空间下 alibaba-log-configuration ConfigMap 中的 mem-limit,然后重启 logtail-ds DaemonSet
  • 注意:mem-limit 不能超过 resources.limits.memory,否则会被 K8s OOM Kill

方案四:容器场景精细化

  • 利用 K8s 标签/命名空间过滤条件,只采集目标容器的日志
  • 定期清理轮转后的历史日志