1. Ollama日志基础:日志文件位置、日志级别、日志格式解析
做运维这些年,我处理过不少日志相关的故障。说实话,日志就是系统的黑匣子。你想想看,Ollama跑得好好的,突然出问题了,第一反应是什么?肯定是翻日志。但很多人连日志在哪儿、怎么看都不清楚。这一节,我就带你把这些基础打牢。
1.1 日志文件位置:别告诉我你找不到
Ollama的日志位置,其实跟你的操作系统和启动方式有关。我个人习惯先查环境变量,再找默认路径。
Linux/macOS 默认路径
# 查看日志文件位置
ls -la ~/.ollama/logs/
# 或者直接看
cat ~/.ollama/logs/server.log
嗯,这里要注意:如果你是用 systemd 启动的,日志可能被 journald 接管了。我遇到过好几次,用户说“我翻遍了目录都找不到日志”,结果一查,人家用的是 systemd 服务。
# systemd 方式查看日志
journalctl -u ollama -f
Windows 路径
# 默认在用户目录下
%USERPROFILE%\.ollama\logs\server.log
Docker 容器
# 先找到容器ID
docker ps | grep ollama
# 然后看日志
docker logs -f <container_id>
我的小技巧: 我习惯在启动脚本里加一行
--log-file /var/log/ollama.log,这样日志位置就固定了,排查问题快很多。
1.2 日志级别:从 INFO 到 DEBUG 的切换
Ollama 的日志级别,说白了就这几个:
| 级别 | 说明 | 我什么时候用 |
|---|---|---|
| ERROR | 严重错误,需要立即处理 | 服务挂了、模型加载失败 |
| WARN | 警告,不影响运行但要注意 | 资源不足、配置异常 |
| INFO | 正常信息,默认级别 | 日常监控、查看请求记录 |
| DEBUG | 调试信息,最详细 | 排查奇怪问题、性能调优 |
为什么会这样设计?因为生产环境开 DEBUG 会刷屏,磁盘很快就满了。我曾经在线上环境不小心开了 DEBUG,结果半小时日志就涨了 2GB……嗯,从那以后我再也不敢在生产环境乱改日志级别了。
如何设置日志级别
# 启动时指定
ollama serve --log-level debug
# 或者通过环境变量
export OLLAMA_LOG_LEVEL=debug
ollama serve
避坑指南: 我曾经在排查一个模型加载慢的问题时,开了 DEBUG 级别,结果日志里全是底层通信的细节,反而把关键信息淹没了。建议先开 INFO 看大概,再针对性地开 DEBUG。
1.3 日志格式解析:一行日志能看出什么?
Ollama 的日志格式其实挺清晰的。我拿一条真实日志来拆解:
time=2024-01-15T10:30:45.123Z level=INFO msg="request completed"
method=POST path=/api/generate status=200 duration=2.345s
model=llama2:7b tokens=128
你看,这一行里包含了:
- time:时间戳,精确到毫秒。我习惯用 UTC 时间,避免时区混淆
- level:日志级别,告诉你这条日志的严重程度
- msg:消息主体,描述发生了什么
- method/path:请求方法和路径,定位哪个接口出了问题
- status:HTTP 状态码,200 正常,4xx/5xx 就是有问题
- duration:处理耗时,性能监控的关键指标
- model:使用的模型,多模型部署时特别有用
- tokens:生成的 token 数,可以用来估算成本
核心要点: 日志格式是结构化的,你可以直接用 grep、awk 或者 jq 来解析。我个人喜欢用 jq,因为日志是 JSON 格式,处理起来特别方便。
1.4 知识体系:日志基础全景图
下面这张图,是我梳理的日志基础核心逻辑。你一看就明白了:
1.5 实战:快速定位日志中的关键信息
光说不练假把式。我给你几个实际场景:
场景一:模型加载失败
# 快速过滤错误
grep "ERROR" ~/.ollama/logs/server.log
# 我一般这么用
tail -f ~/.ollama/logs/server.log | grep -E "ERROR|WARN"
场景二:性能瓶颈分析
# 找出所有请求耗时超过5秒的
grep "duration=" ~/.ollama/logs/server.log |
awk -F'duration=' '{print $2}' |
awk -F's' '{if ($1 > 5) print $0}'
我的习惯: 我会写一个简单的脚本,每天定时扫描日志中的 ERROR 和 WARN,然后发邮件通知。这样不用天天盯着日志看,出问题第一时间就能知道。
好了,日志基础就这些。你想想看,是不是很简单?位置、级别、格式,这三块搞清楚了,后面排查问题就顺手多了。下一节我们聊聊怎么用这些日志做监控告警,那才是真正发挥日志价值的地方。