跳至主要內容

✨ 稽核記錄

身為 Proxy 管理員,您可以檢查某個實體(金鑰、團隊、使用者、模型)是否以及何時被建立、更新、刪除或重新產生,以及是誰執行了該動作。這對於稽核與法規遵循很有用。

LiteLLM 會追蹤以下實體與動作的變更:

  • 實體: 金鑰、團隊、使用者、模型
  • 動作: 建立、更新、刪除、重新產生
企業版功能

此功能需要 LiteLLM 企業版授權。立即開始 30 天免費試用或預約展示。 查看企業版完整功能。

用法​

1. 開啟稽核記錄​

使用企業授權時,稽核記錄預設為開啟,因此無須設定。其他方案,或如果您想明確指定,請將 store_audit_logs 加入您的 litellm config.yaml,然後啟動 proxy

litellm_settings:
store_audit_logs: true

若要在企業授權上關閉稽核記錄,請將其明確設定為 false,這會優先於預設值。LITELLM_STORE_AUDIT_LOGS 的作用方式與設定值相同,且會在 config 保持 store_audit_logs 未設定時讀取

litellm_settings:
store_audit_logs: false

2. 對某個實體進行變更​

在此範例中,我們將刪除一個金鑰。

curl -X POST 'http://0.0.0.0:4000/key/delete' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"key": "d5265fc73296c8fea819b4525590c99beab8c707e465afdf60dab57e1fa145e4"
}'

3. 在 LiteLLM UI 上檢視稽核記錄​

在 LiteLLM UI 中,前往 Logs -> Audit Logs。您應該會看到該金鑰刪除的稽核記錄。

將稽核記錄匯出到外部儲存體​

除了將稽核記錄儲存在資料庫中之外,您也可以將其匯出到外部儲存後端(例如 S3)。記錄會批次處理並非同步上傳,因此不會阻塞您的 proxy 請求。

S3 範例​

將 audit_log_callbacks 和 s3_callback_params 加到您的 litellm_settings:

litellm_settings:
store_audit_logs: true
audit_log_callbacks: ["s3_v2"]
s3_callback_params:
s3_bucket_name: my-audit-logs-bucket # AWS Bucket Name
s3_region_name: us-west-2 # AWS Region
s3_aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
s3_aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
s3_path: litellm-audit # [OPTIONAL] prefix path in the bucket

稽核記錄會以 JSON 檔案寫入至:

s3://<bucket>/audit_logs/<YYYY-MM-DD>/<HH-MM-SS>_<audit-log-id>.json
# or, when s3_path is set:
s3://<bucket>/<s3_path>/audit_logs/<YYYY-MM-DD>/<HH-MM-SS>_<audit-log-id>.json
資訊

audit_log_callbacks 只有在啟用稽核記錄時才會觸發,而這在企業授權下是預設值,否則需要 store_audit_logs: true。

將稽核記錄傳送到不同的 S3 儲存桶​

如果您也透過 callbacks: ["s3_v2"] 將一般請求/回應記錄傳送到 S3,預設情況下兩個串流會共用 s3_callback_params 並落在同一個儲存桶中。若要將稽核記錄傳送到不同的儲存桶(例如僅供法遵使用、具有更嚴格存取控制或更長保留期限的儲存桶),請新增一個 s3_audit_callback_params 區塊。它接受與 s3_callback_params 相同的欄位,且只適用於稽核記錄。

litellm_settings:
store_audit_logs: true
callbacks: ["s3_v2"] # normal request logs
audit_log_callbacks: ["s3_v2"] # audit logs

s3_callback_params: # used for normal logs
s3_bucket_name: my-llm-logs-bucket
s3_region_name: us-west-2
s3_aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
s3_aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
s3_path: litellm-logs

s3_audit_callback_params: # used for audit logs only
s3_bucket_name: my-audit-logs-bucket
s3_region_name: us-east-1 # different region OK
s3_aws_access_key_id: os.environ/AWS_AUDIT_ACCESS_KEY_ID # different creds OK
s3_aws_secret_access_key: os.environ/AWS_AUDIT_SECRET_ACCESS_KEY
s3_path: litellm-audit

進階​

對使用者的屬性管理變更​

代表某位使用者呼叫管理端點,並讓稽核記錄將變更歸屬於該使用者,而不是呼叫 key 的 user_id。(在將 proxy 連接到您的開發平台時很有用)。

自 v1.84.0 起需選擇加入

在 v1.84.0 之前,LiteLLM-Changed-By 標頭會無條件生效,任何呼叫者都能重寫稽核歸屬。自 v1.84.0 起,除非呼叫 key,或其 team,的 metadata 中有 allow_litellm_changed_by_header: true,否則 proxy 會忽略該標頭;若未選擇加入,changed_by 會回退到呼叫 key 的 user_id。master key 無法選擇加入,因為它沒有儲存的 metadata,因此請搭配 admin virtual key 傳送該標頭

1. 允許您的 admin key 設定標頭​

在將傳送該標頭之 admin virtual key 的 metadata 中設定 allow_litellm_changed_by_header: true。改為在該 key 的 team metadata 上設定,則會讓該 team 上的每個 key 都選擇加入

curl -X POST 'http://0.0.0.0:4000/key/update' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"key": "sk-my-admin-key",
"metadata": {"allow_litellm_changed_by_header": true}
}'

2. 在請求標頭中設定 LiteLLM-Changed-By​

在呼叫管理端點時,請在請求標頭中設定 'user_id'。檢視完整清單。

  • 使用已選擇加入的 admin key 更新 Team 預算。
  • 將變更歸屬於 'krrish@berri.ai'。

Key 變更: 傳遞 -H 'LiteLLM-Changed-By: krrish@berri.ai'

curl -X POST 'http://0.0.0.0:4000/team/update' \
-H 'Authorization: Bearer sk-my-admin-key' \
-H 'LiteLLM-Changed-By: krrish@berri.ai' \
-H 'Content-Type: application/json' \
-d '{
"team_id" : "8bf18b11-7f52-4717-8e1f-7c65f9d01e52",
"max_budget": 2000
}'

3. 產生的稽核記錄​

{
"id": "bd136c28-edd0-4cb6-b963-f35464cf6f5a",
"updated_at": "2024-06-08 23:41:14.793",
"changed_by": "krrish@berri.ai", # 👈 CHANGED BY
"changed_by_api_key": "example-api-key-123",
"action": "updated",
"table_name": "LiteLLM_TeamTable",
"object_id": "8bf18b11-7f52-4717-8e1f-7c65f9d01e52",
"before_value": {
"spend": 0,
"max_budget": 0,
},
"updated_values": {
"team_id": "8bf18b11-7f52-4717-8e1f-7c65f9d01e52",
"max_budget": 2000 # 👈 CHANGED TO
},
}

稽核記錄的 API 規格​

id​

  • 型別: String
  • 說明: 這是每個稽核記錄項目的唯一識別碼。預設會自動產生為 UUID(Universally Unique Identifier)。

updated_at​

  • 型別: DateTime
  • 說明: 此欄位儲存稽核記錄項目建立或更新時的時間戳記。預設會自動設為目前的日期與時間。

changed_by​

  • Type: String
  • Description: 執行受稽核動作的 user_id。如果傳入 LiteLLM-Changed-By 標頭,且呼叫 key 或其 team 的 metadata 中有 allow_litellm_changed_by_header: true,則 changed_by=<value passed for LiteLLM-Changed-By header>

changed_by_api_key​

  • 型別: String
  • 說明: 此欄位儲存用來執行被稽核動作的雜湊 API 金鑰。若留白,預設為空字串。

action​

  • 型別: String
  • 說明: 執行的動作類型。為 "create"、"update" 或 "delete" 其中之一。

table_name​

  • 型別: String
  • 說明: 此欄位儲存受被稽核動作影響的資料表名稱。可為下列值之一:LiteLLM_TeamTable、LiteLLM_UserTable、LiteLLM_VerificationToken

object_id​

  • 型別: String
  • 說明: 此欄位儲存受被稽核動作影響的物件 ID。可以是 key ID、team ID、user ID

before_value​

  • 型別: Json?
  • 說明: 此欄位儲存執行被稽核動作前該資料列的值。此欄位為選用,可為 null。

updated_values​

  • 型別: Json?
  • 說明: 此欄位儲存執行被稽核動作後已更新的資料列值