팀/키 기반 로깅

팀/키 기반 로깅 (Team/Key Based Logging)

각 키(key)나 팀이 각자 고유한 Langfuse 프로젝트나 커스텀 콜백을 사용하도록 로깅을 설정하는 방법을 알려드릴게요. 이렇게 하면 로깅을 세밀하게 제어하면서 컴플라이언스 요구사항도 잘 지킬 수 있어요.

출처: 문서

본문

개요 (Overview)

각 키/팀이 자신만의 Langfuse 프로젝트나 커스텀 콜백을 사용하도록 허용할 수 있어요. 이 덕분에 로깅을 세밀하게 제어하고 컴플라이언스 요구사항을 충족할 수 있죠.

사용 예시:

팀 기반 로깅

Team 1 -> Logs to Langfuse Project 1
Team 2 -> Logs to Langfuse Project 2
Team 3 -> Disabled Logging (for GDPR compliance)

지원되는 로깅 통합 (Supported Logging Integrations)

  • langfuse
  • gcs_bucket
  • langsmith
  • arize

[BETA] 팀 로깅 (Team Logging)

엔터프라이즈 기능 이 기능을 사용하려면 LiteLLM 엔터프라이즈 라이선스가 필요해요. 무료 30일 체험판 을 시작하거나 데모를 예약 하세요. 엔터프라이즈에 포함된 기능 을 확인해 보세요.

UI 사용법 (UI Usage)

  • 로깅 설정이 있는 팀 만들기 "Ai Agents"라는 팀을 만드세요.
  • 팀용 키 만들기 팀 "AI Agents"용 키를 만들게요. 팀 로깅 설정은 팀에 생성된 모든 키에 적용돼요.
  • 테스트 LLM API 요청 보내기 새 키로 테스트 LLM API 요청을 보내면, 1단계에서 설정한 로깅 제공자에 로그가 보이는 걸 확인할 수 있어요.
  • 로깅 제공자에서 로그 확인하기 설정한 로깅 제공자로 이동해서 2단계에서 로그를 받았는지 확인하세요.

API 사용법 (API Usage)

누가 호출할 수 있나요

프록시 관리자(proxy admin), 팀이 속한 조직의 org 관리자, 그리고 팀 자체의 관리자는 해당 팀의 콜백을 조회·설정·제거할 수 있어요. 그 외의 사람은 403 응답을 받고, 한 팀의 관리자는 다른 팀의 설정을 읽을 수 없어요. POST /team/{team_id}/disable_logging 은 예외로, 프록시 관리자만 호출할 수 있어요. 한 통합 기능을 끄고 싶은 팀 관리자는 DELETE /team/{team_id}/callback/{callback_name} 을 사용하면 돼요.

팀별 콜백 설정 (Set Callbacks Per Team)

1. 팀에 콜백 설정하기

다음 요청으로 팀에 콜백을 추가할 수 있어요: POST /team/{team_id}/callback

curl -X POST 'http:/localhost:4000/team/dbe2f686-a686-4896-864a-4c3924458709/callback' \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ***" \
-d '{
  "callback_name": "langfuse",
  "callback_type": "success",
  "callback_vars": {
    "langfuse_public_key": "pk",
    "langfuse_secret_key": "sk_",
    "langfuse_host": "https://cloud.langfuse.com"
    }
}'
지원되는 값 (Supported Values)
Field Supported Values Notes
callback_name "langfuse", "gcs_bucket" Currently only supports "langfuse", "gcs_bucket"
callback_type "success", "failure", "success_and_failure"
callback_vars dict of callback settings
langfuse_public_key string Required for Langfuse
langfuse_secret_key string Required for Langfuse
langfuse_host string Optional for Langfuse (defaults to https://cloud.langfuse.com)
gcs_bucket_name string Required for GCS Bucket. Name of your GCS bucket
gcs_path_service_account string Required for GCS Bucket. Path to your service account json

2. 팀용 키 만들기

dbe2f686-a686-4896-864a-4c3924458709 용으로 생성된 모든 키는 1단계. 팀에 콜백 설정 에서 지정한 langfuse 프로젝트로 로그를 보내요.

curl --location 'http://0.0.0.0:4000/key/generate' \
    --header "Authorization: Bearer ***" \
    --header 'Content-Type: application/json' \
    --data '{
        "team_id": "dbe2f686-a686-4896-864a-4c3924458709"
}'

3. 팀용 /chat/completion 요청 보내기

curl -i http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "gpt-5.6-terra",
    "messages": [
      {"role": "user", "content": "Hello, Claude gm!"}
    ]
}'

이 요청이 1단계. 팀에 콜백 설정 에서 지정한 langfuse 프로젝트에 기록되는 걸 확인할 수 있어요.

팀 로깅 비활성화 (Disable Logging for a Team)

특정 팀의 로깅을 비활성화하려면 다음 엔드포인트를 사용하세요: POST /team/{team_id}/disable_logging 이 엔드포인트는 해당 팀의 모든 success/failure 콜백을 제거해서 로깅을 효과적으로 비활성화해요. 단일 통합만 제거하고 다른 콜백은 그대로 두고 싶다면 아래에 설명된 DELETE /team/{team_id}/callback/{callback_name} 를 사용하세요.

1단계. 팀 로깅 비활성화

curl -X POST 'http://localhost:4000/team/YOUR_TEAM_ID/disable_logging' \
    -H 'Authorization: Bearer ***'

YOUR_TEAM_ID를 실제 팀 ID로 바꾸세요.

응답 (Response) 성공적인 요청은 다음과 같은 응답을 반환해요:

{
    "status": "success",
    "message": "Logging disabled for team YOUR_TEAM_ID",
    "data": {
        "team_id": "YOUR_TEAM_ID",
        "success_callbacks": [],
        "failure_callbacks": []
    }
}

2단계. 테스트 - /chat/completions

팀 = team_id 용으로 생성된 키를 사용하면, 설정한 success 콜백(예: Langfuse)에 로그가 보이지 않는 것을 확인할 수 있어요.

curl -i http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "gpt-5.6-terra",
    "messages": [
      {"role": "user", "content": "Hello, Claude gm!"}
    ]
}'

디버깅 / 문제 해결 (Debugging / Troubleshooting)

  • GET /team/{team_id}/callback 으로 팀의 활성 콜백 확인하기 이것으로 team= team_id 의 활성 success/failure 콜백을 확인할 수 있어요.
curl -X GET 'http://localhost:4000/team/dbe2f686-a686-4896-864a-4c3924458709/callback' \
        -H "Authorization: Bearer ***"

팀에서 단일 콜백 제거 (Remove a Single Callback from a Team)

다른 콜백은 계속 실행하면서 한 통합만 등록 해제하려면 다음을 사용하세요: DELETE /team/{team_id}/callback/{callback_name} 해당 callback_name 으로 등록된 모든 항목이 콜백 타입과 무관하게 제거돼요. 즉, successfailure 둘 다로 등록된 통합도 한 번의 호출로 등록 해제돼요. 응답에는 남아 있는 콜백 목록이 표시되고, 팀이 등록하지 않은 callback_name 을 요청하면 아무것도 바꾸지 않고 404 를 반환해요.

팀 로깅 엔드포인트 (Team Logging Endpoints)

  • POST /team/{team_id}/callback: 팀에 success/failure 콜백 추가
  • GET /team/{team_id}/callback: 팀의 success/failure 콜백과 변수 조회
  • DELETE /team/{team_id}/callback/{callback_name}: 팀에서 단일 콜백 제거
  • POST /team/{team_id}/disable_logging: 팀에서 모든 콜백 제거

팀 로깅 - config.yaml

특정 팀 ID에 대해 로깅과 캐싱을 켜거나 끌 수 있어요. 이 섹션은 팀 범위에서만 적용돼요: litellm_settings.default_team_settings 는 특정 팀 ID에 속한 모든 키의 콜백을 설정해요. 개별 가상 키를 선언하는 config.yaml 인터페이스는 없으며, 키별 콜백은 /key/generate/key/update API를 통해 프로비저닝돼요. 자세한 내용은 키 기반 로깅 문서를 참고하세요. config.yaml 은 신뢰할 수 있는 운영자가 제어하는 설정이므로 os.environ/... 참조가 여기서 지원되고, 시작 시 프록시 환경에서 해석돼요. 같은 참조를 관리 API로 보내면 거부돼요 ( API로 프로비저닝된 콜백의 시크릿 처리 참고).

예시: 이 설정은 팀 ID에 따라 langfuse 로그를 서로 다른 2개의 langfuse 프로젝트로 보내요.

litellm_settings:
  default_team_settings:
    - team_id: "dbe2f686-a686-4896-864a-4c3924458709"
      success_callback: ["langfuse"]
      langfuse_public_key: os.environ/LANGFUSE_PUB_KEY_1 # Project 1
      langfuse_secret: os.environ/LANGFUSE_PRIVATE_KEY_1 # Project 1
    - team_id: "06ed1e01-3fa7-4b9e-95bc-f2e59b74f3a8"
      success_callback: ["langfuse"]
      langfuse_public_key: os.environ/LANGFUSE_PUB_KEY_2 # Project 2
      langfuse_secret: os.environ/LANGFUSE_SECRET_2 # Project 2

이제 이 팀 ID에 대해 키 생성 하면

curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer ***" \
-H 'Content-Type: application/json' \
-d '{"team_id": "06ed1e01-3fa7-4b9e-95bc-f2e59b74f3a8"}'

이 키들로 보내는 모든 요청 데이터는 각 팀 전용 로깅 설정에 기록돼요.

[BETA] 키 기반 로깅 (Key Based Logging)

/key/generate/key/update 엔드포인트를 사용해 특정 키에 로깅 콜백을 추가할 수 있어요.

엔터프라이즈 기능 이 기능을 사용하려면 LiteLLM 엔터프라이즈 라이선스가 필요해요. 무료 30일 체험판 을 시작하거나 데모를 예약 하세요. 엔터프라이즈에 포함된 기능 을 확인해 보세요.

키 기반 로깅 동작 방식:

  • 키에 콜백이 설정되어 있지 않으면 config.yaml 파일에 지정된 기본 콜백을 사용해요.
  • 키에 콜백이 설정되어 있으면 해당 키에 지정된 콜백을 사용해요.

UI 사용법 (UI Usage)

  • 로깅 설정이 있는 키 만들기 키를 만들 때 해당 키의 로깅 설정을 구성할 수 있어요. 이 로깅 설정은 이 키로 보내는 모든 요청에 적용돼요.
  • 테스트 LLM API 요청 보내기 새 키로 테스트 LLM API 요청을 보내면 1단계에서 설정한 로깅 제공자에 로그가 보이는 걸 확인할 수 있어요.
  • 로깅 제공자에서 로그 확인하기 설정한 로깅 제공자로 이동해서 2단계에서 로그를 받았는지 확인하세요.

API 사용법 (API Usage)

  • Langfuse / GCS Bucket / Langsmith
curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer ***" \
-H 'Content-Type: application/json' \
-d '{
    "metadata": {
        "logging": [{
            "callback_name": "langfuse", # "otel", "gcs_bucket"
            "callback_type": "success", # "success", "failure", "success_and_failure"
            "callback_vars": {
                "langfuse_public_key": "pk-lf-...", # pass the resolved value, not an os.environ/ reference
                "langfuse_secret_key": "sk-lf-...", # pass the resolved value, not an os.environ/ reference
                "langfuse_host": "https://cloud.langfuse.com"
            }
        }]
    }
}'

각 키는 서로 다른 Langfuse 프로젝트를 가리킬 수 있어요. 프로젝트마다 하나씩 키를 생성하고, 해당 프로젝트의 자격 증명을 callback_vars 에 전달하세요.

API로 프로비저닝된 콜백의 시크릿 처리 (Secret handling for API-provisioned callbacks)

API로 전달되는 callback_vars 안의 os.environ/... 참조는 (v1.84부터) 거부돼요. 요청 본문에서 환경 변수 참조를 해석하게 하면, 키 관리 권한이 있는 호출자가 프록시 환경의 임의의 시크릿을 읽을 수 있게 되기 때문이에요. 그래서 이런 요청은 검증 오류로 실패해요. 요청에서 해석된 시크릿 값을 직접 전달하세요. LiteLLM은 프록시의 salt key를 이용해 저장 시점에 callback_vars 자격 증명을 암호화해요. 프록시가 자체 환경에서 자격 증명을 해석하도록 하려면 신뢰할 수 있는 config.yaml 에 콜백을 설정하세요 (전역으로는 litellm_settings 아래, 팀별로는 default_team_settings 를 통해).

  • 특정 GCS Bucket에 로그를 보내는 가상 키 만들기 환경에 있는 GCS_SERVICE_ACCOUNT 에 서비스 계정 json 경로를 설정하세요.
export GCS_SERVICE_ACCOUNT=/path/to/service-account.json # GCS_SERVICE_ACCOUNT=/Users/ishaanjaffer/Downloads/adroit-crow-413218-a956eef1a2a8.json
curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer ***" \
-H 'Content-Type: application/json' \
-d '{
    "metadata": {
        "logging": [{
            "callback_name": "gcs_bucket", # "otel", "gcs_bucket"
            "callback_type": "success", # "success", "failure", "success_and_failure"
            "callback_vars": {
                "gcs_bucket_name": "my-gcs-bucket", # Name of your GCS Bucket to log to
                "gcs_path_service_account": "/path/to/service-account.json" # path to the service account json, not an os.environ/ reference
            }
        }]
    }
}'
  • 테스트 - /chat/completions 요청 3단계의 가상 키를 사용해 /chat/completions 요청을 보내세요. 성공적인 요청 시 GCS Bucket에서 로그를 확인할 수 있어요.
curl -i http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "fake-openai-endpoint",
    "messages": [
      {"role": "user", "content": "Hello, Claude"}
    ],
    "user": "hello",
  }'
  • 특정 Langsmith 프로젝트에 로그를 보내는 가상 키 만들기
curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer ***" \
-H 'Content-Type: application/json' \
-d '{
    "metadata": {
        "logging": [{
            "callback_name": "langsmith", # "otel", "gcs_bucket"
            "callback_type": "success", # "success", "failure", "success_and_failure"
            "callback_vars": {
                "langsmith_api_key": "lsv2_pt_...", # resolved Langsmith API key, not an os.environ/ reference
                "langsmith_project": "pr-brief-resemblance-72", # project name on langsmith
                "langsmith_base_url": "https://api.smith.langchain.com"
            }
        }]
    }
}'
  • 테스트 - /chat/completions 요청 3단계의 가상 키를 사용해 /chat/completions 요청을 보내세요. 성공적인 요청 시 Langsmith 프로젝트에서 로그를 확인할 수 있어요.
curl -i http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "fake-openai-endpoint",
    "messages": [
      {"role": "user", "content": "Hello, Claude"}
    ],
    "user": "hello",
  }'

이 기능을 개선하고 싶다면 여기서 티켓을 제출 해 주세요.

키 콜백이 올바르게 설정됐는지 확인 - /key/health

/key/health 에 키를 넣어 호출하면 콜백 설정이 올바른지 확인할 수 있어요. 요청 헤더에 키를 전달하세요.

curl -X POST "http://localhost:4000/key/health" \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json"
  • 키가 올바르게 설정된 경우의 응답 / 잘못 설정된 경우의 응답

로깅 콜백이 올바르게 설정되면 키는 healthy 상태예요.

{
  "key": "healthy",
  "logging_callbacks": {
    "callbacks": [
      "gcs_bucket"
    ],
    "status": "healthy",
    "details": "No logger exceptions triggered, system is healthy. Manually check if logs were sent to ['gcs_bucket']"
  }
}

로깅 콜백이 올바르게 설정되지 않으면 키는 unhealthy 상태예요.

{
  "key": "unhealthy",
  "logging_callbacks": {
    "callbacks": [
      "gcs_bucket"
    ],
    "status": "unhealthy",
    "details": "Logger exceptions triggered, system is unhealthy: Failed to load vertex credentials. Check to see if credentials containing partial/invalid information."
  }
}

메시지 redaction 비활성화/활성화 (Disable/Enable Message redaction)

전역적으로 비활성화된 상태에서도 특정 키에 대해 프롬프트 로깅을 활성화할 수 있어요.

전역적으로 프롬프트 로깅(메시지 redaction)이 비활성화된 config.yaml 예시

model_list:
  - model_name: gpt-5.6-terra
    litellm_params:
      model: gpt-5.6-terra
litellm_settings:
  callbacks: ["datadog"]
  turn_off_message_logging: True # 👈 Globally logging prompt / response is disabled

키에 대해 프롬프트 로깅 활성화 프롬프트 로깅을 활성화하려는 키에 대해 turn_off_message_loggingfalse 로 설정하세요. 이 값은 전역 turn_off_message_logging 설정을 덮어써요.

curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer ***" \
-H 'Content-Type: application/json' \
-d '{
    "metadata": {
        "logging": [{
            "callback_name": "datadog",
            "callback_vars": {
                "turn_off_message_logging": false # 👈 Enable prompt logging
            }
        }]
    }
}'

/key/generate 의 응답

{
    "key_alias": null,
    "key": "sk-9v6...OKgQ",
    "metadata": {
        "logging": [
            {
                "callback_name": "datadog",
                "callback_vars": {
                    "turn_off_message_logging": false
                }
            }
        ]
    },
    "token_id": "a53a33db8c3cf832ceb28565dbb034f19f0acd69ee7f03b7bf6752f9f804081e"
}

/chat/completions 요청에 키 사용하기 이 키는 요청에 지정된 콜백에 프롬프트를 기록해요.

curl -i http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "gpt-5.6-terra",
    "messages": [
      {"role": "user", "content": "hi my name is ishaan what key alias is this"}
    ]
  }'

더 알아보기 (Learn more)