大模型服务监控:用 Prometheus 搭建指标采集与告警
大模型服务跑起来之后,很多人只关心能不能出结果,却不知道它什么时候变慢、显存是否吃紧、请求是否堆积。
用 Prometheus 给大模型服务做监控,核心就是让服务把运行指标暴露出来,再由 Prometheus 定时拉取,最后通过告警规则在异常时通知你。
本文以本地部署的 Ollama 和 vLLM 为例,讲清楚从零配置的完整过程。
先确认你的大模型服务是否支持指标暴露
Prometheus 采用拉取模式,需要目标服务提供一个 HTTP 接口,通常路径是 /metrics,返回文本格式的指标数据。
不同大模型框架的支持情况不一样:
- Ollama 默认不暴露 Prometheus 指标,需要借助中间件或自定义导出器。
- vLLM 启动时加
--api-key并访问/metrics路径即可获取推理指标,具体以你使用的版本为准。 - 如果你用的是自己封装的 API 服务,可以在代码里引入
prometheus_client库手动埋点。
准备条件:一台能运行 Prometheus 的 Linux 主机(建议 2 核 4G 以上)、大模型服务所在机器的 IP 和端口、以及能访问目标端口的网络环境。
安装 Prometheus 并配置第一个采集任务
以下步骤在 Ubuntu 22.04 上演示,其他发行版替换包管理命令即可。
- 下载并解压 Prometheus(版本号请以官网最新稳定版为准):
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar xvf prometheus-2.53.0.linux-amd64.tar.gz
cd prometheus-2.53.0.linux-amd64
- 编辑
prometheus.yml,在scrape_configs下增加大模型服务的采集任务:
scrape_configs:
- job_name: 'ollama-exporter'
scrape_interval: 15s
static_configs:
- targets: ['192.168.1.100:9101']
这里 9101 是假设的导出器端口,实际端口以你的部署为准。
如果大模型服务直接暴露 /metrics,把 targets 改成服务地址和端口即可。
- 启动 Prometheus:
./prometheus --config.file=prometheus.yml
启动后访问 http://你的IP:9090,在顶部菜单的 Status -> Targets 中能看到采集目标状态为 UP,说明配置已生效。
用导出器补齐 Ollama 的运行指标
Ollama 本身不直接提供 /metrics,常见做法是运行一个轻量导出器,把 Ollama 的 API 状态转换成 Prometheus 格式。
你可以用社区维护的导出器,也可以自己写一个简单脚本。
以 Python 为例,用 prometheus_client 起一个 HTTP 服务,定时请求 Ollama 的 /api/tags 并记录响应时间:
from prometheus_client import start_http_server, Gauge
import requests, time
resp_time = Gauge('ollama_api_response_seconds', 'Ollama API response time')
def collect():
start = time.time()
requests.get('http://127.0.0.1:11434/api/tags', timeout=5)
resp_time.set(time.time() - start)
if __name__ == '__main__':
start_http_server(9101)
while True:
collect()
time.sleep(15)
运行后,Prometheus 就能从 9101 端口拉到 ollama_api_response_seconds 指标。
这个例子只采集了响应时间,你可以按同样方式增加显存、请求数等自定义指标。
配置告警规则并验证触发
监控数据有了,下一步是让异常主动通知你。
在 prometheus.yml 同级目录新建 rules.yml:
groups:
- name: llm-alerts
rules:
- alert: OllamaApiSlow
expr: ollama_api_response_seconds > 2
for: 1m
labels:
severity: warning
annotations:
summary: "Ollama API 响应超过 2 秒"
然后在 prometheus.yml 中引用规则文件:
rule_files:
- rules.yml
重启 Prometheus 后,在 Alerts 页面能看到规则状态。
为了验证告警链路,可以临时把阈值调低,或者手动制造一次慢请求,观察告警是否从 Inactive 变为 Pending 再到 Firing。
确认无误后记得恢复合理阈值。
避坑与验证清单
配置过程中容易踩的几个坑:
- 目标端口不通:先在 Prometheus 主机上用
curl http://目标IP:端口/metrics确认能拿到数据,再检查防火墙和云安全组。 - 指标名称写错:Prometheus 的表达式对大小写敏感,告警规则里的指标名必须和实际暴露的一致,可以在 Prometheus 的 Graph 页面输入指标名自动补全验证。
- 时间窗口设得太短:
for设置过小容易产生抖动告警,建议至少 1 分钟,结合业务容忍度调整。 - 导出器与主服务争抢资源:导出器尽量轻量,避免频繁请求大模型接口影响推理性能。
验证监控是否真正生效,可以按这个顺序检查:Targets 页面状态为 UP、Graph 页面能查到指标曲线、Alerts 页面规则状态正常、模拟异常后告警能触发。
四步都通过,这套大模型 Prometheus 监控才算落地。
如果后续要接入 Grafana 做可视化,只需在 Grafana 中添加 Prometheus 数据源,再导入或自建面板即可。
监控本身不复杂,关键是先把指标暴露和采集链路跑通,再逐步补充告警规则。