在把大模型接入日常工作流之后,笔者很快遇到了一个新问题:模型到底被用了多少次?每天的高峰时段是什么时候?周末是不是真的没人调用?如果对这些数据一无所知,就谈不上优化成本、排查异常,更谈不上为后续扩容做规划。
于是,笔者为 LLM 使用量加了一层可观测性,做法很简单------用 Linux 自带的 crontab 定时任务,周期性采集使用数据。下面把这份配置拆开讲讲。
01 | 定时任务的整体设计
先看完整的 crontab 配置:
bash
$ crontab -l
# 工作日:09:00--11:45、14:00--17:45,每 15 分钟
*/15 9-11,14-17 * * 1-5 /home/alfred/scripts/llm_usage.sh
# 工作日:12:00、18:00 各执行一次
0 12,18 * * 1-5 /home/alfred/scripts/llm_usage.sh
# 工作日夜间:20:00、00:00、04:00、08:00,每 4 小时
0 0,4,8,20 * * 1-5 /home/alfred/scripts/llm_usage.sh
# 周末全天:每 4 小时
0 */4 * * 0,6 /home/alfred/scripts/llm_usage.sh
# 每周一 08:01 额外执行一次
1 8 * * 1 /home/alfred/scripts/llm_usage.sh
所有任务都指向同一个脚本 /home/alfred/scripts/llm_usage.sh,脚本负责采集当前时间点的 LLM 调用数据。区别只在于触发频率不同,这样既能覆盖关键时段,又不会给系统带来太大负担。
02 | 工作日:白天加密采样
工作日的白天是 LLM 使用的高峰期,所以采样频率最高。
bash
*/15 9-11,14-17 * * 1-5 /home/alfred/scripts/llm_usage.sh
这段配置的含义是:周一至周五,在 9 点到 11 点 45 分、14 点到 17 点 45 分这两个时间段内,每 15 分钟执行一次脚本。*/15 表示"每 15 分钟",9-11,14-17 用逗号并列了两个小时段,1-5 限定为工作日。
这样密集的采样,可以清晰还原白天的工作节奏------比如上午 10 点是不是比下午 3 点调用更频繁,午休前后有没有明显回落。
03 | 工作日:午间与傍晚定点记录
bash
0 12,18 * * 1-5 /home/alfred/scripts/llm_usage.sh
中午 12 点和傍晚 18 点各执行一次。这两个时间点比较特殊:12 点是午休边界,18 点是下班前后。单独记录这两个时刻的数据,有助于观察"午休是否真的没人用模型"以及"下班后是否还有零散调用"。
04 | 工作日夜间与周末:低频兜底
bash
0 0,4,8,20 * * 1-5 /home/alfred/scripts/llm_usage.sh
工作日的夜间和清晨,调用量通常很低,没必要保持 15 分钟一次的频率。这里改为每 4 小时一次,覆盖 20 点、0 点、4 点和 8 点四个时间点,保证全天 24 小时都有数据落点,不会出现观测盲区。
周末的情况类似:
bash
0 */4 * * 0,6 /home/alfred/scripts/llm_usage.sh
0,6 表示周六和周日,*/4 表示每 4 小时一次。周末整体调用量偏低,低频采样足够反映趋势,同时避免无意义的重复执行。
05 | 每周一的额外校准
bash
1 8 * * 1 /home/alfred/scripts/llm_usage.sh
每周一早上 8 点 01 分额外执行一次。注意这里用的是 1 8,而不是 0 8,刻意错开整点。这样做的目的是笔者这里的LLM是每周8点重置额度,可测试发现原本整8点采样的结果还是未重置的状态,所以这里专门加了这条一分钟的offset,保证可以及时捕捉到重置额度的关键信息。不然有时候不小心提早就用超了,期待着能赶在重置时刻第一时间就恢复满血状态,可前端如果因为没及时采样到而一直显示0%,看起来也是非常焦虑啊。

小结
整套定时任务的核心思路是:高峰时段加密采样,低谷时段低频兜底,关键节点单独记录 。通过 crontab 的灵活配置,笔者用极小的系统开销,换来了对 LLM 使用量全天候、分时段的清晰观测。有了这些数据,后续无论是做成本分析、容量规划,还是排查异常调用,都有了可靠的依据。

关注我,和AI一起成长~