主题
故障排除
本指南将带你了解运行 LangSmith 自托管实例时你可能遇到的常见问题。
在运行 LangSmith 时,你可能遇到意外的 500 错误、性能缓慢或其他问题。本指南将帮助你诊断并解决这些问题。
获取有用的信息
要诊断并解决一个问题,你首先需要获取一些相关信息。下面的小节解释如何为 Kubernetes 或 Docker 设置做到这一点,以及如何拉取有用的浏览器信息。
通常,你主要想分析的服务是:
langsmith-backend:处理 CRUD API 请求、业务逻辑、来自前端和 SDK 的请求、供摄取的追踪准备,以及 hub API。langsmith-platform-backend:处理身份验证、运行摄取和其他高吞吐任务。langsmith-queue:处理传入的追踪和反馈、异步摄取和到数据存储的持久化、数据完整性检查,以及在数据库错误或连接问题期间的重试。
有关这些服务的更多详情,参阅自托管概览。
Kubernetes
故障排除的第一步是收集关于你 LangSmith 部署的重要调试信息。服务日志、kubernetes 事件和容器的资源使用率能帮助识别问题的根因。
你可以运行我们的 k8s 故障排除脚本,它会拉取所有相关的 kubernetes 信息并输出到一个文件夹以供调查。该脚本还会把这个文件夹压缩成一个 zip 文件以便分享。下面是一个运行此脚本的示例,假定你的 langsmith 部署是在一个 langsmith 命名空间中启动的:
bash
bash get_k8s_debugging_info.sh --namespace langsmith然后你可以检视所生成文件夹的内容,寻找任何相关的错误或信息。如果你希望 LangSmith 团队协助调试,请把这个 zip 文件分享给团队。
Docker
如果你在 Docker 上运行,可以通过运行以下命令检查你部署的日志:
bash
docker compose logs >> logs.txt浏览器错误
如果你遇到一个以浏览器错误形式浮现的问题,检查一个 HAR 文件也可能有用,它可能包含关键信息。要获取 HAR 文件,你可以遵循本指南,它为各种浏览器解释了这一简短流程。
然后你可以使用 Google 的 HAR 分析器进行调查。你也可以把你的 HAR 文件发送给 LangSmith 团队以帮助调试。
常见问题
DB::Exception: Cannot reserve 1.00 MiB, not enough space: While executing WaitForAsyncInsert. (NOT_ENOUGH_SPACE)
当 ClickHouse 磁盘空间耗尽时会出现此错误。你需要增加 ClickHouse 可用的磁盘空间。
Kubernetes
在 Kubernetes 中,你需要增加 ClickHouse PVC 的大小。为此,你可以执行以下步骤:
获取 PVC 的存储类:
kubectl get pvc data-langsmith-clickhouse-0 -n <namespace> -o jsonpath='{.spec.storageClassName}'确保该存储类有 AllowVolumeExpansion: true:
kubectl get sc <storage-class-name> -o jsonpath='{.allowVolumeExpansion}'- 如果它是 false,某些存储类可以更新以允许卷扩展。
- 要更新存储类,你可以运行
kubectl patch sc <storage-class-name> -p '{"allowVolumeExpansion": true}' - 如果这失败,你可能需要用正确的设置创建一个新存储类。
编辑你的 PVC 使其具有新大小:
kubectl edit pvc data-langsmith-clickhouse-0 -n <namespace>或kubectl patch pvc data-langsmith-clickhouse-0 '{"spec":{"resources":{"requests":{"storage":"100Gi"}}' -n <namespace>更新你的 helm chart
langsmith_config.yaml到新大小(例如100 Gi)删除 clickhouse statefulset
kubectl delete statefulset langsmith-clickhouse --cascade=orphan -n <namespace>用更新后的大小应用 helm chart(你可以遵循升级指南)
你的 pvc 现在应当有新大小。通过运行
kubectl get pvc和kubectl exec langsmith-clickhouse-0 -- bash -c "df"验证。
Docker
在 Docker 中,你需要增加 ClickHouse 卷的大小。为此,你可以执行以下步骤:
- 停止你的 LangSmith 实例。
docker compose down - 如果使用 bind mount,你需要增加挂载点的大小。
- 如果使用一个 docker
volume,你需要为卷/docker 分配更多空间。
error: Dirty database version 'version'. fix and force version
当 ClickHouse 数据库与我们的迁移处于不一致状态时会出现此错误。你需要重置到一个较早的数据库版本,然后重新运行你的升级/迁移。
Kubernetes
- 强制迁移到一个较早的版本,其中 version = dirty version - 1。
bash
kubectl exec -it deployments/langsmith-backend -- bash -c 'migrate -source "file://clickhouse/migrations" -database "clickhouse://$CLICKHOUSE_HOST:$CLICKHOUSE_NATIVE_PORT?username=$CLICKHOUSE_USER&password=$CLICKHOUSE_PASSWORD&database=$CLICKHOUSE_DB&x-multi-statement=true&x-migrations-table-engine=MergeTree&secure=$CLICKHOUSE_TLS" force <version>'- 重新运行你的升级/迁移。
Docker
- 强制迁移到一个较早的版本,其中 version = dirty version - 1。
bash
docker compose exec langchain-backend migrate -source "file://clickhouse/migrations" -database "clickhouse://$CLICKHOUSE_HOST:$CLICKHOUSE_NATIVE_PORT?username=$CLICKHOUSE_USER&password=$CLICKHOUSE_PASSWORD&database=$CLICKHOUSE_DB&x-multi-statement=true&x-migrations-table-engine=MergeTree&secure=$CLICKHOUSE_TLS" force <version>- 重新运行你的升级/迁移。
413 - request entity too large
当请求大小超过允许的最大值时会出现此错误。你需要在你的 Nginx 配置中增加最大请求大小。
Kubernetes
- 编辑你的
langsmith_config.yaml并增加frontend.maxBodySize值。这可能看起来像这样:
yaml
frontend:
maxBodySize: "100M"- 把你的更改应用到集群。
Details: code: 497, message: default: Not enough privileges. to execute this query, it's necessary to have the grant CREATE ROW POLICY ON default.feedbacks_rmt
当你的用户在 Clickhouse 中没有创建行策略所必需的权限时会出现此错误。部署 Docker 时,你也需要从 github 仓库复制 users.xml 文件。这会把 <access_management> 标签添加到 users.xml 文件,从而允许用户创建行策略。下面是我们期望使用的默认 users.xml 文件。
xml
<clickhouse>
<users>
<default>
<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
<show_named_collections>1</show_named_collections>
<show_named_collections_secrets>1</show_named_collections_secrets>
<profile>default</profile>
</default>
</users>
<profiles>
<default>
<async_insert>1</async_insert>
<async_insert_max_data_size>2000000</async_insert_max_data_size>
<wait_for_async_insert>0</wait_for_async_insert>
<parallel_view_processing>1</parallel_view_processing>
<allow_simdjson>0</allow_simdjson>
<lightweight_deletes_sync>0</lightweight_deletes_sync>
</default>
</profiles>
</clickhouse>在某些环境中,你的挂载点可能对容器不可写。在这些情况下,我们建议构建一个包含 users.xml 文件的自定义镜像。
示例 Dockerfile:
dockerfile
FROM clickhouse/clickhouse-server:24.8
COPY ./users.xml /etc/clickhouse-server/users.d/users.xml然后采取以下步骤:
- 构建你的自定义镜像。
bash
docker build -t <image-name> .- 更新你的
docker-compose.yaml以使用自定义镜像。确保移除 users.xml 挂载点。
yaml
langchain-clickhouse:
image: <image-name>- 重启你的 LangSmith 实例。
bash
docker compose down --volumes
docker compose upClickHouse fails to start up when running a cluster with AquaSec
在某些环境中,AquaSec 可能阻止 ClickHouse 正确启动。这可能表现为 ClickHouse pod 不发出任何日志且无法被标记为就绪。 这通常是由于 AquaSec 设置了 LD_PRELOAD,它与 ClickHouse 相互干扰。为解决这一点,你可以把以下环境变量添加到你的 ClickHouse 部署:
Kubernetes
编辑你的 langsmith_config.yaml(或相应的配置文件)并设置 AQUA_SKIP_LD_PRELOAD 环境变量:
yaml
clickhouse:
statefulSet:
extraEnv:
- name: AQUA_SKIP_LD_PRELOAD
value: "true"Docker
编辑你的 docker-compose.yaml 并设置 AQUA_SKIP_LD_PRELOAD 环境变量:
yaml
langchain-clickhouse:
environment:
- AQUA_SKIP_LD_PRELOAD=true