故障排除
本指南将引导您了解运行 LangSmith 自托管实例时可能遇到的常见问题。
在运行 LangSmith 时,您可能会遇到意外的 500 错误、性能缓慢或其他问题。本指南将帮助您诊断和解决这些问题。
故障排除的第一步是检查构成 LangSmith 的各种服务的日志。
如果在 Kubernetes 上运行,您可以通过运行以下命令来检查部署的日志(如果使用不同的名称部署,请将 langsmith
替换为您的部署名称)
kubectl logs -l app.kubernetes.io/instance=langsmith --prefix -n <namespace> >> logs.txt
如果在 Docker 上运行,您可以通过运行以下命令来检查部署的日志
docker compose logs >> logs.txt
通常,您需要分析的主要服务是
langsmith-backend
:主后端服务。langsmith-queue
:队列服务。
常见问题
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
- 如果使用绑定挂载,您将需要增加挂载点的大小。
- 如果使用 docker
volume
,您将需要为卷/docker 分配更多空间。
error: Dirty database version 'version'. Fix and force version
当 ClickHouse 数据库与我们的迁移不一致时,会发生此错误。您需要重置为较早的数据库版本,然后重新运行升级/迁移。
Kubernetes
- 强制迁移到较早版本,其中 version = 脏版本 - 1。
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 = 脏版本 - 1。
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
值。这可能看起来像这样
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
文件。
<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
FROM clickhouse/clickhouse-server:24.8
COPY ./users.xml /etc/clickhouse-server/users.d/users.xml
然后执行以下步骤
- 构建您的自定义镜像。
docker build -t <image-name> .
- 更新您的
docker-compose.yaml
以使用自定义镜像。确保删除 users.xml 挂载点。
langchain-clickhouse:
image: <image-name>
- 重启您的 LangSmith 实例。
docker compose down --volumes
docker compose up