ClickHouse 是一款高性能、面向列的数据库系统。它支持高速数据摄入,并针对分析查询进行了优化。 LangSmith 使用 ClickHouse 作为跟踪和反馈数据的主要存储。默认情况下,自托管的 LangSmith 将使用与 LangSmith 实例捆绑在一起的内部 ClickHouse 数据库。该数据库以有状态集的形式运行在与 LangSmith 应用相同的 Kubernetes 集群中,或作为 Docker 容器运行在与 LangSmith 应用相同的主机上。 然而,您可以将 LangSmith 配置为使用外部 ClickHouse 数据库,以便于管理和扩展。通过配置外部 ClickHouse 数据库,您可以管理数据库的备份、扩展和其他运维任务。尽管 ClickHouse 尚非 Azure、AWS 或 Google Cloud 的原生服务,您仍可通过以下方式在使用外部 ClickHouse 数据库的同时运行 LangSmith:
使用前两种选项(由 LangSmith 管理的 ClickHouse 或 ClickHouse Cloud)将在您的 VPC 外部供应一个 ClickHouse 服务。然而,这两种选项都支持私有端点,这意味着您可以将流量定向到该 ClickHouse 服务,而无需将其暴露到公共互联网(例如通过 AWS PrivateLink 或 GCP Private Service Connect)。此外,敏感信息可以配置为不存储在 ClickHouse 中。如需更多信息,请通过 support.langchain.com 联系支持团队。

要求

  • 一个已供应的、您的 LangSmith 应用将有网络访问权限的 ClickHouse 实例(选项见上文)。
  • 一个拥有 ClickHouse 数据库管理员权限的用户。此用户将用于创建必要的表、索引和视图。
  • 我们支持独立的 ClickHouse 和外部管理的集群部署。对于集群部署,请确保所有节点运行相同的版本。请注意,与 ClickHouse 捆绑的安装不支持集群设置。
  • 我们仅支持 ClickHouse 版本 >= 23.9。使用 ClickHouse 版本 >= 24.2 需要 LangSmith v0.6 或更高版本。
将 ClickHouse 降级到早期版本可能会导致系统表数据损坏,并造成显著的服务中断。如果您需要更改 ClickHouse 版本或在升级后遇到问题,请在尝试降级之前通过 support.langchain.com 联系支持团队。
  • 我们依赖于您的 ClickHouse 实例上设置的几个配置参数。详细信息如下:
我们的系统已经针对上述配置参数进行了调优。更改这些参数可能会导致意外行为。

高可用复制 ClickHouse 集群

默认情况下,上述设置过程仅适用于单节点 ClickHouse 集群。
如果您希望使用多节点 ClickHouse 集群以实现高可用性,我们通过额外的必需配置来支持此设置。此设置可以使用由多个节点组成且通过 Zookeeper 或 Clickhouse Keeper 进行数据复制的 ClickHouse 集群。有关 ClickHouse 复制的更多信息,请参阅 ClickHouse 数据复制文档。 要使用复制的多节点 ClickHouse 设置配置 LangSmith:
  • 您需要拥有一个已设置 Keeper 或 Zookeeper 进行数据复制及相应配置的 ClickHouse 集群。参见 ClickHouse 复制设置文档。
  • 您需要在 LangSmith 配置 部分设置集群参数,具体来说,是将 cluster 设置为匹配您的 ClickHouse 集群名称。这将在运行 ClickHouse 迁移时使用 Replicated 表引擎。
  • 如果除了高可用性之外,您还希望在 ClickHouse 节点之间进行负载均衡(以分散读或写操作),我们建议使用负载均衡器或 DNS 负载均衡,在您的 ClickHouse 服务器之间进行轮询。
  • 注意:您需要在首次启动 LangSmith 并运行 ClickHouse 迁移之前启用 cluster 设置。这是必须的,因为表引擎需要创建为 Replicated 表引擎,而非非复制引擎类型。
在启用 cluster 的情况下运行迁移时,迁移将创建 Replicated 表引擎变体。这意味着数据将在集群中的服务器之间复制。这是一个主-主设置,任何服务器都可以处理读、写或合并操作。
有关复制 ClickHouse 集群的示例设置,请参阅 LangSmith Helm chart 仓库示例中的 复制 ClickHouse 部分。

由 LangSmith 管理的 ClickHouse

  • 如果使用由 LangSmith 管理的 ClickHouse,您需要在 LangSmith VPC 和 ClickHouse VPC 之间建立 VPC 对等连接。如需更多信息,请通过 support.langchain.com 联系支持团队。
  • 您还需要设置 Blob 存储。您可以在 Blob 存储文档 中了解更多信息。
由 LangSmith 管理的 ClickHouse 安装使用 SharedMerge 引擎,该引擎会自动对它们进行集群并分离计算和存储。
更多信息,请参阅 托管 ClickHouse 页面。

参数

您需要为 LangSmith 安装提供几个参数来配置外部 ClickHouse 数据库。这些参数包括:
  • 主机 (Host):ClickHouse 数据库的主机名或 IP 地址
  • HTTP 端口 (HTTP Port):ClickHouse 数据库监听 HTTP 连接的端口
  • 原生端口 (Native Port):ClickHouse 数据库监听 原生连接 的端口
  • 数据库 (Database):LangSmith 应使用的 ClickHouse 数据库名称
  • 用户名 (Username):用于连接 ClickHouse 数据库的用户名
  • 密码 (Password):用于连接 ClickHouse 数据库的密码
  • 集群 (可选) (Cluster (Optional)):如果使用外部 ClickHouse 集群,这是 ClickHouse 集群的名称。设置后,LangSmith 将在集群上运行迁移并在实例间复制数据。
集群部署的重要注意事项:
  • 集群设置必须在全新的架构上配置 - 现有的独立 ClickHouse 实例无法转换为集群模式。
  • 仅支持外部管理的 ClickHouse 部署进行集群设置。它不兼容与 ClickHouse 捆绑的安装,因为这些安装不包含必需的 ZooKeeper 配置。
  • 使用集群部署时,LangSmith 将自动:
    • 在集群中的所有节点上运行数据库迁移
    • 配置表以进行跨集群的数据复制
请注意,虽然数据在节点间复制,但 LangSmith 不会配置分布式表或处理查询路由 - 查询将定向到指定的主机。如果需要,您需要在基础设施层面处理任何负载均衡或查询分配。

配置

获得这些参数后,您可以配置 LangSmith 实例以使用已供应的 ClickHouse 数据库。您可以通过修改 LangSmith Helm Chart 安装的 config.yaml 文件来完成此操作。
Helm
配置完成后,您应该能够重新安装您的 LangSmith 实例。如果一切配置正确,您的 LangSmith 实例现在应该正在使用您的外部 ClickHouse 数据库。

ClickHouse 的 TLS 配置

使用本部分配置 ClickHouse 连接的 TLS。要挂载内部/公共 CA 以便 LangSmith 信任您的 ClickHouse 服务器证书,请参阅 配置自定义 TLS 证书。

服务器 TLS(单向)

要为 ClickHouse 连接启用 TLS:
  • 在配置中设置 tls: true(或使用 tlsSecretKey 指定外部 secret)。
  • 使用适当的 TLS 端口(通常 HTTP 为 8443,原生 TCP 连接为 9440)。
  • 如果使用内部 CA,请通过 config.customCa.secretName 和 config.customCa.secretKey 提供 CA 包。
仅当您的 ClickHouse 服务器使用内部或私有 CA 时才挂载自定义 CA。受公共信任的 CA 不需要此配置。

带有客户端认证的双向 TLS (mTLS)

从 LangSmith helm chart 版本 0.12.29 起,我们支持 ClickHouse 客户端的 mTLS。对于 mTLS 中的服务器端身份验证,除了以下客户端证书配置外,请使用 服务器 TLS 步骤(自定义 CA)。 如果您的 ClickHouse 服务器需要客户端证书认证:
  • 提供包含您的客户端证书和密钥的 Secret。
  • 通过 clickhouse.external.clientCert.secretName 引用它,并使用 certSecretKey 和 keySecretKey 指定键。

用于迁移的非 TLS 原生端口

当使用带有 ClickHouse 的 mTLS 时,您必须保留一个非 TLS 的原生 (TCP) 端口供我们的迁移任务使用,该任务在 helm 安装和升级时运行。应用程序本身不会通过此端口通信,它仅由迁移任务使用。
默认情况下,迁移任务连接到端口 9000 进行迁移。如果您的 ClickHouse 实例使用不同的非 TLS 原生端口,您可以使用 CLICKHOUSE_MIGRATE_NATIVE_PORT 环境变量进行配置:

用于证书卷的 Pod 安全上下文

为 mTLS 挂载的证书卷受到文件访问限制的保护。为确保所有 LangSmith Pod 都能读取证书文件,您必须在 Pod 安全上下文中设置 fsGroup: 1000。 您可以通过以下两种方式之一进行配置: 选项 1:使用 commonPodSecurityContext 在顶层设置 fsGroup 以将其应用于所有 Pod:
选项 2:添加到各个 Pod 安全上下文 如果您需要更细粒度的控制,请将 fsGroup 单独添加到每个 Pod 的安全上下文中。完整的参考示例请参见 mTLS 配置示例。