分布式追踪#
本教程将指导您完成在支持 GPU 的 Kubernetes 环境中,从 vLLM 服务引擎收集追踪、指标和日志所需的基本配置。您将学习如何使用 OpenTelemetry 工具以及 Jaeger 分布式追踪可观测性平台来监控运行中的 vLLM 实例。您还将学习如何使用必要的环境变量(如 OTEL_SERVICE_NAME、OTEL_EXPORTER_OTLP_ENDPOINT 和 OTEL_RESOURCE_ATTRIBUTES)来指定追踪配置。
目录#
先决条件#
一个支持 GPU 的 Kubernetes 环境,如 先决条件 教程中所述进行设置。
系统上安装了 Helm。
拥有 HuggingFace 令牌 (
HF_TOKEN) 的访问权限。一个自定义的 api 密钥或现有的密钥 (
VLLM_API_KEY)。
步骤 1:准备 Jaeger 配置文件#
找到示例配置文件 tutorials/assets/otel-example/{jaeger, jaeger-query, jaeger-collector}.yaml。
打开文件并检查以下字段
为
jaeger-collector和jaeger-query服务指定您所需的端口,分别用于追踪存储和检索。验证
COLLECTOR_OTLP_ENABLED是否设置为true;这将启用 Jaeger 对 OpenTelemetry 的原生支持。
Jaeger 文件中关键项说明#
ports:Jaeger 执行其操作(在此例中为收集和查询)的端口。
name:您的 Jaeger 部署的唯一标识符。
image:运行 Jaeger 后端所有部分及其 UI 的单个 Docker 镜像。
type:ClusterIP 类型确保查询服务仅在集群内部可访问。
步骤 2:准备 OpenTelemetry Collector 配置文件#
找到示例 collector 文件 tutorials/assets/otel-example/{otel-collector, otel-collector-config}.yaml。
打开文件并检查以下字段
指定 collector 的
receivers、processors和exporters。OpenTelemetry 收集是收集 vLLM 服务追踪并将其提供给 Jaeger 进行 UI 显示的中间步骤。
resources指定运行 OpenTelemetry collector 的容器可用的计算资源。
步骤 3:配置模型和监控#
您可以随意查看
values-12-otel-vllm.yaml文件。请注意,OTEL_EXPORTER_OTLP_ENDPOINT的配置支持收集指标、追踪和日志。您可以在 OpenTelemetry OTLP Exporter 文档 中探索更多配置。在
tutorials/assets目录下运行以下命令sudo kubectl apply -f otel-example/jaeger.yaml sudo kubectl apply -f otel-example/jaeger-collector.yaml sudo kubectl apply -f otel-example/jaeger-query.yaml sudo kubectl apply -f otel-example/otel-collector-config.yaml sudo kubectl apply -f otel-example/otel-collector.yaml sudo helm install vllm ../../helm/ -f values-12-otel-vllm.yaml
sudo kubectl get pods
预期输出
您应该能看到类似以下的 Pod:
NAME READY STATUS RESTARTS AGE jaeger-744484b5bc-rdrgn 1/1 Running 0 13m otel-collector-859db69dd4-kj8x6 1/1 Running 0 12m vllm-deployment-router-6888598c6-m6gl9 1/1 Running 0 12m vllm-opt125m-deployment-vllm-b489dfd8b-95gb5 1/1 Running 0 12m
vllm-deployment-routerPod 作为路由器,管理请求并将其路由到适当的模型服务 Pod。vllm-opt125m-deployment-vllmPod 为推理服务实际的模型。
检查服务使用情况
sudo kubectl get services
预期输出
确保存在服务引擎、路由器、jaeger-collector 和 jaeger-query 的服务。请注意,OpenTelemetry 部署不需要自己的服务。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE jaeger-collector ClusterIP 10.99.125.245 <none> 4317/TCP,4318/TCP 86m jaeger-query ClusterIP 10.97.59.30 <none> 16686/TCP 86m vllm-engine-service ClusterIP 10.102.6.58 <none> 80/TCP 86m vllm-router-service ClusterIP 10.103.127.48 <none> 80/TCP 86m
vllm-engine-service暴露了服务引擎。vllm-router-service负责模型服务 Pod 之间的路由和负载均衡。jaeger-collector服务负责从 OpenTelemetry 收集追踪数据。jaeger-query服务从 jaeger collector 获取数据以在 UI 中使用。
暴露模型和 Jaeger UI
sudo kubectl port-forward svc/vllm-router-service 30080:80 sudo kubectl port-forward svc/jaeger-query 16686:16686
请注意,30080:80 可以替换为任何 TCP/UDP 端口,如果选择了不同的
jaeger-query端口,则端口 16686 将不被使用。
请参考 快速入门 教程中的步骤 3 来查询已部署的 vLLM 服务。您可以通过导航到 localhost:16686(或您指定的 jaeger-query 端口)来监控所有查询,在 Jaeger UI 的 Service 下拉菜单中选择 jaeger-all-in-one,然后点击“Find Traces”来查看追踪结果。
结论#
在本教程中,您在 Kubernetes 环境中配置并部署了 vLLM 服务引擎,使用 OpenTelemetry collector 处理并将生成的追踪导出到 Jaeger,并在 Jaeger UI 中查看了追踪。如需进一步自定义,请参阅此处可用的各种数据源以进行监控:here。