结合你之前深度研究的LLM Token成本监控、Agent调用全链路可观测、轻量运维自动化的相关背景,这套方案完全不用引入Prometheus+Grafana这类重型监控栈,仅靠Linux原生crontab就能快速搭建LLM使用量的定时监控体系,零额外依赖,几行脚本就能实现成本告警、用量统计、异常拦截的完整能力,非常适合中小团队快速落地。
核心实现逻辑
整个监控体系的核心思路是:用crontab定时触发轻量统计脚本,从LLM网关/Agent服务的日志、数据库中拉取指定时间窗口内的Token消耗量、调用次数、成本数据,完成聚合统计后,和预设的阈值做对比,一旦触发异常就自动发送告警,同时生成可视化的用量报表,全程不需要部署复杂的监控中间件。
分步落地实操
第一步:编写LLM用量统计脚本
新建llm_usage_monitor.sh脚本,核心逻辑是从你的LLM服务日志中提取每次调用的输入/输出Token数,按模型、用户、应用维度聚合计算总成本,同时和预设的日用量阈值做对比:
bash
#!/bin/bash
# 统计过去1小时的LLM用量
LOG_PATH="/data/llm_service/logs/llm_request.log"
REPORT_PATH="/data/llm_monitor/report/$(date +%Y%m%d_%H).txt"
# 按模型聚合Token消耗
grep "$(date -d "1 hour ago" +"%Y-%m-%d %H")" $LOG_PATH | awk -F',' '
{
input_token += $4
output_token += $5
total_cost += ($4/1000000 * 2) + ($5/1000000 * 6) # 按GPT-4o计价
}
END {
print "统计时间:" strftime("%Y-%m-%d %H:%M") > "'"$REPORT_PATH"'"
print "总输入Token:" input_token >> "'"$REPORT_PATH"'"
print "总输出Token:" output_token >> "'"$REPORT_PATH"'"
print "小时总成本:" total_cost "元" >> "'"$REPORT_PATH"'"
# 小时成本阈值设为50元,超过就触发告警
if(total_cost > 50) exit 1
}'
# 阈值触发后发送企业微信/邮件告警
if [ $? -eq 1 ]; then
curl "https://你的告警机器人webhook" -d "content=LLM小时用量超过阈值,已触发告警,请及时检查是否存在异常调用"
fi
第二步:配置crontab定时任务
执行crontab -e编辑定时任务,添加以下规则,实现每小时整点统计用量、每天凌晨生成昨日全量用量报表:
bash
# 每小时执行一次小时用量监控
0 * * * * /bin/bash /data/llm_monitor/llm_usage_monitor.sh
# 每天凌晨1点生成昨日全量用量日报
0 1 * * * /bin/bash /data/llm_monitor/llm_daily_report.sh
第三步:补充异常调用拦截逻辑
针对你之前关注的Agent滥用Prompt导致账单突增的场景,在脚本中补充单用户用量统计逻辑,一旦某个用户10分钟内的调用量超过预设阈值,自动调用LLM网关的限流接口,临时封禁该用户的调用权限,从根源上避免月底账单超出预算数倍的问题。
生产环境避坑要点
不要把统计逻辑直接写在crontab命令行里,全部封装成独立脚本,避免crontab执行时出现环境变量缺失、路径错误的问题,脚本开头最好显式声明PATH变量,避免找不到curl、awk这类系统命令。
给监控脚本单独配置日志输出路径,把每次执行的返回结果、告警记录全部写入日志文件,后续排查监控漏报问题时可以直接回溯执行历史。
针对高并发大流量场景,不要直接用grep扫描全量日志,可以提前把LLM调用的用量数据异步写入Redis做预聚合,crontab脚本直接从Redis拉取聚合结果,避免大日志文件扫描占用过多服务器CPU资源。
需要我为你生成这套crontab LLM监控的完整可直接运行脚本包,覆盖小时告警、日报生成、异常限流全流程,直接复制到服务器就能部署吗?