🚨 警报 / Webhooks
获取以下情况的警报:
- 挂起的LLM API调用
- 慢速LLM API调用
- 失败的LLM API调用
- 按密钥/用户预算跟踪
- 支出报告 - 每周和每月的团队、标签支出
- 失败的db读/写
- 模型中断警报
- 每日报告:
- LLM 最慢的5个部署
- LLM 失败请求最多的5个部署
- 支出 每周和每月的团队、标签支出
适用于:
快速开始
设置一个Slack警报频道以接收来自代理的警报。
步骤1:将Slack Webhook URL添加到环境变量
从 https://api.slack.com/messaging/webhooks 获取一个Slack webhook URL。
你也可以使用Discord Webhooks,参见这里。
在代理环境变量中设置 SLACK_WEBHOOK_URL 以启用Slack警报。
export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/<>/<>/<>"
步骤2:设置代理
general_settings:
alerting: ["slack"]
alerting_threshold: 300 # 如果请求挂起超过5分钟且响应时间超过5分钟则发送警报
spend_report_frequency: "1d" # [可选] 设置为1d, 2d, 30d .... 指定你想发送支出报告的频率
启动代理
$ litellm --config /path/to/config.yaml
步骤3:测试一下!
curl -X GET 'http://0.0.0.0:4000/health/services?service=slack' \
-H 'Authorization: Bearer sk-1234'
高级功能
从警报中屏蔽消息
默认情况下,警报会显示传递给LLM的 messages/input。如果你想从Slack警报中屏蔽此内容,请在你的配置中设置以下设置:
general_settings:
alerting: ["slack"]
alert_types: ["spend_reports"]
litellm_settings:
redact_messages_in_exceptions: True
为警报添加元数据
为代理调用添加警报元数据以便调试。
import openai
client = openai.OpenAI(
api_key="anything",
base_url="http://0.0.0.0:4000"
)
# 发送到litellm代理的请求,`litellm --model`
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages = [],
extra_body={
"metadata": {
"alerting_metadata": {
"hello": "world"
}
}
}
)
预期响应
选择特定警报类型
如果你想仅选择特定警报类型,请设置 alert_types。当未设置 alert_types 时,所有默认警报类型都会启用。
general_settings:
alerting: ["slack"]
alert_types: [
"llm_exceptions",
"llm_too_slow",
"llm_requests_hanging",
"budget_alerts",
"spend_reports",
"db_exceptions",
"daily_reports",
"cooldown_deployment",
"new_model_added",
]
为每种警报类型设置特定Slack频道
如果你想为每种警报类型设置特定频道,请使用此功能。
这允许你执行以下操作
llm_exceptions -> 转到Slack频道 #llm-exceptions
spend_reports -> 转到Slack频道 #llm-spend-reports
在你的 config.yaml 中设置 alert_to_webhook_url。
model_list:
- model_name: gpt-4
litellm_params:
model: openai/fake
api_key: fake-key
api_base: https://exampleopenaiendpoint-production.up.railway.app/
general_settings:
master_key: sk-1234
alerting: ["slack"]
alerting_threshold: 0.0001 # (秒) 设置一个人为低的阈值以测试警报
alert_to_webhook_url: {
"llm_exceptions": "https://hooks.slack.com/services/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",
"llm_too_slow": "https://hooks.slack.com/services/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",
"llm_requests_hanging": "https://hooks.slack.com/services/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",
"budget_alerts": "https://hooks.slack.com/services/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",
"db_exceptions": "https://hooks.slack.com/services/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",
"daily_reports": "https://hooks.slack.com/services/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",
"spend_reports": "https://hooks.slack.com/services/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",
"cooldown_deployment": "https://hooks.slack.com/services/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",
"new_model_added": "https://hooks.slack.com/services/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",
"outage_alerts": "https://hooks.slack.com/services/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",
}
litellm_settings:
success_callback: ["langfuse"]
model_list:
- model_name: gpt-4
litellm_params:
model: openai/fake
api_key: fake-key
api_base: https://exampleopenaiendpoint-production.up.railway.app/
general_settings:
master_key: sk-1234
alerting: ["slack"]
alerting_threshold: 0.0001 # (秒) 设置一个极低的阈值用于测试警报
alert_to_webhook_url: {
"llm_exceptions": ["os.environ/SLACK_WEBHOOK_URL", "os.environ/SLACK_WEBHOOK_URL_2"],
"llm_too_slow": ["https://webhook.site/7843a980-a494-4967-80fb-d502dbc16886", "https://webhook.site/28cfb179-f4fb-4408-8129-729ff55cf213"],
"llm_requests_hanging": ["os.environ/SLACK_WEBHOOK_URL_5", "os.environ/SLACK_WEBHOOK_URL_6"],
"budget_alerts": ["os.environ/SLACK_WEBHOOK_URL_7", "os.environ/SLACK_WEBHOOK_URL_8"],
"db_exceptions": ["os.environ/SLACK_WEBHOOK_URL_9", "os.environ/SLACK_WEBHOOK_URL_10"],
"daily_reports": ["os.environ/SLACK_WEBHOOK_URL_11", "os.environ/SLACK_WEBHOOK_URL_12"],
"spend_reports": ["os.environ/SLACK_WEBHOOK_URL_13", "os.environ/SLACK_WEBHOOK_URL_14"],
"cooldown_deployment": ["os.environ/SLACK_WEBHOOK_URL_15", "os.environ/SLACK_WEBHOOK_URL_16"],
"new_model_added": ["os.environ/SLACK_WEBHOOK_URL_17", "os.environ/SLACK_WEBHOOK_URL_18"],
"outage_alerts": ["os.environ/SLACK_WEBHOOK_URL_19", "os.environ/SLACK_WEBHOOK_URL_20"],
}
litellm_settings:
success_callback: ["langfuse"]
测试它 - 发送一个有效的 LLM 请求 - 期望在其自己的 Slack 频道中看到 llm_too_slow 警报
curl -i http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "gpt-4",
"messages": [
{"role": "user", "content": "Hello, Claude gm!"}
]
}'
使用 MS Teams Webhooks
MS Teams 提供了一个与 Slack 兼容的 Webhook URL,您可以用于警报
快速开始
为您的 Microsoft Teams 频道获取一个 Webhook URL
将其添加到您的 .env 文件中
SLACK_WEBHOOK_URL="https://berriai.webhook.office.com/webhookb2/...6901/IncomingWebhook/b55fa0c2a48647be8e6effedcd540266/e04b1092-4a3e-44a2-ab6b-29a0a4854d1d"
- 将其添加到您的 litellm 配置中
model_list:
model_name: "azure-model"
litellm_params:
model: "azure/gpt-35-turbo"
api_key: "my-bad-key" # 👈 错误的密钥
general_settings:
alerting: ["slack"]
alerting_threshold: 300 # 如果请求挂起超过 5 分钟且响应时间超过 5 分钟,则发送警报
- 运行健康检查!
调用代理的 /health/services 端点,测试您的警报连接是否正确设置。
curl --location 'http://0.0.0.0:4000/health/services?service=slack' \
--header 'Authorization: Bearer sk-1234'
预期响应
使用 Discord Webhooks
Discord 提供了一个与 Slack 兼容的 Webhook URL,您可以用于警报
快速开始
为您的 Discord 频道获取一个 Webhook URL
在您的 Discord Webhook 后附加
/slack- 它应该看起来像这样
"https://discord.com/api/webhooks/1240030362193760286/cTLWt5ATn1gKmcy_982rl5xmYHsrM1IWJdmCL1AyOmU9JdQXazrp8L1_PYgUtgxj8x4f/slack"
- 将其添加到您的 litellm 配置中
model_list:
model_name: "azure-model"
litellm_params:
model: "azure/gpt-35-turbo"
api_key: "my-bad-key" # 👈 错误的密钥
general_settings:
alerting: ["slack"]
alerting_threshold: 300 # 如果请求挂起超过 5 分钟且响应时间超过 5 分钟,则发送警报
environment_variables:
SLACK_WEBHOOK_URL: "https://discord.com/api/webhooks/1240030362193760286/cTLWt5ATn1gKmcy_982rl5xmYHsrM1IWJdmCL1AyOmU9JdQXazrp8L1_PYgUtgxj8x4f/slack"
[测试版] 预算警报的 Webhooks
注意: 这是一个测试版功能,因此规范可能会发生变化。
设置一个 Webhook 以接收预算警报通知。
- 设置 config.yaml
将 URL 添加到您的环境中,用于测试,您可以使用这里的链接
export WEBHOOK_URL="https://webhook.site/6ab090e8-c55f-4a23-b075-3209f5c57906"
将 'webhook' 添加到 config.yaml
general_settings:
alerting: ["webhook"] # 👈 关键变更
- 启动代理
litellm --config /path/to/config.yaml
# 运行在 http://0.0.0.0:4000
- 测试它!
curl -X GET --location 'http://0.0.0.0:4000/health/services?service=webhook' \
--header 'Authorization: Bearer sk-1234'
预期响应
{
"spend": 1, # 'event_group' 的支出
"max_budget": 0, # 为 'event_group' 设置的 'max_budget'
"token": "88dc28d0f030c55ed4ab77ed8faf098196cb1c05df778539800c9f1243fe6b4b",
"user_id": "default_user_id",
"team_id": null,
"user_email": null,
"key_alias": null,
"projected_exceeded_data": null,
"projected_spend": null,
"event": "budget_crossed", # 字面量 ["budget_crossed", "threshold_crossed", "projected_limit_exceeded"]
"event_group": "user",
"event_message": "用户预算: 预算超出"
}
Webhook 事件的 API 规范
spendfloat: 当前 'event_group' 的支出金额。max_budgetfloat 或 null: 'event_group' 允许的最大预算。如果未设置则为 null。tokenstr: 用于身份验证或识别目的的密钥的哈希值。customer_idstr 或 null: 与事件关联的客户的 ID(可选)。internal_user_idstr 或 null: 与事件关联的内部用户的 ID(可选)。team_idstr 或 null: 与事件关联的团队的 ID(可选)。user_emailstr 或 null: 与事件关联的内部用户的电子邮件(可选)。key_aliasstr 或 null: 与事件关联的密钥的别名(可选)。projected_exceeded_datestr 或 null: 预算预计超支的日期,当密钥设置 'soft_budget' 时返回(可选)。projected_spendfloat 或 null: 预计支出金额,当密钥设置 'soft_budget' 时返回(可选)。eventLiteral["budget_crossed", "threshold_crossed", "projected_limit_exceeded"]: 触发 webhook 的事件类型。可能的值包括:- "spend_tracked": 每当为客户 ID 记录支出时发出。
- "budget_crossed": 表示支出已超过最大预算。
- "threshold_crossed": 表示支出已超过阈值(当前在预算达到 85% 和 95% 时发送)。
- "projected_limit_exceeded": 仅针对 "key" - 表示预计支出预计将超过软预算阈值。
event_groupLiteral["customer", "internal_user", "key", "team", "proxy"]: 与事件关联的组。可能的值包括:- "customer": 事件与特定客户相关。
- "internal_user": 事件与特定内部用户相关。
- "key": 事件与特定密钥相关。
- "team": 事件与团队相关。
- "proxy": 事件与代理相关。
event_messagestr: 事件的人类可读描述。
区域中断警报 (✨ 企业功能)
如果提供商区域发生中断,请设置警报。
general_settings:
alerting: ["slack"]
alert_types: ["region_outage_alerts"]
默认情况下,如果一个区域中的多个模型在一分钟内失败了 5 次以上的请求,则会触发警报。'400' 状态代码错误不计入(即 BadRequestErrors)。
使用以下方式控制阈值:
general_settings:
alerting: ["slack"]
alert_types: ["region_outage_alerts"]
alerting_args:
region_outage_alert_ttl: 60 # 时间窗口,单位为秒
minor_outage_alert_threshold: 5 # 触发轻微警报的错误数量
major_outage_alert_threshold: 10 # 触发重大警报的错误数量
所有可能的警报类型
与 LLM 相关的警报
| 警报类型 | 描述 | 默认开启 |
|---|---|---|
llm_exceptions | LLM API 异常警报 | ✅ |
llm_too_slow | LLM 响应慢于设定阈值的通知 | ✅ |
llm_requests_hanging | LLM 请求未完成的警报 | ✅ |
cooldown_deployment | 部署进入冷却时的警报 | ✅ |
new_model_added | 通过 /model/new 向 litellm 代理添加新模型时的通知 | ✅ |
outage_alerts | 特定 LLM 部署面临中断时的警报 | ✅ |
region_outage_alerts | 特定 LLM 区域面临中断时的警报。例如 us-east-1 | ✅ |
预算和支出警报
| 警报类型 | 描述 | 默认开启 |
|---|---|---|
budget_alerts | 与预算限制或阈值相关的通知 | ✅ |
spend_reports | 跨团队或标签的定期支出报告 | ✅ |
failed_tracking_spend | 支出跟踪失败时的警报 | ✅ |
daily_reports | 每日支出报告 | ✅ |
fallback_reports | LLM 回退发生的每周报告 | ✅ |
数据库警报
| 警报类型 | 描述 | 默认开启 |
|---|---|---|
db_exceptions | 数据库相关异常的通知 | ✅ |
管理端点警报 - 虚拟密钥、团队、内部用户
| 警报类型 | 描述 | 默认开启 |
|---|---|---|
new_virtual_key_created | 创建新虚拟密钥时的通知 | ❌ |
virtual_key_updated | 虚拟密钥修改时的警报 | ❌ |
virtual_key_deleted | 虚拟密钥删除时的通知 | ❌ |
new_team_created | 创建新团队时的警报 | ❌ |
team_updated | 团队详情修改时的通知 | ❌ |
team_deleted | 团队删除时的警报 | ❌ |
new_internal_user_created | 新内部用户账户的通知 | ❌ |
internal_user_updated | 当内部用户详细信息发生变更时发出警报 | ❌ |
internal_user_deleted | 内部用户账户被移除时发出通知 | ❌ |