Skip to main content

🚨 警报 / 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"]
为给定警报类型提供多个 Slack 频道
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,您可以用于警报

快速开始
  1. 为您的 Microsoft Teams 频道获取一个 Webhook URL

  2. 将其添加到您的 .env 文件中

SLACK_WEBHOOK_URL="https://berriai.webhook.office.com/webhookb2/...6901/IncomingWebhook/b55fa0c2a48647be8e6effedcd540266/e04b1092-4a3e-44a2-ab6b-29a0a4854d1d"
  1. 将其添加到您的 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 分钟,则发送警报
  1. 运行健康检查!

调用代理的 /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,您可以用于警报

快速开始
  1. 为您的 Discord 频道获取一个 Webhook URL

  2. 在您的 Discord Webhook 后附加 /slack - 它应该看起来像这样

"https://discord.com/api/webhooks/1240030362193760286/cTLWt5ATn1gKmcy_982rl5xmYHsrM1IWJdmCL1AyOmU9JdQXazrp8L1_PYgUtgxj8x4f/slack"
  1. 将其添加到您的 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 以接收预算警报通知。

  1. 设置 config.yaml

将 URL 添加到您的环境中,用于测试,您可以使用这里的链接

export WEBHOOK_URL="https://webhook.site/6ab090e8-c55f-4a23-b075-3209f5c57906"

将 'webhook' 添加到 config.yaml

general_settings: 
alerting: ["webhook"] # 👈 关键变更
  1. 启动代理
litellm --config /path/to/config.yaml

# 运行在 http://0.0.0.0:4000
  1. 测试它!
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 规范

  • spend float: 当前 'event_group' 的支出金额。

  • max_budget float 或 null: 'event_group' 允许的最大预算。如果未设置则为 null。

  • token str: 用于身份验证或识别目的的密钥的哈希值。

  • customer_id str 或 null: 与事件关联的客户的 ID(可选)。

  • internal_user_id str 或 null: 与事件关联的内部用户的 ID(可选)。

  • team_id str 或 null: 与事件关联的团队的 ID(可选)。

  • user_email str 或 null: 与事件关联的内部用户的电子邮件(可选)。

  • key_alias str 或 null: 与事件关联的密钥的别名(可选)。

  • projected_exceeded_date str 或 null: 预算预计超支的日期,当密钥设置 'soft_budget' 时返回(可选)。

  • projected_spend float 或 null: 预计支出金额,当密钥设置 'soft_budget' 时返回(可选)。

  • event Literal["budget_crossed", "threshold_crossed", "projected_limit_exceeded"]: 触发 webhook 的事件类型。可能的值包括:

    • "spend_tracked": 每当为客户 ID 记录支出时发出。
    • "budget_crossed": 表示支出已超过最大预算。
    • "threshold_crossed": 表示支出已超过阈值(当前在预算达到 85% 和 95% 时发送)。
    • "projected_limit_exceeded": 仅针对 "key" - 表示预计支出预计将超过软预算阈值。
  • event_group Literal["customer", "internal_user", "key", "team", "proxy"]: 与事件关联的组。可能的值包括:

    • "customer": 事件与特定客户相关。
    • "internal_user": 事件与特定内部用户相关。
    • "key": 事件与特定密钥相关。
    • "team": 事件与团队相关。
    • "proxy": 事件与代理相关。
  • event_message str: 事件的人类可读描述。

区域中断警报 (✨ 企业功能)

如果提供商区域发生中断,请设置警报。

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_exceptionsLLM API 异常警报
llm_too_slowLLM 响应慢于设定阈值的通知
llm_requests_hangingLLM 请求未完成的警报
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_reportsLLM 回退发生的每周报告

数据库警报

警报类型描述默认开启
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内部用户账户被移除时发出通知
优云智算