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-configurationConfigMap 中的mem-limit,然后重启logtail-dsDaemonSet - 注意:
mem-limit不能超过resources.limits.memory,否则会被 K8s OOM Kill
方案四:容器场景精细化
- 利用 K8s 标签/命名空间过滤条件,只采集目标容器的日志
- 定期清理轮转后的历史日志