๐ Prometheus ๋ฉํธ๋ฆญ
๐ Prometheus ๋ฉํธ๋ฆญ
LiteLLM์ Prometheus๊ฐ ํด๋งํ ์ ์๋ /metrics ์๋ํฌ์ธํธ๋ฅผ ๋
ธ์ถํด์. ์ง์ถ, ํ ํฐ ์ฌ์ฉ๋, ๋ ์ดํธ ๋ฆฌ๋ฐ, ์์ฐ, ๋ ์ดํด์, ๊ฐ๋๋ ์ผ, MCP, ๊ด๋ฆฌํ ๋ฐฐ์น ๋ฑ ํ๋ก์์ ๊ฑฐ์ ๋ชจ๋ ์ธก๋ฉด์ ์๊ณ์ด ๋ฉํธ๋ฆญ์ผ๋ก ์ถ์ ํ ์ ์์ด์.
ํ๋ก์ ์ค์ ์ callbacks์ prometheus๋ฅผ ์ถ๊ฐํด ์ผ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก /metrics๋ LiteLLM API ํค ์ธ์ฆ์ ์๊ตฌํด์(v1.85.0๋ถํฐ).
์ถ์ฒ: ๋ฌธ์
๋ณธ๋ฌธ
LiteLLM์ Prometheus๊ฐ ํด๋งํ ์ ์๋ /metrics ์๋ํฌ์ธํธ๋ฅผ ๋
ธ์ถํด์.
๋น ๋ฅธ ์์ (Quick Start)
LiteLLM CLI๋ฅผ litellm --config proxy_config.yaml๋ก ์ด๋ค๋ฉด uv add prometheus_client==0.20.0๊ฐ ํ์ํด์. ์ด๊ฒ์ litellm ๋์ปค ์ด๋ฏธ์ง์ ๋ฏธ๋ฆฌ ์ค์น๋ผ ์์ด์.
ํ๋ก์ config.yaml์ ๋ค์์ ์ถ๊ฐํ์ธ์:
model_list:
- model_name: gpt-5.6-terra
litellm_params:
model: gpt-5.6-terra
litellm_settings:
callbacks:
- prometheus
ํ๋ก์ ์์:
litellm --config config.yaml --debug
ํ ์คํธ ์์ฒญ:
curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-5.6-terra",
"messages": [
{
"role": "user",
"content": "what llm are you"
}
]
}'
/metrics์์ ๋ฉํธ๋ฆญ ๋ณด๊ธฐ:
curl http://localhost:4000/metrics \
-H "Authorization: Bearer ***"
์ฌ๋ฌ ์์ปค (Multiple Workers)
์ฌ๋ฌ ์์ปค๋ก LiteLLM์ ์ฐ๋ฉด ์์ปค ํ๋ก์ธ์ค ๊ฐ ์ง๊ณ ๋ฉํธ๋ฆญ ์์ง์ ํ์ฑํํ๊ธฐ ์ํด PROMETHEUS_MULTIPROC_DIR ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด์ผ ํด์.
export PROMETHEUS_MULTIPROC_DIR="/prometheus_multiproc"
์ด ๋๋ ํฐ๋ฆฌ๋ Prometheus ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ๋ฌ ์์ปค ํ๋ก์ธ์ค ๊ฐ ๊ณต์ ํ ๋ฉํธ๋ฆญ ํ์ผ์ ์ ์ฅํ๋ ๋ฐ ์จ์. ๋๋ ํฐ๋ฆฌ๊ฐ ์กด์ฌํ๊ณ LiteLLM ํ๋ก์ธ์ค๊ฐ ์ธ ์ ์๋์ง ํ์ธํ์ธ์.
Prometheus ์คํฌ๋ํ์ ์ถ๋ก ํธ๋ํฝ์์ ๋ถ๋ฆฌํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก LiteLLM์ ์ถ๋ก ์์ฒญ์ ์๋นํ๋ ๊ฐ์ Uvicorn ์์ปค๋ค์ ์ฌ์ฉํด ํ๋ก์ ํฌํธ์ /metrics๋ฅผ ๋ ๋๋งํด์. ๋ฉํฐ ์์ปค ๋ฐฐํฌ์์ ๊ฐ ์คํฌ๋ํ์ ์์
์ ๊ฐ Prometheus ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํด์. ํฌ๊ฑฐ๋ ๋์ ์นด๋๋๋ฆฌํฐ์ ๋ฉํธ๋ฆญ ์ธํธ๋ ์์ฒญ ์๋น ์์ปค์ CPU๋ฅผ ์๋ชจํ๊ณ ๊ผฌ๋ฆฌ ์ง์ฐ์ ๋์ผ ์ ์์ด์.
LiteLLM v1.101.0 ์ด์์ ์ ์ฉ ํ๋ก์ธ์ค์์ ๊ฐ์ ๋ฉํธ๋ฆญ ์ธํธ๋ฅผ ์๋นํ ์ ์์ด์. --prometheus_metrics_port ๋๋ PROMETHEUS_METRICS_PORT๋ฅผ ๊ตฌ์ฑํ ๋ค Prometheus๊ฐ ๊ทธ ํฌํธ๋ฅผ ์คํฌ๋ํํ๋๋ก ์
๋ฐ์ดํธํ์ธ์. ํ๋ก์ ํฌํธ์ ๊ธฐ์กด /metrics ๋ผ์ฐํธ๋ ํ์ ํธํ์ฑ์ ์ํด ์ ์ง๋๋ฏ๋ก, ์ถ๋ก ํธ๋ํฝ์ ์ค๋จํ์ง ์๊ณ ์คํฌ๋ํ ๋์์ ์ฎ๊ธธ ์ ์์ด์.
prometheus ์ฝ๋ฐฑ์ด ํ์ฑํ๋์ด์ผ ํด์. ์ ์ฉ ํฌํธ๊ฐ ๊ตฌ์ฑ๋๋ฉด LiteLLM์ ํ์ ์ PROMETHEUS_MULTIPROC_DIR์ ๋ง๋ค๊ณ , ๋ฉํธ๋ฆญ ํ๋ก์ธ์ค๋ฅผ ํ๋ก์ --host์ ๋ฐ์ธ๋ฉํ๋ฉฐ, ํ๋ก์์ ํจ๊ป ํ๋ก์ธ์ค๋ฅผ ์ค์งํด์.
litellm --config config.yaml --num_workers 4 --prometheus_metrics_port 4001
prometheus.yml:
scrape_configs:
- job_name: litellm
static_configs:
- targets: ["litellm:4001"]
๋ฉํธ๋ฆญ ๋ฆฌ์ค๋ ๋ณด์
์ ์ฉ ๋ฆฌ์ค๋๋ LiteLLM ๊ฐ์ ํค ์ธ์ฆ์ ์ฌ์ฉํ์ง ์์์. require_auth_for_metrics_endpoint๋ ํ๋ก์ ํฌํธ์ /metrics์๋ง ์ ์ฉ๋ผ์. ์ ๋ขฐํ ์ ์๋ Prometheus ๋๋ ์์ง๊ธฐ ๋คํธ์ํฌ์์๋ง ์ ๊ทผ์ ํ์ฉํ๊ณ , ์ ์ฉ ํฌํธ๋ฅผ ๊ณต๊ฐ ์ธ๊ทธ๋ ์ค๋ ๋ก๋ ๋ฐธ๋ฐ์๋ก ๊ฒ์ํ์ง ๋ง์ธ์.
๋ฐฐํฌ ๊ตฌ์ฑ
- Helm: litellm-helm
- Helm: componentized
- Terraform: AWS
values.yaml:
metricsServer:
enabled: true
port: 4001
serviceMonitor:
enabled: true
์ฐจํธ๋ ์ ์ฉ <release>-litellm-metrics ClusterIP Service๋ฅผ ๋ง๋ค๊ณ ServiceMonitor๋ฅผ ๊ทธ๊ฒ์ผ๋ก ํฅํ๊ฒ ํด์. ๊ธฐ๋ณธ Service๋ service.type์ด LoadBalancer์ผ ๋๋ ๋ณํ์ง ์์์. metricsServer.port๋ service.port์ ๋ฌ๋ผ์ผ ํด์.
values.yaml:
gateway:
metricsServer:
enabled: true
port: 4001
์ฐจํธ๋ ๋ฉํธ๋ฆญ ์๋ฒ๋ฅผ ๊ฒ์ดํธ์จ์ด์ Prometheus ๋ฉํฐํ๋ก์ธ์ค ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ์ฌ์ด๋์นด๋ก ์คํํด์. ์ ์ฉ <release>-litellm-gateway-metrics ClusterIP Service๋ฅผ ํตํด ๋ฆฌ์ค๋๋ฅผ ๋
ธ์ถํ๋ฏ๋ก, Prometheus๊ฐ ๊ทธ ํ๋ผ์ด๋น Service๋ฅผ ๋ฐ๊ฒฌํ๋๋ก ๊ตฌ์ฑํ์ธ์. ๊ฒ์ดํธ์จ์ด Service๋ ๊ทธ๋๋ก์์.
main.tf:
module "litellm" {
source = "BerriAI/litellm/aws"
version = "~> 1.101"
gateway_metrics_port = 4001
gateway_metrics_scrape_cidrs = ["10.0.0.0/16"]
}
๋ชจ๋์ ๊ฒ์ดํธ์จ์ด ํ์คํฌ์ ๋นํ์ ๋ฉํธ๋ฆญ ์ฌ์ด๋์นด๋ฅผ ์ถ๊ฐํ๊ณ gateway_metrics_scrape_cidrs์์๋ง ํด๋น ํฌํธ ์ธ๋ฐ์ด๋ ํธ๋ํฝ์ ํ์ฉํด์. Application Load Balancer๋ ๋ฉํธ๋ฆญ ํฌํธ๋ก ๋ผ์ฐํ
ํ์ง ์์์. gateway_metrics_port๊ฐ null(๊ธฐ๋ณธ๊ฐ)์ด๋ฉด ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋๊ณ , ํฌํธ 4000์ ๊ฒ์ดํธ์จ์ด ํธ๋ํฝ์ฉ์ผ๋ก ์์ฝ๋ผ์.
๋กค์์ ๊ฒ์ฆํ๊ธฐ
Prometheus ๋์์ ๋ฐ๊พธ๊ธฐ ์ ์ ์ ์ฉ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ์ธ์:
curl -fsS http://litellm:4001/health
# {"status":"healthy","multiproc_dir":"..."}
curl -fsS http://litellm:4001/metrics/ | head
์ ์ฉ ์๋ํฌ์ธํธ๋ ํ๋ก์ ํฌํธ ์๋ํฌ์ธํธ์ ๊ฐ์ ๋ฉํธ๋ฆญ, ๋ผ๋ฒจ ๊ตฌ์ฑ, ํํฐ๋ง, ์์ถ์ ์ง์ํด์. ํ๋ก์ readiness๋ ํฌํธ 4000์ /health/readiness์์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ด์.
๊ฐ์ ํค, ํ, ๋ด๋ถ ์ฌ์ฉ์
user, key, team ๋ฑ๋ณ ์ถ์ ์ ์ฌ์ฉํด์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_spend_metric |
์ด ์ง์ถ. "end_user", "hashed_api_key", "api_key_alias", "model", "team", "team_alias", "user", "user_email", "client_ip", "user_agent", "requested_model", "model_id", "api_provider", "service_tier"๋ณ |
litellm_total_tokens_metric |
"end_user", "hashed_api_key", "api_key_alias", "model", "team", "team_alias", "user", "user_email", "requested_model", "model_id", "api_provider"๋ณ ์
๋ ฅ + ์ถ๋ ฅ ํ ํฐ |
litellm_input_tokens_metric |
"end_user", "hashed_api_key", "api_key_alias", "model", "team", "team_alias", "user", "user_email", "requested_model", "model_id", "api_provider"๋ณ ์
๋ ฅ ํ ํฐ |
litellm_output_tokens_metric |
"end_user", "hashed_api_key", "api_key_alias", "model", "team", "team_alias", "user", "user_email", "requested_model", "model_id", "api_provider"๋ณ ์ถ๋ ฅ ํ ํฐ |
ํ ํฐ ์ ํ ์์ธ ๋ฉํธ๋ฆญ
๊ณต๊ธ์๊ฐ ๋ณด๊ณ ํ๋ usage.prompt_tokens_details์ usage.completion_tokens_details ํ๋(์: OpenAI ํ๋กฌํํธ ์บ์ฑ, Anthropic ํ๋กฌํํธ ์บ์ฑ, audio I/O, reasoning ํ ํฐ)๋ฅผ ๋ถํดํ๋ ํ ํฐ ์ ํ๋ณ ์นด์ดํฐ์์. ์ด๊ฒ๋ค์ ์ ์ด๊ณ์ **์ถ๊ฐ(additive)**๋๋ฉฐ, ๊ธฐ์กด litellm_input_tokens_metric / litellm_output_tokens_metric / litellm_total_tokens_metric ์นด์ดํฐ๋ ๊ทธ๋๋ก์์.
๊ฐ ์์ธ ์นด์ดํฐ๋ **ํฌ์(sparse)**ํด์: ๊ณต๊ธ์๊ฐ ํด๋น ํ๋์ ๋ํด 0์ด ์๋ ๊ฐ์ ๋ณด๊ณ ํ ๋๋ง ์ฆ๊ฐํ๋ฏ๋ก, ํน์ ์์ธ๋ฅผ ๋ ธ์ถํ์ง ์๋ ๊ณต๊ธ์๋ ๊ทธ์ ๋ํ series๋ฅผ ๋ง๋ค์ง ์์์. ๋ผ๋ฒจ ์งํฉ์ ๋ถ๋ชจ ์ ๋ ฅ/์ถ๋ ฅ ํ ํฐ ์นด์ดํฐ์ ๋์ผํด PromQL์์ ๊น๋ํ๊ฒ ์กฐ์ธํ ์ ์์ด์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | usage์ ์์ค ํ๋ |
์ผ๋ฐ ๊ณต๊ธ์ |
|---|---|---|
litellm_input_cached_tokens_metric |
prompt_tokens_details.cached_tokens |
OpenAI ํ๋กฌํํธ ์บ์, Anthropic cache_read_input_tokens, DeepSeek prompt_cache_hit_tokens |
litellm_input_cache_creation_tokens_metric |
prompt_tokens_details.cache_creation_tokens |
Anthropic cache_creation_input_tokens (ํ๋กฌํํธ ์บ์ ์ฐ๊ธฐ) |
litellm_input_audio_tokens_metric |
prompt_tokens_details.audio_tokens |
OpenAI gpt-4o-audio-*, Gemini ์ค๋์ค ์
๋ ฅ |
litellm_output_reasoning_tokens_metric |
completion_tokens_details.reasoning_tokens |
OpenAI o1-* / o3-*, Anthropic extended thinking |
litellm_output_audio_tokens_metric |
completion_tokens_details.audio_tokens |
OpenAI gpt-4o-audio-* ์ค๋์ค ์ถ๋ ฅ |
๋ชจ๋ธ ๊ทธ๋ฃน์ ์บ์ ์ ์ค ๋น์จ PromQL ์์:
sum by (requested_model) (rate(litellm_input_cached_tokens_metric_total[5m]))
/
sum by (requested_model) (rate(litellm_input_tokens_metric_total[5m]))
์ถ๋ ฅ ์ค reasoning ํ ํฐ ๋น์จ PromQL ์์:
sum by (requested_model) (rate(litellm_output_reasoning_tokens_metric_total[5m]))
/
sum by (requested_model) (rate(litellm_output_tokens_metric_total[5m]))
info
litellm_input_cached_tokens_metric์ ๊ณต๊ธ์ ์ธก ํ๋กฌํํธ ์บ์ ์ฝ๊ธฐ(๊ณต๊ธ์๊ฐ ์
๋ ฅ์ ์บ์๋ ์ผ๋ถ๋ฅผ ๋ณด๊ณ )๋ฅผ ์ถ์ ํด์. ์ด๊ฒ์ LiteLLM ์์ฒด ์๋ต ์บ์ ์ ์ค(์ ์ฒด ์๋ต์ด LiteLLM ์บ์์์ ์๋น๋๊ณ ๊ณต๊ธ์ ์์ฒญ์ด ์์)์ ์ถ์ ํ๋ litellm_cached_tokens_metric๊ณผ ๋ฌ๋ผ์.
์บ์ ๋ฉํธ๋ฆญ
LiteLLM ์์ฒด ์๋ต ์บ์๋ฅผ ์ถ์ ํด์. ์ธ ๋ฉํธ๋ฆญ ๋ชจ๋ "model", "hashed_api_key", "api_key_alias", "team", "team_alias", "end_user", "user", "model_id", "api_provider" ๋ผ๋ฒจ์ ๊ฐ์ ธ์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_cache_hits_metric |
LiteLLM ์๋ต ์บ์์์ ์์ ํ ์๋น๋ ์์ฒญ (๊ณต๊ธ์ ์์ฒญ ์์) |
litellm_cache_misses_metric |
LiteLLM ์๋ต ์บ์๋ฅผ ๋น๋๊ฐ ์์ฒญ |
litellm_cached_tokens_metric |
LiteLLM ์๋ต ์บ์์์ ์๋น๋ ํ ํฐ |
ํ - ์์ฐ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_team_max_budget_metric |
ํ์ ์ต๋ ์์ฐ ๋ผ๋ฒจ: "team", "team_alias" |
litellm_remaining_team_budget_metric |
ํ์ ๋จ์ ์์ฐ (LiteLLM์์ ๋ง๋ ํ) ๋ผ๋ฒจ: "team", "team_alias" |
litellm_team_budget_remaining_hours_metric |
ํ ์์ฐ์ด ๋ฆฌ์
๋๊ธฐ๊น์ง ๋จ์ ์๊ฐ ๋ผ๋ฒจ: "team", "team_alias" |
๊ฐ์ ํค - ์์ฐ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_api_key_max_budget_metric |
API ํค์ ์ต๋ ์์ฐ ๋ผ๋ฒจ: "hashed_api_key", "api_key_alias" |
litellm_remaining_api_key_budget_metric |
API ํค์ ๋จ์ ์์ฐ (LiteLLM์์ ๋ง๋ ํค) ๋ผ๋ฒจ: "hashed_api_key", "api_key_alias" |
litellm_api_key_budget_remaining_hours_metric |
API ํค ์์ฐ์ด ๋ฆฌ์
๋๊ธฐ๊น์ง ๋จ์ ์๊ฐ ๋ผ๋ฒจ: "hashed_api_key", "api_key_alias" |
๋ด๋ถ ์ฌ์ฉ์ - ์์ฐ
๋ด๋ถ ์ฌ์ฉ์์ ์ฐ๊ฒฐ๋ ์์ฒญ์์๋ง ๋ฐํ๋๋ฉฐ, ์ต๋ ์์ฐ๊ณผ ๋ฆฌ์ ์๊ฐ ๊ฒ์ด์ง๋ ์ฌ์ฉ์์๊ฒ ์์ฐ์ด ์ค์ ๋ ๊ฒฝ์ฐ์๋ง ์๊ตฌ๋ผ์. ๋ชจ๋ ์ฌ์ฉ์์ ๋ํด ์ค์ผ์ค๋ก ๋ฐํํ๋ ค๋ฉด Starter์์ Budget Metrics ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ์ธ์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_remaining_user_budget_metric |
๋ด๋ถ ์ฌ์ฉ์์ ๋จ์ ์์ฐ ๋ผ๋ฒจ: "user" |
litellm_user_max_budget_metric |
๋ด๋ถ ์ฌ์ฉ์์ ์ต๋ ์์ฐ ๋ผ๋ฒจ: "user" |
litellm_user_budget_remaining_hours_metric |
๋ด๋ถ ์ฌ์ฉ์ ์์ฐ์ด ๋ฆฌ์
๋๊ธฐ๊น์ง ๋จ์ ์๊ฐ ๋ผ๋ฒจ: "user" |
์กฐ์ง - ์์ฐ
์กฐ์ง์ ์ฐ๊ฒฐ๋ ์์ฒญ์์๋ง ๋ฐํ๋๋ฉฐ, ๋ด๋ถ ์ฌ์ฉ์ ๋ฉํธ๋ฆญ๊ณผ ๊ฐ์ ์กฐ๊ฑด์ด ์ ์ฉ๋ผ์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_remaining_org_budget_metric |
์กฐ์ง์ ๋จ์ ์์ฐ ๋ผ๋ฒจ: "org_id", "org_alias" |
litellm_org_max_budget_metric |
์กฐ์ง์ ์ต๋ ์์ฐ ๋ผ๋ฒจ: "org_id", "org_alias" |
litellm_org_budget_remaining_hours_metric |
์กฐ์ง ์์ฐ์ด ๋ฆฌ์
๋๊ธฐ๊น์ง ๋จ์ ์๊ฐ ๋ผ๋ฒจ: "org_id", "org_alias" |
๊ณ ๊ฐ (end_user) - ์์ฐ
end_user ์ถ์ ์ด ์ผ์ ธ ์์ ๋๋ง ๋ฐํ๋ผ์. ๊ฐ ์์ฒญ์์ ์ธ์ฆ ์ค ์บ์๋ ๊ณ ๊ฐ ํ์์ ํด๋น ์์ฒญ์ ๊ณ ๊ฐ์ ๋ํด ๋จ์ยท์ต๋ ์์ฐ ๊ฒ์ด์ง๊ฐ ๊ฐฑ์ ๋ผ์(์ถ๊ฐ DB ์ฟผ๋ฆฌ ์์. ์บ์ ๋ฏธ์ค๋ ์ฃผ๊ธฐ์ ๊ฐฑ์ ์ ๋งก๊น). ๋ฆฌ์
์๊ฐ ๊ฒ์ด์ง์ ์ต๊ทผ ํธ๋ํฝ์ด ์๋ ๊ณ ๊ฐ์ ์์ฐ์ด ๋ถ์ ๋ชจ๋ ๊ณ ๊ฐ์ ๋ํด ์ธ ๊ฒ์ด์ง๋ฅผ ๋ชจ๋ ๋ฐํํ๋ Startup์์ Budget Metrics ์ด๊ธฐํ๊ฐ ๋ค๋ค์. max_end_user_budget_id๊ฐ ์ค์ ๋๋ฉด ์์ฒด ์์ฐ์ด ์๋ ๊ณ ๊ฐ์ ๊ทธ ๊ธฐ๋ณธ ์์ฐ์ ๋ํด ๋ฐํ๋ผ์. ์ด ์๋ฆฌ์ฆ๋ Prometheus์์ end_user ์ถ์ ์ ์ค๋ช
๋ end_user ์นด๋๋๋ฆฌํฐ ์ํ์ ์ ์ฉ์ ๋ฐ์์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_remaining_customer_budget_metric |
๊ณ ๊ฐ์ ๋จ์ ์์ฐ ๋ผ๋ฒจ: "end_user" |
litellm_customer_max_budget_metric |
๊ณ ๊ฐ์ ์ต๋ ์์ฐ ๋ผ๋ฒจ: "end_user" |
litellm_customer_budget_remaining_hours_metric |
๊ณ ๊ฐ ์์ฐ์ด ๋ฆฌ์
๋๊ธฐ๊น์ง ๋จ์ ์๊ฐ ๋ผ๋ฒจ: "end_user" |
๊ฐ์ ํค - ๋ ์ดํธ ๋ฆฌ๋ฐ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_remaining_api_key_requests_for_model |
LiteLLM ๊ฐ์ API ํค์ ๋จ์ ์์ฒญ ์. ๊ฐ์ ํค์ ๋ชจ๋ธ๋ณ ๋ ์ดํธ ๋ฆฌ๋ฐ(rpm)์ด ์ค์ ๋ ๊ฒฝ์ฐ์๋ง. ๋ผ๋ฒจ: "hashed_api_key", "api_key_alias", "model", "model_id" |
litellm_remaining_api_key_tokens_for_model |
LiteLLM ๊ฐ์ API ํค์ ๋จ์ ํ ํฐ ์. ๊ฐ์ ํค์ ๋ชจ๋ธ๋ณ ํ ํฐ ์ ํ(tpm)์ด ์ค์ ๋ ๊ฒฝ์ฐ์๋ง. ๋ผ๋ฒจ: "hashed_api_key", "api_key_alias", "model", "model_id" |
Startup์์ Budget Metrics ์ด๊ธฐํ
์์ฒญ์ ๋ฐ๊ณ ์๋ ์๋๋ ๋ชจ๋ ํคยทํ์ ์์ฐ ๋ฉํธ๋ฆญ์ litellm์ด ๋ฐํํ๊ฒ ํ๋ ค๋ฉด config.yaml์์ prometheus_initialize_budget_metrics๋ฅผ true๋ก ์ค์ ํ์ธ์.
๋์ ๋ฐฉ์:
prometheus_initialize_budget_metrics๊ฐtrue๋ก ์ค์ ๋๋ฉด- 5๋ถ๋ง๋ค litellm์ด cron ์ก์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ชจ๋ ํค, ํ, ๋ด๋ถ ์ฌ์ฉ์, ์กฐ์ง์ ์ฝ์ด์
- ๊ทธ๋ฐ ๋ค์ ๊ฐ๊ฐ์ ๋ํด ์์ฐ ๋ฉํธ๋ฆญ์ ๋ฐํํด์
- ์ด๋
/metrics์๋ํฌ์ธํธ์ ์์ฐ ๋ฉํธ๋ฆญ์ ์ฑ์ฐ๋ ๋ฐ ์ฌ์ฉ๋ผ์
litellm_settings:
callbacks: ["prometheus"]
prometheus_initialize_budget_metrics: true
ํ ํฌ์ค ๋ฉํธ๋ฆญ (Pod Health Metrics)
ํ๋ณ ํ ๊น์ด๋ฅผ ์ธก์ ํ๊ณ , LiteLLM์ด ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์์ํ๊ธฐ ์ ์ ๋ฐ์ํ๋ ๋ ์ดํด์๋ฅผ ์ง๋จํ๋ ๋ฐ ์ฌ์ฉํด์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ํ์ | ์ค๋ช |
|---|---|---|
litellm_in_flight_requests |
Gauge | ์ด uvicorn ์์ปค์์ ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ HTTP ์์ฒญ ์. ํ์ ํ ๊น์ด๋ฅผ ์ค์๊ฐ ์ถ์ . ์์ปค๊ฐ ์ฌ๋ฌ ๊ฐ๋ฉด ๋ชจ๋ ํ์ฑ ์์ปค์ ๊ฑธ์ณ ํฉ์ฐ(livesum) |
litellm_admission_admitted_requests |
Gauge | ํ์ฌ ์์ปค๋ณ admission ์ฌ๋กฏ์ ๋ณด์ ํ ์์ฒญ ์. per-worker admission control์ด ์ผ์ ธ ์์ ๋๋ง ์ฑ์์ง. ํ์ฑ ์์ปค์ ๊ฑธ์ณ ํฉ์ฐ(livesum) |
litellm_admission_queued_requests |
Gauge | ์์ปค๋ณ admission ์ฌ๋กฏ์ ๊ธฐ๋ค๋ฆฌ๋ ์์ฒญ ์. ํ์ฑ ์์ปค์ ๊ฑธ์ณ ํฉ์ฐ(livesum) |
litellm_admission_rejected_requests_total |
Counter | admission control์ด 503์ผ๋ก ๊ฑฐ๋ถํ ์์ฒญ ์, reason ๋ผ๋ฒจ: queue_full(๋์ฐฉ ์ ํ๊ฐ ์ด๋ฏธ ์ต๋) ๋๋ queue_timeout(admission_queue_timeout_seconds๋ฅผ ๊ธฐ๋ค๋ ค๋ ์ฌ๋กฏ์ ๋ชป ์ป์) |
์ธ์ ์ด๊ฒ์ ์ธ๊น
LiteLLM์ ์์ฒด ํธ๋ค๋ฌ๊ฐ ์์ํ๋ ์์ ๋ถํฐ ๋ ์ดํด์๋ฅผ ์ธก์ ํด์. ํธ๋ค๋ฌ๊ฐ ์คํ๋๊ธฐ ์ ์ ์์ฒญ์ด uvicorn์ ์ด๋ฒคํธ ๋ฃจํ์์ ๊ธฐ๋ค๋ฆฐ๋ค๋ฉด, ๊ทธ ๋๊ธฐ๋ LiteLLM ์์ฒด ๋ก๊ทธ์ ๋ณด์ด์ง ์์์. litellm_in_flight_requests๋ ๊ทธ ์์ ์ ํ ๋ถํ๋ฅผ ๋ณด์ฌ์ค์.
high in_flight_requests + high ALB TargetResponseTime โ pod overloaded, scale out
low in_flight_requests + high ALB TargetResponseTime โ delay is pre-ASGI (event loop blocking)
Prometheus ์์ด๋ ํ์ฌ ๊ฐ์ ์ง์ ํ์ธํ ์ ์์ด์:
curl http://localhost:4000/health/backlog \
-H "Authorization: Bearer ***"
# {"in_flight_requests": 47}
ํ๋ก์ ๋ ๋ฒจ ์ถ์ ๋ฉํธ๋ฆญ
์ ์ฒด LiteLLM Proxy ์ฌ์ฉ๋ ์ถ์ ์ ์ฌ์ฉํด์.
- ํ๋ก์๋ก์ ์ค์ ํธ๋ํฝ ์๋ ์ถ์
- ํ๋ก์์ ๋ํ ์์ฒญ์ ํด๋ผ์ด์ธํธ ์ธก ์์ฒญยท์คํจ ์
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_proxy_failed_requests_metric |
ํ๋ก์์ ์คํจ ์๋ต ์ด ์ - ํด๋ผ์ด์ธํธ๊ฐ litellm ํ๋ก์์์ ์ฑ๊ณต ์๋ต์ ๋ฐ์ง ๋ชปํจ. ๋ผ๋ฒจ: "end_user", "hashed_api_key", "api_key_alias", "requested_model", "team", "team_alias", "user", "user_email", "exception_status", "exception_class", "route", "client_ip", "user_agent", "model_id", "api_provider" |
litellm_proxy_total_requests_metric |
ํ๋ก์ ์๋ฒ์ ๋ํ ์์ฒญ ์ด ์ - ํด๋ผ์ด์ธํธ ์ธก ์์ฒญ ์ ์ถ์ . ๋ผ๋ฒจ: "end_user", "hashed_api_key", "api_key_alias", "requested_model", "team", "team_alias", "user", "status_code", "user_email", "route", "client_ip", "user_agent", "model_id", "api_provider". ์ ํ์ ์ผ๋ก "stream" ํฌํจ - Emit Stream Label ์ฐธ๊ณ |
์ฝ๋ฐฑ ๋ก๊น ๋ฉํธ๋ฆญ
S3 ์ฝ๋ ์คํ ๋ฆฌ์ง ๊ฐ์ ๋ค์ด์คํธ๋ฆผ ์ฝ๋ฐฑ์ผ๋ก ๋ก๊ทธ๋ฅผ ๋ณด๋ด๋ ์คํจ๋ฅผ ๋ชจ๋ํฐ๋งํด์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_callback_logging_failures_metric |
๊ตฌ์ฑ๋ ์ฝ๋ฐฑ์ผ๋ก ๋ก๊ทธ ๋ฐํ ์๋ ์คํจ ์ด ์. ๋ผ๋ฒจ: "callback_name". S3, langfuse, langfuse_otel ๋ฐ ๊ธฐํ otel ๊ณต๊ธ์์ ์ธ ๋ ๋ฐ๋ณต ์คํจ ๊ฐ์ ์ฝ๋ฐฑ ์ ๋ฌ ๋ฌธ์ ์ ์๋ฆผ์ ์ |
์ง์ ์ฝ๋ฐฑ:
S3Logger- S3 ์ฝ๋ ์คํ ๋ฆฌ์ง ์คํจlangfuse- Langfuse ๋ก๊น ์คํจotel- OpenTelemetry ๋ก๊น ์คํจ
๊ฐ๋๋ ์ผ ๋ฉํธ๋ฆญ
๊ฐ๋๋ ์ผ์ด ์คํ๋ ๋๋ง ๋ฐํ๋ผ์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_guardrail_requests_total |
๊ฐ๋๋ ์ผ ํธ์ถ ์ด ์. ๋ผ๋ฒจ: "guardrail_name", "status", "hook_type" |
litellm_guardrail_errors_total |
๊ฐ๋๋ ์ผ ์คํ ์ค ๋ง๋ ์ค๋ฅ ์ด ์. ๋ผ๋ฒจ: "guardrail_name", "error_type", "hook_type" |
litellm_guardrail_latency_seconds |
๊ฐ๋๋ ์ผ ์คํ ๋ ์ดํด์(์ด) ํ์คํ ๊ทธ๋จ. ๋ผ๋ฒจ: "guardrail_name", "status", "error_type", "hook_type" |
MCP ๊ฒ์ดํธ์จ์ด ๋ฉํธ๋ฆญ
MCP ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ๋ง๋ MCP ๋๊ตฌ ํธ์ถ์์๋ง ๋ฐํ๋ผ์. ๋ ๋ฉํธ๋ฆญ ๋ชจ๋ "mcp_tool_name", "mcp_server_name", "hashed_api_key", "api_key_alias", "team", "team_alias", "user", "end_user" ๋ผ๋ฒจ์ ๊ฐ์ ธ์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_mcp_tool_calls_total |
๋๊ตฌยท์๋ฒ ์ด๋ฆ๋ณ๋ก ์ธ๊ทธ๋จผํธ๋ ์ด MCP ๋๊ตฌ ํธ์ถ ์ |
litellm_mcp_tool_call_spend_metric |
MCP ๋๊ตฌ ํธ์ถ์ ์ด ์ง์ถ. ํธ์ถ์ 0์ด ์๋ ๋น์ฉ์ด ์์ ๋๋ง ์ฆ๊ฐ |
๊ด๋ฆฌํ ๋ฐฐ์น ๋ฉํธ๋ฆญ (Managed Batch Metrics)
Enterprise ์ ์ฉ. LiteLLM ๊ด๋ฆฌํ ๋ฐฐ์น์ ๊ทธ๊ฒ์ ๋น์ฉ ์ถ์ ํ๋ CheckBatchCost ๋ฐฑ๊ทธ๋ผ์ด๋ ์ก์ ์ฌ์ฉํ ๋ ๋ฐํ๋ผ์.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_managed_batch_created_total |
์์ฑ๋ ๊ด๋ฆฌํ ๋ฐฐ์น ์ด ์. ๋ผ๋ฒจ: "model", "api_provider", "user", "user_email", "api_key_alias" |
litellm_managed_file_created_total |
์์ฑ๋ ๊ด๋ฆฌํ ํ์ผ ์ด ์. ๋ผ๋ฒจ: "model", "api_provider", "user", "user_email", "api_key_alias" |
litellm_managed_file_deleted_total |
๊ด๋ฆฌํ ํ์ผ ์ญ์ ์ด ์, ์ฑ๊ณต ๋๋ ์ฐจ๋จ. ๋ผ๋ฒจ: "result" |
litellm_managed_file_size_bytes |
๊ฐ์ฅ ์ต๊ทผ ๊ด๋ฆฌํ ๋ฐฐ์น ํ์ผ์ ํฌ๊ธฐ(๋ฐ์ดํธ), ๋ผ๋ฒจ ์กฐํฉ๋ณ ๋ง์ง๋ง์ผ๋ก ๋ณธ ๊ฐ. ๋ผ๋ฒจ: "purpose", "file_type", "model", "api_provider", "user" |
litellm_managed_batch_duration_seconds |
์๋ฃ๋ ๋ฐฐ์น์ ์ง์ ์๊ฐ(์ด) ํ์คํ ๊ทธ๋จ (completed_at - created_at). ๋ผ๋ฒจ: "model", "api_provider" |
litellm_check_batch_cost_jobs_polled |
๋ง์ง๋ง CheckBatchCost ํด๋ง์ด ์ฐพ์ ๋ฏธ์ฒ๋ฆฌ ๋ฐฐ์น ์ |
litellm_check_batch_cost_jobs_processed_total |
CheckBatchCost๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋น์ฉ ์ถ์ ํ ๋ฐฐ์น ์ด ์. ๋ผ๋ฒจ: "model", "api_provider" |
litellm_check_batch_cost_errors_total |
์ค๋ฅ ์ ํ๋ณ CheckBatchCost ์ค๋ฅ ์ด ์. ๋ผ๋ฒจ: "error_type" |
litellm_check_batch_cost_last_run_timestamp |
๋ง์ง๋ง CheckBatchCost ์ก ์คํ์ Unix ํ์์คํฌํ |
LLM ๊ณต๊ธ์ ๋ฉํธ๋ฆญ
LLM API ์ค๋ฅ ๋ชจ๋ํฐ๋ง๊ณผ ๋จ์ ๋ ์ดํธ ๋ฆฌ๋ฐยทํ ํฐ ์ ํ ์ถ์ ์ ์ฌ์ฉํด์.
์ถ์ ๋๋ ๋ผ๋ฒจ
| ๋ผ๋ฒจ | ์ค๋ช |
|---|---|
| litellm_model_name | LiteLLM์ด ์ฌ์ฉํ๋ LLM ๋ชจ๋ธ์ ์ด๋ฆ |
| requested_model | ์์ฒญ์ ๋ณด๋ธ ๋ชจ๋ธ |
| model_id | ๋ํ๋ก์ด๋จผํธ์ model_id. LiteLLM์ด ์๋ ์์ฑ, ๊ฐ ๋ํ๋ก์ด๋จผํธ๋ ๊ณ ์ model_id |
| api_base | ๋ํ๋ก์ด๋จผํธ์ API ๋ฒ ์ด์ค |
| api_provider | LLM API ๊ณต๊ธ์. ์: (azure, openai, vertex_ai) |
| hashed_api_key | ์์ฒญ์ ํด์๋ api ํค |
| api_key_alias | ์ฌ์ฉ๋ api ํค์ ๋ณ์นญ |
| team | ์์ฒญ์ ํ |
| team_alias | ์ฌ์ฉ๋ ํ์ ๋ณ์นญ |
| exception_status | ์์ผ๋ฉด ์์ธ ์ํ |
| exception_class | ์์ผ๋ฉด ์์ธ ํด๋์ค |
์ฑ๊ณต๊ณผ ์คํจ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_deployment_success_responses |
๋ํ๋ก์ด๋จผํธ์ ์ฑ๊ณต์ ์ธ LLM API ํธ์ถ ์ด ์. ๋ผ๋ฒจ: "requested_model", "litellm_model_name", "model_id", "api_base", "api_provider", "hashed_api_key", "api_key_alias", "team", "team_alias", "client_ip", "user_agent" |
litellm_deployment_failure_responses |
ํน์ LLM ๋ํ๋ก์ด๋จผํธ์ ์คํจํ LLM API ํธ์ถ ์ด ์. ๋ผ๋ฒจ: "requested_model", "litellm_model_name", "model_id", "api_base", "api_provider", "exception_status", "exception_class", "hashed_api_key", "api_key_alias", "team", "team_alias", "client_ip", "user_agent" |
litellm_deployment_total_requests |
๋ํ๋ก์ด๋จผํธ์ LLM API ํธ์ถ ์ด ์ - ์ฑ๊ณต + ์คํจ. ๋ผ๋ฒจ: "requested_model", "litellm_model_name", "model_id", "api_base", "api_provider", "hashed_api_key", "api_key_alias", "team", "team_alias", "client_ip", "user_agent" |
๋จ์ ์์ฒญ๊ณผ ํ ํฐ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_remaining_requests_metric |
LLM API ๋ํ๋ก์ด๋จผํธ์์ ๋ฐํ๋ x-ratelimit-remaining-requests ์ถ์ . ๋ผ๋ฒจ: "model_group", "api_provider", "api_base", "litellm_model_name", "hashed_api_key", "api_key_alias", "model_id" |
litellm_remaining_tokens_metric |
LLM API ๋ํ๋ก์ด๋จผํธ์์ ๋ฐํ๋ x-ratelimit-remaining-tokens ์ถ์ . ๋ผ๋ฒจ: "model_group", "api_provider", "api_base", "litellm_model_name", "hashed_api_key", "api_key_alias", "model_id" |
๊ณต๊ธ์ ์์ฐ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_provider_remaining_budget_metric |
LLM ๊ณต๊ธ์์ ๋จ์ ์์ฐ. provider budget routing์ด ๊ตฌ์ฑ๋ ๋๋ง ๋ฐํ. ๋ผ๋ฒจ: "api_provider" |
๋ํ๋ก์ด๋จผํธ ์ํ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_deployment_state |
๋ํ๋ก์ด๋จผํธ์ ์ํ: 0 = ์ ์, 1 = ๋ถ๋ถ ์ฅ์ , 2 = ์์ ์ฅ์ . ๋ผ๋ฒจ: "litellm_model_name", "model_id", "api_base", "api_provider" |
litellm_deployment_latency_per_output_token |
๋ํ๋ก์ด๋จผํธ์ ์ถ๋ ฅ ํ ํฐ๋น ๋ ์ดํด์. ๋ผ๋ฒจ: "litellm_model_name", "model_id", "api_base", "api_provider", "hashed_api_key", "api_key_alias", "team", "team_alias" |
litellm_deployment_tpm_limit |
๋ํ๋ก์ด๋จผํธ์ ๊ตฌ์ฑ๋ TPM ์ ํ. config์ tpm ์ ํ์ด ์๋ ๋ํ๋ก์ด๋จผํธ์์๋ง ์ค์ . ๋ผ๋ฒจ: "litellm_model_name", "model_id", "api_base", "api_provider" |
litellm_deployment_rpm_limit |
๋ํ๋ก์ด๋จผํธ์ ๊ตฌ์ฑ๋ RPM ์ ํ. config์ rpm ์ ํ์ด ์๋ ๋ํ๋ก์ด๋จผํธ์์๋ง ์ค์ . ๋ผ๋ฒจ: "litellm_model_name", "model_id", "api_base", "api_provider" |
ํด๋ฐฑ (Failover) ๋ฉํธ๋ฆญ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_deployment_cooled_down |
LiteLLM ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ก์ง์ด ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ฟจ๋ค์ดํ ํ์. ๋ผ๋ฒจ: "litellm_model_name", "model_id", "api_base", "api_provider", "exception_status" |
litellm_deployment_successful_fallbacks |
primary ๋ชจ๋ธ์์ ํด๋ฐฑ ๋ชจ๋ธ๋ก์ ์ฑ๊ณต์ ์ธ ํด๋ฐฑ ์์ฒญ ์. ๋ผ๋ฒจ: "requested_model", "fallback_model", "hashed_api_key", "api_key_alias", "team", "team_alias", "exception_status", "exception_class", "model_id" |
litellm_deployment_failed_fallbacks |
primary ๋ชจ๋ธ์์ ํด๋ฐฑ ๋ชจ๋ธ๋ก์ ์คํจํ ํด๋ฐฑ ์์ฒญ ์. ๋ผ๋ฒจ: "requested_model", "fallback_model", "hashed_api_key", "api_key_alias", "team", "team_alias", "exception_status", "exception_class", "model_id" |
์์ฒญ ์นด์ดํ ๋ฉํธ๋ฆญ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_requests_metric |
deprecated litellm_proxy_total_requests_metric ์ฌ์ฉ. API ํค, ํ, ์ฌ์ฉ์๋ณ๋ก ์ถ์ ๋๋ litellm์ ๋ํ LLM ํธ์ถ ์ด ์. ๋ผ๋ฒจ: "end_user", "hashed_api_key", "api_key_alias", "model", "team", "team_alias", "user", "user_email", "client_ip", "user_agent", "requested_model", "model_id", "api_provider" |
litellm_zero_cost_requests_total |
usage๋ฅผ ๊ฐ์ก์ง๋ง ๊ฐ๊ฒฉ ํญ๋ชฉ์ ์์จ์ด 0์ด ์๋ ๋ชจ๋ธ์์ $0์ผ๋ก ๊ธฐ๋ก๋ ์์ฒญ. ๋ฌด๋ฃ ๋ชจ๋ธ๊ณผ usage ์๋ ์์ฒญ์ ์นด์ดํธ๋์ง ์์. ๋ผ๋ฒจ: "requested_model", "model", "model_id", "api_provider", "reason"์์ reason์ missing_pricing_key, pricing_not_applied, cost_calculation_error. ์นด์ดํธ๋ ๊ฐ ์์ฒญ์ ๋๋ฝ๋ ๊ฐ๊ฒฉ ํค๋ฅผ ์ด๋ฆ์ผ๋ก ์ฐ๋ ๊ฒฝ๊ณ ํ๋๋ ๊ธฐ๋กํจ. Requests that price to $0 ์ฐธ๊ณ |
์์ฒญ ๋ ์ดํด์ ๋ฉํธ๋ฆญ
๋ ์ดํด์ SLO์ ์๋ฆผ์๋ litellm_request_total_latency_metric์ ์ฌ์ฉํด์. ํ๋ก์ ๋์ฐฉ๋ถํฐ ์ฒ๋ฆฌ ์ข
๋ฃ๊น์ง ์ ์ฒด ์์ฒญ์ ์ธก์ ํด์. ์ด ๋ ์ดํด์๊ฐ ๋๋ฉด ๋ค๋ฅธ ๋ฉํธ๋ฆญ์ผ๋ก ์ง์ฐ์ด ์ธ์ฆ, LLM ๊ณต๊ธ์, LiteLLM ์ฒ๋ฆฌ ์ค ์ด๋์ ์ค๋์ง ์๋ณํ์ธ์.
๋ชจ๋ ์์ฒญ ๋ ์ดํด์ ๋ฉํธ๋ฆญ์ ์ด ๋จ์๋ก ์ธก์ ๋๋ Prometheus ํ์คํ ๊ทธ๋จ์ด์์.
| ์ธก์ ํ๋ ค๋ ๊ฒ | ๋ฉํธ๋ฆญ | ์ธก์ ์ฐฝ |
|---|---|---|
| ์๋ ํฌ ์๋ ๋ ์ดํด์ | litellm_request_total_latency_metric |
์์ฒญ ๋์ฐฉ๋ถํฐ ์ฒ๋ฆฌ ์ข ๋ฃ๊น์ง. ์ธ์ฆ, pre-call ํ , LLM API ํธ์ถ, post-call ์ฒ๋ฆฌ ํฌํจ |
| ์ธ์ฆ๊ณผ ์์ฒญ ๋๊ธฐ ์๊ฐ | litellm_request_queue_time_seconds |
์์ฒญ ๋์ฐฉ๋ถํฐ pre-call ์ฒ๋ฆฌ ์์๊น์ง. ์ธ์ฆ๊ณผ ASGI ๋ ๋ฒจ ํ์ ํฌํจ. ๋ก๋๋ ํ๋ก์ ํ ์ง๋จ ์ litellm_in_flight_requests์ ๋น๊ต |
| LLM ๊ณต๊ธ์ ๋ ์ดํด์ | litellm_llm_api_latency_metric |
LLM API ํธ์ถ ์์๋ถํฐ ๋๊น์ง |
| ์ฒซ ํ ํฐ๊น์ง ์๊ฐ | litellm_llm_api_time_to_first_token_metric |
LLM API ํธ์ถ ์์๋ถํฐ ์ฒซ ํ ํฐ๊น์ง. ์คํธ๋ฆฌ๋ฐ ์์ฒญ์์๋ง ๋ฐํ |
| LiteLLM ์ฒ๋ฆฌ ์ค๋ฒํค๋ | litellm_overhead_latency_metric |
LLM API ํธ์ถ๊ณผ ๊ฐ๋๋ ์ผ์ ์ ์ธํ LiteLLM ์ฒ๋ฆฌ ์๊ฐ |
| LiteLLM ์ฒ๋ฆฌยท๊ฐ๋๋ ์ผ ์ค๋ฒํค๋ | litellm_overhead_with_guardrails_latency_metric |
LiteLLM ์ฒ๋ฆฌ ์๊ฐ + pre-callยทpost-call ๊ฐ๋๋ ์ผ, LLM API ํธ์ถ ์ ์ธ. ํธ์ถ ์ค ๊ฐ๋๋ ์ผ์ LLM API ํธ์ถ๊ณผ ๋์์ ์คํ๋๋ฉฐ ํฌํจ๋์ง ์์ |
์๋ฅผ ๋ค์ด ๋ค์ ์ฟผ๋ฆฌ๋ ์ง๋ 5๋ถ๊ฐ ์๋ ํฌ ์๋ p95 ๋ ์ดํด์๋ฅผ ๋ฐํํด์:
histogram_quantile(0.95, sum by (le) (rate(litellm_request_total_latency_metric_bucket[5m])))
์์ฒญ ๋ ์ดํด์ ๋ฉํธ๋ฆญ์ ๋ผ๋ฒจ:
| ๋ฉํธ๋ฆญ | ๋ผ๋ฒจ |
|---|---|
litellm_request_total_latency_metric litellm_llm_api_latency_metric litellm_llm_api_time_to_first_token_metric |
end_user, hashed_api_key, api_key_alias, requested_model, team, team_alias, user, model, model_id, api_provider, service_tier |
litellm_request_queue_time_seconds |
end_user, hashed_api_key, api_key_alias, requested_model, team, team_alias, user, model, model_id, api_provider |
litellm_overhead_latency_metric litellm_overhead_with_guardrails_latency_metric |
model_group, api_provider, api_base, litellm_model_name, hashed_api_key, api_key_alias, model_id |
litellm_request_queue_time_seconds๋ ๊ณต๊ธ์๊ฐ ์ด ๋ฉํธ๋ฆญ์ ๊ธฐ๋กํ ๋ service tier๋ฅผ ์ ํํ์ง ์์์ผ๋ฏ๋ก service_tier๋ฅผ ํฌํจํ์ง ์์์.
๋ํ๋ก์ด๋จผํธยท๋ ์ดํด์ ๋ฉํธ๋ฆญ์ ํธ์ถ์ ์ ์ ๊ตฌ์ฑ
๊ธฐ๋ณธ์ ์ผ๋ก ๋ํ๋ก์ด๋จผํธ ์นด์ดํฐ์ ํธ์ถ์ ๋ฒ์ ๋ ์ดํด์ ํ์คํ ๊ทธ๋จ์ ํธ์ถ์๋ฅผ api_key_alias๋ก ์๋ณํด์. prometheus_deployment_and_latency_caller_identity๋ฅผ ์ค์ ํด ๋์ user_email์ ์ฐ๊ฑฐ๋ ๋ ๋ผ๋ฒจ์ ๋ชจ๋ ๋
ธ์ถํ์ธ์:
config.yaml:
litellm_settings:
callbacks: ["prometheus"]
prometheus_deployment_and_latency_caller_identity: user_email
| ๊ฐ | ํธ์ถ์ ์ ์ ๋ผ๋ฒจ | ๋์ |
|---|---|---|
api_key_alias (๊ธฐ๋ณธ) |
api_key_alias |
๊ธฐ์กด ๋ฉํธ๋ฆญ ์คํค๋ง์ ๊ธฐ์กด ์ฟผ๋ฆฌ ์ ์ง |
user_email |
user_email |
๋ผ๋ฒจ ์คํค๋ง์์ ๊ฐ์ ์์น์ api_key_alias๋ฅผ ๋์ฒด |
both |
api_key_alias, ๊ทธ๋ค์ user_email |
๋ ์ฐจ์ ๋ชจ๋ ๋ฐํ. user_email์ api_key_alias ๋ฐ๋ก ๋ค์ ๋ฐฐ์น |
์ด ์ค์ ์ ๋ค์ ๋ฉํธ๋ฆญ ํจ๋ฐ๋ฆฌ์๋ง ์ ์ฉ๋ผ์:
litellm_deployment_total_requestslitellm_deployment_success_responseslitellm_deployment_failure_responseslitellm_request_total_latency_metriclitellm_llm_api_latency_metriclitellm_llm_api_time_to_first_token_metriclitellm_request_queue_time_secondslitellm_overhead_latency_metriclitellm_deployment_latency_per_output_token
ํธ์ถ์ ๋ฒ์๊ฐ ์๋ ๊ด๋ จ ๋ฉํธ๋ฆญ์ด๋ ๊ฐ๋๋ ์ผ ํฌํจ litellm_overhead_with_guardrails_latency_metric์ ๋ฐ๊พธ์ง ์์์. ์นด์ดํฐ ์ํ์ Prometheus _total ์ ๋ฏธ์ฌ๋ฅผ, ํ์คํ ๊ทธ๋จ _bucket, _sum, _count ์ํ์ ์ ํํ ์ ์ ๋ผ๋ฒจ์ ๋ฐ์์.
์ด๋ฉ์ผ์ด ํด์๋์ง ์์ ์์ฒญ์ LiteLLM์ ๊ธฐ์กด "None" ๋ผ๋ฒจ ๊ฐ์ ์ฌ์ฉํด์. ์๋ฅผ ๋ค์ด ๋ค์ ์ฟผ๋ฆฌ๋ ํด์๋ ์ด๋ฉ์ผ๋ณ๋ก ๊ณต๊ธ์ ์์ฒญ๊ณผ p95 ์๋ ํฌ ์๋ ๋ ์ดํด์๋ฅผ ๊ทธ๋ฃนํํ๋ฉด์ ์ด๋ฉ์ผ์ด ์๋ ์์ฒญ์ ์ ์ธํด์:
sum by (user_email) (
rate(litellm_deployment_total_requests_total{user_email!="None"}[5m])
)
histogram_quantile(
0.95,
sum by (user_email, le) (
rate(litellm_request_total_latency_metric_bucket{user_email!="None"}[5m])
)
)
prometheus_metrics_config.include_labels๋ ์ ํ๋ ๋ชจ๋์ ๋ํด ๊ฒ์ฆ๋ผ์. api_key_alias ๋ชจ๋์์๋ api_key_alias๋ฅผ, user_email ๋ชจ๋์์๋ user_email์, both ๋ชจ๋์์๋ ๋ ์ค ํ๋ ๋๋ ๋ ๋ค ํฌํจํ ์ ์์ด์. ์ ํจํ์ง ์์ ๋ชจ๋ ๊ฐ์ ์๋ฝ๋๋ ๊ฐ์ ๋ช
๋ช
ํ ValueError๋ก ํ๋ก์ ์์์ ์คํจ์ํค๊ณ , user_email ๋ชจ๋๊ฐ ์ํฅ์ ๋ฐ๋ ํจ๋ฐ๋ฆฌ์์ include_labels: [api_key_alias]์ ๊ฒฐํฉ๋๋ฉด ๋ ์ค์ ์ ๋ช
๋ช
ํ๋ฉฐ ์์๋ ์คํจํด์. prometheus_exclude_labels๋ ๋์ค์ ์ ์ฉ๋๋ฉฐ ๋ ์ ์ ๋ผ๋ฒจ ์ค ํ๋๋ฅผ ์ ๊ฑฐํ ์ ์์ด์. ์๋ฅผ ๋ค์ด ์ ์ฒด์ ์ผ๋ก both๋ฅผ ์ ํํ๊ณ api_key_alias๋ฅผ ์ ์ธํ๋ฉด ์ํฅ์ ๋ฐ๋ ํจ๋ฐ๋ฆฌ์๋ user_email๋ง ๋จ์์.
warning
์ด ์ค์ ์ ๋ฐ๊พธ๋ฉด ๊ณ ์ Prometheus ์์ง๊ธฐ ๋ผ๋ฒจ ์คํค๋ง๊ฐ ๋ฐ๋์ด์. ๋ณ๊ฒฝ ํ ๋ชจ๋ LiteLLM Proxy/logger ํ๋ก์ธ์ค๋ฅผ ์ฌ์์ํ์ธ์. ๋ผ์ด๋ธ ๊ตฌ์ฑ ๋ฆฌ๋ก๋๋ก ๊ธฐ์กด ์์ง๊ธฐ๋ฅผ ์ฌ๊ตฌ์ถํ ์ ์์ด์.
์ด๋ฉ์ผ ์ฃผ์๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์์. ์ด๋ฉ์ผ ๋ ๋ฒจ ๊ท์์ด ํ์ํ ๋๋ง ๊ธฐ๋ณธ๊ฐ์ ๋ฐ๊พธ๊ณ , /metrics ์ธ์ฆ์ ์ ์งํ๋ฉฐ, ์ ๋ขฐํ ์ ์๋ Prometheus ์คํฌ๋ํผ๋ก๋ง ๋คํธ์ํฌ ์ ๊ทผ์ ์ ํํ์ธ์.
both๋ ๊ด์ฐฐ๋ ์์ ํ ๋ผ๋ฒจ ํํ๋ง๋ค ํ๋์ฉ series๋ฅผ ๊ธฐ๋กํด์. ๊ฐ์ ์์ฒญ์ ๋ํ ๋ ๋ฒ์งธ series๋ฅผ ๋ง๋ค์ง ์์์. ๋ณ์นญ๊ณผ ์ด๋ฉ์ผ์ด ์์ ์ ์ธ ์ผ๋์ผ ๋งคํ์ด๋ฉด ์ด๋ฉ์ผ ๋ผ๋ฒจ์ ์ถ๊ฐํด๋ ๊ณ ์ series ์๋ ๋์ง ์์์. ๋ณ์นญ์ด ์ฌ์ฉ์ ๊ฐ ์ฌ์ฌ์ฉ๋๊ฑฐ๋ ๋งคํ์ด ์๊ฐ์ ๋ฐ๋ผ ๋ฐ๋๊ฑฐ๋ ๊ฐ์ ๋ณ์นญ์ด ํด์๋ ์ด๋ฉ์ผ๊ณผ ๋ถ์ฌ ์ด๋ฉ์ผ๋ก ๋ชจ๋ ๊ด์ฐฐ๋๋ฉด ์นด๋๋๋ฆฌํฐ๊ฐ ๋ ์ ์์ด์.
service tier๋ณ ๋ ์ดํด์ยท์ง์ถ ์ธ๊ทธ๋จผํธ
์์ฒญ ๋ ์ดํด์ ๋ฉํธ๋ฆญ๊ณผ litellm_spend_metric์ service_tier ๋ผ๋ฒจ์ ์์ฒญ์ด ์ค์ ๋ก ์คํ๋ ํฐ์ด๋ฅผ ๋ด์์. ๊ทธ๋์ ํธ๋ํฝ์ ๋ ์ธ๊ฑฐ๋ ๋ ๋น ๋ฅธ ํฐ์ด๋ก ์ฎ๊ธฐ๊ธฐ ์ ํ์ ๋ ์ดํด์์ ๋น์ฉ์ ๋น๊ตํ ์ ์์ด์:
histogram_quantile(0.95, sum by (service_tier, le) (rate(litellm_request_total_latency_metric_bucket[5m])))
๊ฐ์ ๊ณต๊ธ์๊ฐ ์๋นํ๋ค๊ณ ๋ณด๊ณ ํ ํฐ์ด์์. ๊ทธ๋์ "service_tier": "auto"๋ก ๋ณด๋ธ ์์ฒญ์ด auto๊ฐ ์๋๋ผ ๊ณต๊ธ์๊ฐ ๊ณ ๋ฅธ ๊ตฌ์ฒด์ ์ธ ํฐ์ด(์: default) ์๋์ ๋ํ๋์. ๊ณต๊ธ์๊ฐ ํฐ์ด๋ฅผ ๋ณด๊ณ ํ์ง ์์ผ๋ฉด ์์ฒญ์์ ๋ช
๋ช
๋ ํฐ์ด๋ฅผ ์ฐ๊ณ , ํฐ์ด๋ฅผ ์์ฒญํ์ง๋ ๋ฐ์ง๋ ์์ ์์ฒญ์ ๋น ๊ฐ์ผ๋ก ๋ผ๋ฒจ๋ง๋ผ์.
Prometheus์์ end_user ์ถ์
๊ธฐ๋ณธ์ ์ผ๋ก LiteLLM์ Prometheus์์ end_user๋ฅผ ์ถ์ ํ์ง ์์์. ์ด๋ LiteLLM Proxy ๋ฉํธ๋ฆญ์ ์นด๋๋๋ฆฌํฐ๋ฅผ ์ค์ด๊ธฐ ์ํด์์์.
Prometheus์์ end_user๋ฅผ ์ถ์ ํ๋ ค๋ฉด ๋ค์์ ํ ์ ์์ด์:
config.yaml:
litellm_settings:
callbacks: ["prometheus"]
enable_end_user_cost_tracking_prometheus_only: true
end_user ๋ผ๋ฒจ์ ์ง๋๋ ๋ชจ๋ ๋ฉํธ๋ฆญ(๊ณ ๊ฐ ์์ฐ ๊ฒ์ด์ง ํฌํจ)์ prometheus_end_user_metrics_max_series_per_metric(๊ธฐ๋ณธ 10000, ์ค๋๋ series๊ฐ ๋จผ์ ๋ฒ๋ ค์ง)์ผ๋ก ๋ฉํธ๋ฆญ๋น ์ํ๋๊ณ , prometheus_end_user_metrics_ttl_seconds(๊ธฐ๋ณธ 3600)๋ณด๋ค ์ค๋ ์ ํดํ series๋ ์ ๊ฑฐ๋ผ์. ๊ทธ ์ ํ์ ๋นํ์ฑํํ๋ ค๋ฉด ๋ ์ค ํ๋๋ฅผ null๋ก ์ค์ ํ์ธ์.
config.yaml:
litellm_settings:
callbacks: ["prometheus"]
enable_end_user_cost_tracking_prometheus_only: true
prometheus_end_user_metrics_max_series_per_metric: 500
prometheus_end_user_metrics_ttl_seconds: 1800
Emit Stream ๋ผ๋ฒจ
์์ฒญ์ ์คํธ๋ฆฌ๋ฐ vs ๋น-์คํธ๋ฆฌ๋ฐ์ผ๋ก ๋๋๋ ค๋ฉด litellm_proxy_total_requests_metric์ stream ๋ผ๋ฒจ์ ์ถ๊ฐํด์. ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋ผ์.
config.yaml:
litellm_settings:
callbacks: ["prometheus"]
prometheus_emit_stream_label: true
์ผ๋ฉด litellm_proxy_total_requests_metric์ ๊ฐ "True", "False", "None"์ ๊ฐ์ง stream ๋ผ๋ฒจ์ด ์ถ๊ฐ๋ผ์.
litellm_proxy_total_requests_metric{..., stream="True"} 42
litellm_proxy_total_requests_metric{..., stream="False"} 100
note
์ด ๋ผ๋ฒจ์ ์ตํธ์ธ์ด์์. ๊ธฐ์กด ๋ฉํธ๋ฆญ์ ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ฉด ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฐ๋๊ณ ์ด ๋ฉํธ๋ฆญ์ ๋์์ผ๋ก ํ๋ ๊ธฐ์กด Prometheus ์ฟผ๋ฆฌ/Grafana ๋์๋ณด๋๊ฐ ๊นจ์ง๊ธฐ ๋๋ฌธ์ด์์. ์ ๋ฐฐํฌ์์๋ง ์ผ๊ฑฐ๋ ๋์๋ณด๋๋ฅผ ์ ๋ฐ์ดํธํ ์ค๋น๊ฐ ๋์ ๋๋ง ์ผ์ธ์.
[BETA] ์ปค์คํ ๋ฉํธ๋ฆญ
์์ ์ธ๊ธ๋ ๋ชจ๋ ์ด๋ฒคํธ์์ ์ปค์คํ ๋ฉํธ๋ฆญ์ Prometheus๋ก ์ถ์ ํด์.
์ปค์คํ ๋ฉํ๋ฐ์ดํฐ ๋ผ๋ฒจ
config.yaml์์ ์ปค์คํ ๋ฉํ๋ฐ์ดํฐ ๋ผ๋ฒจ์ ์ ์ํด์
model_list:
- model_name: openai/gpt-5.6-terra
litellm_params:
model: openai/gpt-5.6-terra
api_key: os.environ/OPENAI_API_KEY
litellm_settings:
callbacks: ["prometheus"]
custom_prometheus_metadata_labels: ["metadata.foo", "metadata.bar"]
- ์ปค์คํ ๋ฉํ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ก ์์ฒญ์ ๋ณด๋ด์
- Curl ์์ฒญ
- ํค์์
- ํ์์
curl -L -X POST 'http://0.0.0.0:4000/v1/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ***' \
-d '{
"model": "openai/gpt-5.6-terra",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What's in this image?"
}
]
}
],
"max_tokens": 300,
"metadata": {
"foo": "hello world"
}
}'
curl -L -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer ***" \
-H 'Content-Type: application/json' \
-d '{
"metadata": {
"foo": "hello world"
}
}'
curl -L -X POST 'http://0.0.0.0:4000/team/new' \
-H "Authorization: Bearer ***" \
-H 'Content-Type: application/json' \
-d '{
"metadata": {
"foo": "hello world"
}
}'
- ์ปค์คํ
๋ฉํธ๋ฆญ์ ์ํด
/metrics์๋ํฌ์ธํธ๋ฅผ ํ์ธํด์
... "metadata_foo": "hello world" ...
์ปค์คํ ํ๊ทธ
๋ ๋์ ํํฐ๋งยท๋ชจ๋ํฐ๋ง์ ์ํด ํน์ ํ๊ทธ๋ฅผ prometheus ๋ผ๋ฒจ๋ก ์ถ์ ํด์.
config.yaml์์ ์ปค์คํ ํ๊ทธ๋ฅผ ์ ์ํด์
model_list:
- model_name: openai/gpt-5.6-terra
litellm_params:
model: openai/gpt-5.6-terra
api_key: os.environ/OPENAI_API_KEY
litellm_settings:
callbacks: ["prometheus"]
custom_prometheus_metadata_labels: ["metadata.foo", "metadata.bar"]
custom_prometheus_tags:
- "prod"
- "staging"
- "batch-job"
- "User-Agent: RooCode/*"
- "User-Agent: claude-cli/*"
- ํ๊ทธ๋ก ์์ฒญ์ ๋ณด๋ด์
curl -L -X POST 'http://0.0.0.0:4000/v1/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ***' \
-d '{
"model": "openai/gpt-5.6-terra",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What's in this image?"
}
]
}
],
"max_tokens": 300,
"metadata": {
"tags": ["prod", "user-facing"]
}
}'
- ์ปค์คํ
ํ๊ทธ ๋ฉํธ๋ฆญ์ ์ํด
/metrics์๋ํฌ์ธํธ๋ฅผ ํ์ธํด์
... "tag_prod": "true", "tag_staging": "false", "tag_batch_job": "false" ...
์ปค์คํ ํ๊ทธ ๋์ ๋ฐฉ์:
- ๊ตฌ์ฑ๋ ๊ฐ ํ๊ทธ๋ prometheus ๋ฉํธ๋ฆญ์ boolean ๋ผ๋ฒจ์ด ๋ผ์
- ํ๊ทธ๊ฐ ์ผ์นํ๋ฉด(์ ํ ๋๋ ์์ผ๋์นด๋) ๋ผ๋ฒจ ๊ฐ์
"true", ๊ทธ๋ ์ง ์์ผ๋ฉด"false"์์ - ํ๊ทธ ์ด๋ฆ์ prometheus ํธํ์ฑ์ ์ํด ์ ๋ฆฌ๋ผ์ (์:
"batch-job"โ"tag_batch_job") *๋ฅผ ์ฌ์ฉํ ์์ผ๋์นด๋ ํจํด ์ง์ (์:"User-Agent: RooCode/*"๋"User-Agent: RooCode/1.0.0"์ ์ผ์น)
์์ผ๋์นด๋ ์์:
litellm_settings:
callbacks: ["prometheus"]
custom_prometheus_tags:
- "User-Agent: RooCode/*"
- "User-Agent: claude-cli/*"
์ฌ์ฉ ์ฌ๋ก:
- ํ๊ฒฝ ์ถ์ (
prod,staging,dev) - ์์ฒญ ์ ํ ๋ถ๋ฅ (
batch-job,user-facing,background) - ๊ธฐ๋ฅ ํ๋๊ทธ (
new-feature,beta-users) - ํยท์๋น์ค ์๋ณ (
team-a,service-xyz) - User-Agent ์ถ์ - Roo Code, Claude Code, Gemini CLI๊ฐ ์ผ๋ง๋ ์ฐ์ด๋์ง ์ถ์ (
User-Agent: RooCode/*,User-Agent: claude-cli/*,User-Agent: gemini-cli/*)
๋ฉํธ๋ฆญ๊ณผ ๋ผ๋ฒจ ๊ตฌ์ฑ (Configuring Metrics and Labels)
์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์นด๋๋๋ฆฌํฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ํน์ ๋ฉํธ๋ฆญ์ ์ ํ์ ์ผ๋ก ํ์ฑํํ๊ณ ํฌํจํ ๋ผ๋ฒจ์ ์ ์ดํ ์ ์์ด์.
ํน์ ๋ฉํธ๋ฆญยท๋ผ๋ฒจ ํ์ฑํ
prometheus_metrics_config์์ ์ง์ ํด ๋ฐํํ ๋ฉํธ๋ฆญ์ ๊ตฌ์ฑํด์. ๊ฐ ๊ตฌ์ฑ ๊ทธ๋ฃน์ (์กฐ์ง์ฉ) group ์ด๋ฆ๊ณผ ํ์ฑํํ metrics ๋ชฉ๋ก์ด ํ์ํด์. ์ ํ์ ์ผ๋ก ๋ฉํธ๋ฆญ์ ๋ผ๋ฒจ์ ํํฐ๋งํ include_labels ๋ชฉ๋ก์ ํฌํจํ ์ ์์ด์.
model_list:
- model_name: gpt-5.6-terra
litellm_params:
model: gpt-5.6-terra
litellm_settings:
callbacks: ["prometheus"]
prometheus_metrics_config:
# High-cardinality metrics with minimal labels
- group: "proxy_metrics"
metrics:
- "litellm_proxy_total_requests_metric"
- "litellm_proxy_failed_requests_metric"
include_labels:
- "hashed_api_key"
- "requested_model"
- "model_group"
LiteLLM ์์ ์ ๋ฉํธ๋ฆญ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋๋ค๋ฉด ์ปจํ ์ด๋ ๋ก๊ทธ์์ ๋ค์์ ๋ณผ ์ ์์ด์.

๋ฉํธ๋ฆญ๋ณ ๋ผ๋ฒจ ํํฐ๋ง
๊ฐ ๋ฉํธ๋ฆญ์ ํฌํจํ ๋ผ๋ฒจ์ ์ ์ดํด ์นด๋๋๋ฆฌํฐ๋ฅผ ์ค์ฌ์:
litellm_settings:
callbacks: ["prometheus"]
prometheus_metrics_config:
- group: "token_consumption"
metrics:
- "litellm_input_tokens_metric"
- "litellm_output_tokens_metric"
- "litellm_total_tokens_metric"
include_labels:
- "model"
- "team"
- "hashed_api_key"
- group: "request_tracking"
metrics:
- "litellm_proxy_total_requests_metric"
include_labels:
- "status_code"
- "requested_model"
๊ณ ๊ธ ๊ตฌ์ฑ
๋ค๋ฅธ ๋ผ๋ฒจ ์งํฉ์ผ๋ก ์ฌ๋ฌ ๊ตฌ์ฑ ๊ทธ๋ฃน์ ๋ง๋ค ์ ์์ด์:
litellm_settings:
callbacks: ["prometheus"]
prometheus_metrics_config:
# High-cardinality metrics with minimal labels
- group: "deployment_health"
metrics:
- "litellm_deployment_success_responses"
- "litellm_deployment_failure_responses"
include_labels:
- "api_provider"
- "requested_model"
# Budget metrics with full label set
- group: "budget_tracking"
metrics:
- "litellm_remaining_team_budget_metric"
include_labels:
- "team"
- "team_alias"
- "hashed_api_key"
- "api_key_alias"
- "model"
- "end_user"
# Latency metrics with performance-focused labels
- group: "performance"
metrics:
- "litellm_request_total_latency_metric"
- "litellm_llm_api_latency_metric"
include_labels:
- "model"
- "api_provider"
- "requested_model"
๊ตฌ์ฑ ๊ตฌ์กฐ:
group: ๊ด๋ จ ๋ฉํธ๋ฆญ์ ์กฐ์งํ๊ธฐ ์ํ ์ค๋ช ์ด๋ฆmetrics: ์ด ๊ทธ๋ฃน์ ํฌํจํ ๋ฉํธ๋ฆญ ์ด๋ฆ ๋ชฉ๋กinclude_labels: (์ ํ) ์ด ๋ฉํธ๋ฆญ์ ํฌํจํ ๋ผ๋ฒจ ๋ชฉ๋ก
๊ธฐ๋ณธ ๋์: prometheus_metrics_config๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ๋ชจ๋ ๋ฉํธ๋ฆญ์ด ๊ธฐ๋ณธ ๋ผ๋ฒจ๋ก ํ์ฑํ๋ผ์ (ํ์ ํธํ).
๋ฉํธ๋ฆญยท๋ผ๋ฒจ ์ ์ญ ์ ์ธ
prometheus_metrics_config๋ include ๊ธฐ๋ฐ์ด๋ผ ์ ์งํ๋ ค๋ ๋ชจ๋ ๋ฉํธ๋ฆญ์ ๋์ดํด์ผ ํด์. ๋ฉํธ๋ฆญ์ด๋ ๋ผ๋ฒจ์ ์์ ์งํฉ๋ง ๋ฒ๋ฆฌ๋ ค๋ฉด ์ ์ญ prometheus_exclude_metrics์ prometheus_exclude_labels ์ต์
์ ๋์ ์ฌ์ฉํ์ธ์. ๋์ด๋์ง ์์ ๊ฒ์ ๋ชจ๋ ๊ธฐ๋ณธ ๋ผ๋ฒจ๋ก ํ์ฑ ์ํ๋ก ๋จ๊ณ , ํฅํ LiteLLM ๋ฆด๋ฆฌ์ค์์ ์ถ๊ฐ๋๋ ๋ฉํธ๋ฆญ์ ์ถ๊ฐ ๊ตฌ์ฑ ๋ณ๊ฒฝ ์์ด ์๋์ผ๋ก ๋ฐํ๋ผ์.
litellm_settings:
callbacks: ["prometheus"]
# Drop these metrics entirely
prometheus_exclude_metrics:
- "litellm_input_tokens_metric"
- "litellm_output_tokens_metric"
# Drop these labels from every metric that would otherwise emit them
prometheus_exclude_labels:
- "hashed_api_key"
- "api_key_alias"
๋ ๋ชฉ๋ก ๋ชจ๋ ์์ ์ ๊ฒ์ฆ๋ผ์. ์ ์ ์๋ ๋ฉํธ๋ฆญยท๋ผ๋ฒจ ์ด๋ฆ์ ๊ตฌ์ฑ ์ค๋ฅ๋ฅผ ์ผ์ผ์ผ ์คํ๊ฐ ์ฆ์ ๋๋ฌ๋์. ์ ์ธ๊ฐ ํญ์ ์ฐ์ ํ๋ฏ๋ก prometheus_exclude_metrics์ ๋ช
๋ช
๋ ๋ฉํธ๋ฆญ์ prometheus_metrics_config ๊ทธ๋ฃน์ด ํ์ฑํํด๋ ๋ฒ๋ ค์ง๊ณ , prometheus_exclude_labels์ ๋ผ๋ฒจ์ ๊ทธ๋ฃน์ include_labels๊ฐ ๋์ดํด๋ ์ ๊ฑฐ๋ผ์.
์์คํ ํฌ์ค ๋ชจ๋ํฐ๋ง (Monitor System Health)
litellm ์ธ์ ์๋น์ค(redis / postgres)์ ํฌ์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ค๋ฉด:
model_list:
- model_name: gpt-5.6-terra
litellm_params:
model: gpt-5.6-terra
litellm_settings:
service_callback: ["prometheus_system"]
๋ชจ๋ํฐ๋ง๋๋ ๊ฐ ์๋น์ค๋ litellm_<service>_<type> ์ด๋ฆ์ ์ธ ๋ฉํธ๋ฆญ์ ๋ฐํํด์:
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ํ์ | ์ค๋ช |
|---|---|---|
litellm_<service>_latency |
Histogram | ์๋น์ค ํธ์ถ์ ๋ ์ดํด์(์ด) |
litellm_<service>_failed_requests_total |
Counter | ์๋น์ค ํธ์ถ ์คํจ ์. ๋ผ๋ฒจ: "error_class", "function_name" (๋ฌด์์ด ์คํจํ๋์ง ๋๋ฒ๊น
์ฉ) |
litellm_<service>_total_requests_total |
Counter | ์๋น์ค ํธ์ถ ์ด ์. ์คํจ ์นด์ดํฐ์ ํจ๊ป ์ค๋ฅ์จ ๊ณ์ฐ์ ์ฌ์ฉ |
๋ชจ๋ํฐ๋ง๋๋ ์๋น์ค:
| ์๋น์ค | ์ค๋ช |
|---|---|
redis |
Redis ํธ์ถ (์บ์ฑ, ๋ ์ดํธ ๋ฆฌ๋ฐ ์ํ) |
postgres |
Postgres DB ํธ์ถ (ํค, ํ, ์ง์ถ ๋ก๊ทธ). ์: litellm_postgres_latency, litellm_postgres_failed_requests_total, litellm_postgres_total_requests_total |
auth |
์์ฒญ ์ธ์ฆ ๊ฒ์ฌ. ๊ณผ๋ถํ๋ DB๋ก ์ธํ ์ธ์ฆ ๋๋ ค์ง์ ์ ์ฉ |
batch_write_to_db |
DB๋ก์ ๋ฐฐ์น ์ง์ถ/์ฌ์ฉ๋ ์ฐ๊ธฐ |
reset_budget_job |
์ฃผ๊ธฐ์ ์์ฐ ๋ฆฌ์ ์ก |
router |
LiteLLM ๋ผ์ฐํฐ ์ฐ์ฐ |
proxy_pre_call |
LLM API๋ฅผ ์น๊ธฐ ์ ์ ํ๋ก์๊ฐ ์คํํ๋ pre-call ํ |
self |
LiteLLM ์์ฒด API ํธ์ถ ์ฒ๋ฆฌ |
DB ์คํจ ๋๋ ๋๋ฆผ ์๋ฆผ ์์:
rate(litellm_postgres_failed_requests_total[5m]) > 0
histogram_quantile(0.95, sum by (le) (rate(litellm_postgres_latency_bucket[5m]))) > 1
DB ํธ๋์ญ์ ํ ํฌ์ค ๋ฉํธ๋ฆญ
DB ํธ๋์ญ์ ํ์ ํฌ์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๋ฐ ์ฌ์ฉํด์. ์: ์ธ๋ฉ๋ชจ๋ฆฌ์ redis ๋ฒํผ์ ํฌ๊ธฐ ๋ชจ๋ํฐ๋ง.
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช | ์คํ ๋ฆฌ์ง ํ์ |
|---|---|---|
litellm_pod_lock_manager_size |
์ด๋ค ํ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฐ์ดํธ๋ฅผ ์ธ ๋ฝ์ ๊ฐ์ก๋์ง ํ์ | Redis |
litellm_in_memory_daily_spend_update_queue_size |
์ธ๋ฉ๋ชจ๋ฆฌ ์ผ๋ณ ์ง์ถ ์ ๋ฐ์ดํธ ํ์ ํญ๋ชฉ ์. ๊ฐ ์ฌ์ฉ์์ ์ง๊ณ ์ง์ถ ๋ก๊ทธ | In-Memory |
litellm_redis_daily_spend_update_queue_size |
Redis ์ผ๋ณ ์ง์ถ ์ ๋ฐ์ดํธ ํ์ ํญ๋ชฉ ์. ๊ฐ ์ฌ์ฉ์์ ์ง๊ณ ์ง์ถ ๋ก๊ทธ | Redis |
litellm_redis_daily_end_user_spend_update_queue_size |
Redis ์ผ๋ณ end user ์ง์ถ ์ ๋ฐ์ดํธ ํ์ ํญ๋ชฉ ์ | Redis |
litellm_redis_daily_agent_spend_update_queue_size |
Redis ์ผ๋ณ agent ์ง์ถ ์ ๋ฐ์ดํธ ํ์ ํญ๋ชฉ ์ | Redis |
litellm_in_memory_spend_update_queue_size |
ํค, ์ฌ์ฉ์, ํ, ํ ๋ฉค๋ฒ ๋ฑ์ ์ธ๋ฉ๋ชจ๋ฆฌ ์ง๊ณ ์ง์ถ ๊ฐ | In-Memory |
litellm_redis_spend_update_queue_size |
ํค, ์ฌ์ฉ์, ํ ๋ฑ์ Redis ์ง๊ณ ์ง์ถ ๊ฐ | Redis |
๐ฅ LiteLLM ์ ์ง Grafana ๋์๋ณด๋
LiteLLM์ ์ด ํ์ด์ง์ litellm_* ๋ฉํธ๋ฆญ์ฉ Grafana ๋์๋ณด๋ ๋ ๊ฐ๋ฅผ cookbook/litellm_proxy_server/grafana_dashboard ํด๋์ ์ ์งํด์. Dashboards > New > Import์์ JSON์ ๊ฐ์ ธ์ค๊ณ ์๋ด๊ฐ ๋์ค๋ฉด Prometheus ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ณ ๋ฅด์ธ์.
All Prometheus Metrics ๋์๋ณด๋๋ ์ ํ์ ๋ชจ๋ ๋ฉํธ๋ฆญ์ ๋ํ ํจ๋์ ์ฃผ์ ๋ณ๋ก ๊ทธ๋ฃน์ง์ด ๊ฐ์ ธ์: ํธ๋ํฝ, ๋ ์ดํด์, ์ง์ถยทํ ํฐ, ์บ์, ๋ํ๋ก์ด๋จผํธ, ๋ ์ดํธ ๋ฆฌ๋ฐ, ์์ฐ, ๊ฐ๋๋ ์ผ, MCP, ๊ด๋ฆฌํ ํ์ผยท๋ฐฐ์น, ์ฌ์ฉ์ยทํ, ๊ทธ๋ฆฌ๊ณ prometheus_system ์๋น์ค ๋ฉํธ๋ฆญ๊ณผ DB ํธ๋์ญ์
ํ ํฌ๊ธฐ๊น์ง. ํ์ฑํํ์ง ์์ ๊ธฐ๋ฅ์ ํจ๋์ ๋น์ ์๊ณ , ๊ทธ readme๋ ๊ฐ ํ์ ์ด๋ค ์ค์ ์ด ํ์ํ์ง ๋์ดํด์.
v2 ๋์๋ณด๋๋ ๋ชจ๋ธ ๊ทธ๋ฃน๋ณ ์์ฒญ ์๋, ์คํจ, ๋ ์ดํด์, ๋จ์-์์ฒญยท๋จ์-ํ ํฐ ๊ฒ์ด์ง์ ๊ฐ๊ฒฐํ ๋ณด๊ธฐ๋ก, ์๋์ ๋ณด์ฌ์.



Deprecated ๋ฉํธ๋ฆญ
| ๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
|---|---|
litellm_llm_api_failed_requests_metric |
deprecated litellm_proxy_failed_requests_metric ์ฌ์ฉ |
/metrics ์๋ํฌ์ธํธ ์ธ์ฆ
๊ธฐ๋ณธ์ ์ผ๋ก /metrics๋ LiteLLM API ํค ์ธ์ฆ์ ์๊ตฌํด์ (v1.85.0๋ถํฐ).
Prometheus์ ๊ฒฝ์ฐ ์คํฌ๋ ์ดํ ๊ตฌ์ฑ์ authorization์ ์ถ๊ฐํ์ธ์:
scrape_configs:
- job_name: 'litellm'
authorization:
type: Bearer
credentials: <LITELLM_API_KEY>
static_configs:
- targets: ['localhost:4000']
์ธ์ฆ ์๋ ์ ๊ทผ์ ํ์ฉํ๋ ค๋ฉด:
litellm_settings:
require_auth_for_metrics_endpoint: false
FAQ
_created vs. _total ๋ฉํธ๋ฆญ์ด ๋ญ๊ฐ์?
Python Prometheus ํด๋ผ์ด์ธํธ๋ ๋ชจ๋ ์นด์ดํฐยทํ์คํ ๊ทธ๋จ ์์ _created ์ํ์ ๋ฐํํด์. ๊ทธ๊ฒ์ ํด๋น series๊ฐ ์์ฑ๋ Unix ํ์์คํฌํ(๋ณดํต ํ๋ก์ธ์ค ์์ ๋๋ ์ฒ์ ๋ณด๋ ๋ผ๋ฒจ ์กฐํฉ)๋ฅผ ๋ด๊ณ , ์ด๋ค ๊ฒ๋ ์ธ์ง ์์์.
์นด์ดํ
๋ชฉ์ ์๋ _total ๋ฉํธ๋ฆญ์ ์ฌ์ฉํด์ผ ํด์.
๋ ์์๋ณด๊ธฐ (Learn more)
- ๊ฐ์ ํค
- LiteLLM ๊ด๋ฆฌํ ๋ฐฐ์น
- ์๋ฒ ํ๋: per-worker admission control
- ๊ฐ๋๋ ์ผ