集成网关Kong Gateway

通过 Kong API Gateway 用 Litefuse 追踪 AI API

本指南演示如何把 Litefuse 集成Kong API Gateway,无需修改应用代码即可自动监控、调试和评估 AI API 调用。

什么是 Kong API Gateway?Kong Gateway 是一个云原生、平台无关、可扩展的 API 网关,用于管理 API 与微服务。它充当 API 流量的中央控制点,提供鉴权、限流、监控等能力。

什么是 Litefuse?Litefuse 是面向 AI Agent 的开源可观测性平台,帮助你可视化和监控 LLM 调用、工具使用、成本、延迟等。

特性

  • 零代码插桩:自动追踪通过 Kong 转发的 AI API 调用
  • 多 provider 支持:OpenAI 兼容 API、vLLM 与自定义 provider
  • 丰富上下文捕获:用户会话、对话和元数据
  • 性能指标:延迟、吞吐量和 token 级分析
  • 非阻塞架构:异步运行,开销极小
  • 生产就绪:错误恢复与优雅降级

支持的 AI provider

Provider端点状态
OpenAI 兼容/v1/chat/completions/v1/completions/v1/embeddings
vLLM/generate/v1/completions
自定义 provider可扩展的检测框架

1. 安装 Kong 插件

下面用其中一种方式安装 Kong Litefuse Tracing 插件。

前置条件

  • 已安装并运行 Kong Gateway 3.0+
  • 一个 Litefuse 账号(注册
  • 可访问 Kong 的 Admin API

方式 1:通过 LuaRocks(推荐)

luarocks install kong-plugin-ai-tracing

方式 2:从源码安装

git clone https://github.com/Ramtinboreili/kong-langfuse-tracing.git
cd kong-langfuse-tracing
luarocks make rockspec/kong-plugin-ai-tracing-1.0.0-1.rockspec

方式 3:Docker Compose

version: '3.8'
services:
  kong:
    image: kong:3.4
    environment:
      KONG_PLUGINS: bundled,ai-tracing
      KONG_LUA_PACKAGE_PATH: /usr/local/kong/plugins/?.lua;;
      KONG_DATABASE: postgres
      KONG_PG_HOST: postgres
      KONG_PG_USER: kong
      KONG_PG_PASSWORD: kong
    volumes:
      - ./plugins/ai-tracing:/usr/local/kong/plugins/ai-tracing
    ports:
      - "8000:8000"
      - "8001:8001"

在 Kong 中启用插件

把插件加入到 Kong 配置:

# In kong.conf
plugins = bundled,ai-tracing
 
# Or via environment variable
export KONG_PLUGINS=bundled,ai-tracing

重启 Kong Gateway 来加载插件。

2. 配置 Litefuse 凭据

接下来配置你的 Litefuse API Key。可以通过免费注册 Litefuse Cloud自托管 Litefuse 获取。

# Get keys for your project from the project settings page
export LANGFUSE_PUBLIC_KEY="pk-lf-..."
export LANGFUSE_SECRET_KEY="sk-lf-..."
export LANGFUSE_BASE_URL="https://litefuse.cloud"

3. 在 Kong Service 上启用插件

通过 Kong Admin API 给你的 AI service 配置插件:

curl -X POST http://localhost:8001/services/YOUR_AI_SERVICE/plugins \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ai-tracing",
    "config": {
      "langfuse_enabled": true,
      "langfuse_public_key": "pk-lf-...",
      "langfuse_secret_key": "sk-lf-...",
      "langfuse_endpoint": "https://litefuse.cloud/api/public/ingestion",
      "environment": "production"
    }
  }'

配置参数

参数类型默认值必填说明
langfuse_enabledbooleanfalse启用/禁用 Litefuse 集成
langfuse_public_keystring-你的 Litefuse public API Key
langfuse_secret_keystring-你的 Litefuse secret API Key
langfuse_endpointstringhttps://litefuse.cloud/api/public/ingestionLitefuse API 端点
langfuse_timeoutnumber5000HTTP 超时(毫秒)
environmentstringproduction用于过滤 trace 的环境标签
log_levelstringinfo日志级别(debuginfowarnerror

对于自托管 Litefuse 实例,请把 langfuse_endpoint 更新为你的实例 URL,再加上 /api/public/ingestion

4. Hello World 示例

下面通过 Kong Gateway 发送一个简单的 AI 请求。插件会自动捕获请求并在 Litefuse 中创建一个 trace。

curl -X POST http://kong-gateway:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-User-Id: user-12345" \
  -d '{
    "model": "gpt-4",
    "messages": [
      {"role": "user", "content": "Explain quantum computing"}
    ],
    "temperature": 0.7,
    "max_tokens": 500
  }'

Example trace in Litefuse

点击上面的链接(或你自己的项目链接)即可查看所有 observation、token 用量、延迟等内容,便于调试或优化。

5. 通过 header 添加上下文

通过 HTTP header 为 trace 增加用户和会话上下文。这样你可以按用户、会话或对话过滤和分析 trace。

curl -X POST http://kong-gateway:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-User-Id: user-12345" \
  -H "X-Session-Id: session-abc" \
  -H "X-Chat-Id: chat-789" \
  -H "X-Organization-Id: org-acme" \
  -d '{
    "model": "gpt-4",
    "messages": [
      {"role": "user", "content": "What is machine learning?"}
    ]
  }'

支持的上下文 header

Header说明示例
X-User-Id用户唯一标识user-12345
X-Session-Id会话标识session-abc
X-Chat-Id对话/聊天 IDchat-789
X-Message-Id单条消息 IDmsg-54321
X-Organization-Id组织上下文org-acme
X-Project-Id项目标识project-xyz

Example trace with context

6. 添加 metadata

在请求体中加入额外的 metadata,得到更丰富的 trace。这对追踪功能、实验或用户级变量很有用。

curl -X POST http://kong-gateway:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-User-Id: user-12345" \
  -d '{
    "model": "gpt-4",
    "messages": [
      {"role": "user", "content": "Recommend a movie"}
    ],
    "metadata": {
      "user_id": "user-12345",
      "chat_id": "chat-789",
      "project_id": "project-xyz",
      "features": {
        "web_search": true,
        "image_generation": false
      },
      "variables": {
        "user_tier": "premium",
        "language": "en"
      }
    }
  }'

Python / FastAPI 应用

import httpx
from fastapi import FastAPI
 
KONG_URL = "http://kong-gateway:8000"
 
async def chat_with_ai(user_id: str, session_id: str, message: str):
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{KONG_URL}/v1/chat/completions",
            json={
                "model": "gpt-4",
                "messages": [{"role": "user", "content": message}],
                "metadata": {
                    "user_id": user_id,
                    "session_id": session_id
                }
            },
            headers={
                "Content-Type": "application/json",
                "X-User-Id": user_id,
                "X-Session-Id": session_id
            }
        )
        return response.json()
 
# Usage
result = await chat_with_ai("user-123", "session-abc", "Hello!")
print(result)

捕获的数据

插件会在 Litefuse 中创建结构化的 trace:

{
  "trace": {
    "id": "trace-12345",
    "name": "/v1/chat/completions",
    "userId": "user-12345",
    "sessionId": "session-abc",
    "metadata": {
      "provider": "openai_compatible",
      "model": "gpt-4",
      "status_code": 200,
      "environment": "production",
      "total_duration_ms": 1250,
      "time_per_token_ms": 12.5,
      "throughput_tokens_per_second": 80.0
    }
  },
  "observations": [
    {
      "type": "generation",
      "name": "chat_completion",
      "usage": {
        "promptTokens": 150,
        "completionTokens": 25,
        "totalTokens": 175
      },
      "metadata": {
        "temperature": 0.7,
        "max_tokens": 500,
        "finish_reason": "stop"
      }
    }
  ]
}

性能指标

  • 总时长:端到端请求处理时间
  • 每 token 耗时:每个生成 token 的平均延迟
  • 吞吐量:每秒处理的 token 数

Token 分析

  • Prompt token:输入 token 数
  • Completion token:输出 token 数
  • 总 token:合计用量
  • 成本追踪:监控请求间的开销

按环境差异化配置

可以为开发、预发和生产环境配置不同的 Litefuse 项目。

开发环境

curl -X POST http://localhost:8001/services/ai-service-dev/plugins \
  --data "name=ai-tracing" \
  --data "config.langfuse_enabled=true" \
  --data "config.langfuse_public_key=pk-lf-dev-xxx" \
  --data "config.langfuse_secret_key=sk-lf-dev-xxx" \
  --data "config.environment=development" \
  --data "config.log_level=debug"

生产环境

curl -X POST http://localhost:8001/services/ai-service-prod/plugins \
  --data "name=ai-tracing" \
  --data "config.langfuse_enabled=true" \
  --data "config.langfuse_public_key=pk-lf-prod-xxx" \
  --data "config.langfuse_secret_key=sk-lf-prod-xxx" \
  --data "config.environment=production" \
  --data "config.log_level=warn"

故障排查

Litefuse 中看不到数据

  1. 核对凭据:确认 Litefuse API Key 正确
  2. 检查连通性:确认 Kong 能连到 Litefuse 端点
# View plugin status
curl http://localhost:8001/services/YOUR_SERVICE/plugins | \
  jq '.data[] | select(.name=="ai-tracing")'
 
# Check Kong logs
docker-compose logs kong | grep "ai-tracing"
 
# Test Litefuse endpoint
curl -I https://litefuse.cloud/api/public/ingestion
  1. 查看日志:在 Kong 日志中搜索错误

缺少用户上下文

  • 确认请求中正确设置了 HTTP header
  • 确认 header 名称符合预期格式(是 X-User-Id,而不是 X-UserId
  • 确认在所有代理中都转发了这些 header

性能问题

  • 在高负载时监控 Kong 指标
  • 如出现超时,调整 langfuse_timeout
  • 在 Kong 日志中查看异步定时器性能

启用 debug 日志

curl -X PATCH http://localhost:8001/plugins/PLUGIN_ID \
  --data "config.log_level=debug"

进阶用法

自定义 AI provider

通过修改 handler.lua 中的检测逻辑,可以扩展插件支持更多 AI provider:

local function detect_ai_provider(path, headers)
  if path:find("/v1/chat/completions") then
    return "openai_compatible"
  elseif path:find("/anthropic") then
    return "anthropic"
  elseif path:find("/cohere") then
    return "cohere"
  else
    return "custom_provider"
  end
end

与其他 Kong 插件配合

AI tracing 插件可以和其他 Kong 插件一起工作:

  • 限流:与限流插件配合控制成本
  • 鉴权:搭配 key-auth 或 JWT 进行用户识别
  • Request Transformer:在 tracing 之前修改请求
⚠️

安全最佳实践

  • 安全地存放 Litefuse API Key(使用 Kong 的 vault 集成或环境变量)
  • 审查导出数据是否符合 PII 合规要求
  • 在生产环境限制对插件配置的访问
  • 确保 Kong 与 Litefuse 之间使用 HTTPS 通信
  • 针对敏感内容考虑数据保留策略

资源

这个页面对你有帮助吗?