LiteLLM数据库持久化,用量、密钥
LiteLLM 作为 LLM API 网关,默认情况下代理的密钥、调用用量和日志如果只放在内存,一重启就全部丢失。
本文围绕 LiteLLM 数据库持久化,介绍如何将用量、密钥、日志写入 PostgreSQL,让生产环境在重启、扩容后依然保留完整数据。
零基础用户按步骤即可完成。
为什么生产环境不能只靠内存存储
LiteLLM 在开发模式或未显式配置数据库时,很多状态会驻留在进程内存里。
这意味着你创建的虚拟 API Key、每次请求的 token 消耗、调用日志,代理一重启就全部清零。
对于生产环境,密钥突发丢失会导致调用方 401,用量记录缺失会影响成本核算,日志不落地也无法审计排查。
所以把这三类数据持久化到独立数据库,是上线前必须做的一件事。
先准备好 PostgreSQL 数据库和连接信息
建议使用独立的 PostgreSQL 实例,不要复用业务库。
以 PostgreSQL 15+ 为例,先在数据库服务器上执行:
CREATE DATABASE litellm;
CREATE USER litellm WITH PASSWORD 'your_strong_password';
GRANT ALL PRIVILEGES ON DATABASE litellm TO litellm;
记下连接地址,例如:postgresql://litellm:your_strong_password@127.0.0.1:5432/litellm。
如果数据库在远程服务器,请将 127.0.0.1 替换为实际 IP,并确保防火墙放行 5432 端口。
配置 LiteLLM 接入数据库
推荐通过环境变量 DATABASE_URL 设置连接串。
在 LiteLLM 启动目录下新建 .env 文件:
DATABASE_URL=postgresql://litellm:your_strong_password@127.0.0.1:5432/litellm
如果你习惯用 config.yaml,可以在配置文件中添加:
database_url: postgresql://litellm:your_strong_password@127.0.0.1:5432/litellm
database_connection_pool: true
database_connection_pool_limit: 20
连接池参数用于避免高并发下不断新建数据库连接,pool_limit 可根据实例规格调整,一般 10-30 即可。
配置完成后,用指定配置文件启动:
litellm --config config.yaml
首次启动时,LiteLLM 会自动创建所需的业务表,包括 API 密钥表、SpendLogs 用量日志表、模型配置表等。
注意启动用户必须具备建表权限,否则会报权限错误。
检查密钥、用量、日志是否真正落库
服务正常运行后,用 psql 登录数据库确认表已生成:
psql "postgresql://litellm:your_strong_password@127.0.0.1:5432/litellm" -c "\dt"
常见表名包含 LiteLLM_VerificationToken、LiteLLM_SpendLogs、LiteLLM_ProxyModel 等。
继续执行几条查询:
SELECT * FROM "LiteLLM_VerificationToken" LIMIT 5;
SELECT * FROM "LiteLLM_SpendLogs" ORDER BY "startTime" DESC LIMIT 5;
如果创建了新的 API Key 并调用一次模型,再重复上面的查询,能看到对应记录,说明密钥和用量日志已经持久化到数据库,重启 LiteLLM 后数据依然存在。
持久化配置常见坑与避坑建议
数据库连接不上时,先检查 DATABASE_URL 是否包含正确密码和 IP,并确认用户有权限访问库。
使用云数据库时,记得在白名单中加入 LiteLLM 所在服务器的出口 IP。
连接池参数不是越大越好,pool_limit 设置过高可能超过数据库最大连接数,导致“too many connections”。
如果代理实例较多,建议按实例数量均分连接数。
时区问题也容易出现。
SpendLogs 里的时间字段默认按 UTC 存储,业务看板如果按本地时间展示,需要自行转换,不要认为是数据错乱。
生产环境中务必定期备份数据库,尤其是包含历史用量和密钥信息的表。
你可以使用 pg_dump 做全量备份,或部署流复制实现高可用。
写在最后
按上述步骤完成 LiteLLM 数据库持久化后,你可以通过查询表确认密钥、用量、日志全程可追溯。
若遇到表未创建、连接超时等问题,优先检查 DATABASE_URL 字段、数据库用户权限和连接池参数。
不同 LiteLLM 版本对配置项的支持略有差异,建议以你的实际部署版本对应的官方文档为准。