Linux磁盘配额超限告警需构建可观测监控流程:先确认quota启用,再用脚本结构化采集超限用户使用率,最后对接Prometheus/Zabbix/Graylog或mailx推送告警,并处理宽限期、系统账户过滤及静默机制。

一、先确认配额已启用并可采集
配额告警的前提是系统真正在用配额。检查三件事:
- 目标文件系统(如 /home)在 /etc/fstab 中挂载选项含 usrquota 或 grpquota
- 执行 sudo quotaon -avug 后,sudo quotaon -p 显示对应分区为 enabled
- 运行 sudo repquota -a | head -10 能看到用户/组的 block/inode 使用统计,不是全空或报错
二、用脚本定期采集超限用户(关键逻辑)
不要依赖交互式 `quota -q` 输出——它只显示“已超限”的用户,但没带数值,也不易解析。推荐用以下组合提取结构化数据:
示例命令(获取所有超软限/硬限的用户及其使用率):
sudo quota -v -s | awk '/^[^[:space:]]+[^:]+:/ {user=$1; next} /Block limits/ && $3 ~ /^[0-9]+$/ {blimit=$3; bused=$1; if (blimit > 0 && bused > blimit*0.9) print "USER:" user, "BLOCK_USED_PCT:" int(bused/blimit*100) "%"}'
说明:
- -v 显示所有用户(含未超限者),-s 用 MB/GB 单位,便于计算百分比
- 用 awk 跳过标题行,匹配用户名行和限额行,提取已用块数与软/硬限值
- 判断是否超过 90% 软限(预警),或直接超硬限(紧急)
三、对接常见监控系统的方式
采集到“谁超了、超多少”之后,按不同场景推送:
-
对接 Prometheus + Alertmanager:写一个简单 exporter(如 Python Flask 服务),把每个用户的
quota_used_percent{user="alice",fs="/home"}暴露为指标;用 PromQL 写告警规则:quota_used_percent > 90 -
对接 Zabbix:用 UserParameter 在 agent 配置里定义键,例如:
UserParameter=quota.overlimit[*],sudo quota -u $1 -s 2>/dev/null | awk '/Block limits/{if (\$1/\$3 > 0.9) print 1; else print 0}',然后在 Web 界面为关键用户加触发器 -
对接 Graylog / ELK:让脚本把超限结果写入 syslog(
logger -t quota-alert "user=bob fs=/home used=94%"),再用 Graylog 的 message 匹配规则生成告警事件 -
纯 Shell + mailx:脚本中加入判断,若发现任意用户超 90%,则调用
echo "...超限详情..." | mailx -s "配额预警" admin@example.com
四、避免误报和提升实用性
真实环境要注意这些细节:
-
宽限期处理:软限超限后有 grace period(默认 7 天),脚本里可加判断:
sudo quota -v -s | grep -A2 "grace",只对 grace 已过期的用户告警 -
排除系统账户:过滤掉
root、nobody、systemd-*等非业务用户,避免噪音 -
inode 同步检查:小文件多的场景,
sudo quota -v -s | grep "Inode limits"也要做类似判断,阈值建议设为 85% -
静默机制:首次告警后,记录时间戳,2 小时内同一用户不再重复发;可用
touch /tmp/quota_alerted_alice+find /tmp -name "quota_alerted_*" -mmin +120 -delete


















