Elastic Cloud 是由 Elastic 提供的基于云的托管服务。Elastic Cloud 允许客户在亚马逊网络服务 (AWS)、谷歌云平台 (GCP) 和微软 Azure 上部署、管理和扩展他们的 Elasticsearch 集群。
MongoDB 是一种流行的 NoSQL 文档导向数据库,它以类似 JSON 的文档形式存储数据。
以下是使用 Elastic MongoDB 连接器将数据从 MongoDB 数据库导入并同步到 Elasticsearch 的逐步指南。
为什么选择 Elastic?
Elasticsearch 是业界领先的搜索和分析引擎,它允许你快速且几乎实时地存储、搜索和分析大量数据。
Elastic 提供丰富的生成式人工智能体验,具有大型语言模型(LLMs)、广泛的机器学习能力、向量搜索以及无与伦比的开箱即用的语义搜索能力,MongoDB 的客户可以利用这些功能,在他们的商业数据上获得卓越的搜索体验。
实施
在这篇博客中,我们将使用 MongoDB Atlas,并使用 Elastic MongoDB 原生连接器将数据导入和同步到 Elastic Cloud。该连接器也可以与本地部署的 MongoDB 版本一起使用,兼容 MongoDB 3.6 及更高版本。
数据流
MongoDB 设置
1)如果你没有现有的设置,则创建一个账户并部署 Atlas 集群。我们将使用免费套餐进行数据同步。
2)在 Elastic Cloud 中运行的 Elastic 连接器必须可以访问 MongoDB Atlas 集群以获取数据。Elastic 提供静态 IP 地址,客户可以使用 engress IP 范围来限制对其 MongoDB 集群的访问。
你可以在 MongoDB Atlas -> Security -> Network Access 下配置 IP 范围。
如果连接器无法访问 MongoDB,则会出现类似以下的错误:
注意:连接器可以与 Elastic Traffic Filter 设置共存。连接器是从 Elastic Cloud 到数据源的出站连接,而流量过滤器(单向的)是从云提供商网络到 Elastic Cloud 的出站连接。
3)创建数据库用户。配置连接器时将需要用户 ID 和密码。拥有访问数据库和集合权限的只读用户就足够了。在测试中,我使用了默认角色。
4)加载示例数据(在 MongoDB Atlas 中默认可用)以创建一个数据库,或者使用你现有的数据库和集合,以便稍后在连接器配置中使用。
点击"Browse Collections 浏览集合"来验证数据。设置连接器时将需要数据库名称和集合信息。
5)获取 MongoDB Atlas 主机信息,这是配置连接器所需的信息。
从 Overview 概览页面,点击 Connnect:
选择 Shell 作为连接方法:
复制连接字符串。主机名看起来会像这样:
arduino
_mongodb+srv://cluster0.xxxxxxx.mongodb.net
Elastic Cloud 设置
创建一个 Elastic Cloud 账户和部署(如果你已经有一个,可以跳过此步骤)。
登录到 Kibana,然后转到 Search -> Content -> Indices -> Create a new index.
选择 "Connector" 作为摄取方法。
搜索 MongoDB 连接器。 有许多可用的原生连接器。
在 "Create an Elasticsearch index" 下为你的索引命名。 索引名称将以 search- 为前缀
在 "Configuration" 选项卡下,提供在 MongoDB Atlas 设置期间捕获的详细信息。
- 在"服务器主机名"中输入 MongoDB Atlas 主机名
- 输入数据库用户名和密码
- 要同步数据的数据库和 collection 名称
注意:一次只能指定一个数据库和集合。
设置成功后,你将看到下面的状态消息。
注意:在 v8.12.0 中存在一个 bug,必须启用 SSL/TLS 连接,否则同步将失败。
数据同步
配置成功完成后,单击 "Sync" 按钮以执行初始完整内容同步。 对于定期同步,请在 "Scheduling" 选项卡下配置同步频率。 默认情况下它处于禁用状态,因此你需要切换 "Enable" 按钮才能启用它。 调度完成后,连接器将在配置的时间运行并从 MongoDB 数据库和指定集合中提取所有内容。
同步规则
使用同步规则和 ingest pipelines 来自定义特定索引的同步 behavior。每次同步都是全量同步,对于每个文档,连接器会将每个 MongoDB 字段转换为一个 Elasticsearch 字段。
注意:大于 10MB 的文件将不会被摄取,且在 MongoDB 级别设置的文件权限不会原样同步到 Elastic 部署中。
搜索
你可以直接从 "Documents" 选项卡下的连接器验证从 MongoDB 引入到 Elastic Cloud 的数据。
或者你可以轻松地创建 Search applications,提供许多搜索选项。
监控
除了从 MongoDB 将数据摄取和搜索到 Elasticsearch 外,你还可以使用 Elastic MongoDB 集成(与连接器不同)来摄取日志和指标,并监控 MongoDB 集群。
注意 1:对于数据同步,我们使用了 MongoDB Atlas 的免费套餐,但免费和共享套餐存在一些限制,不能用于指标和日志摄取。集成所使用的指标命令在免费/共享套餐上不受支持,也无法导出日志。为了演示该功能,使用了 MongoDB Atlas 的付费套餐来进行监控。
注意 2:用于收集指标和日志的用户应具有 clusterMonitor 角色以运行特权命令。
指标
为了从 MongoDB Atlas 集群摄取指标,我们将使用 Elastic MongoDB 集成。在高层次上,使用 Elastic Cloud 中默认可用的 fleet server,并在主机上安装代理(需要访问 MongoDB 集群,在 Atlas 网络访问中添加主机 IP)。MongoDB 集成被配置并部署在代理上,代理在 MongoDB 服务器上运行指标命令,将数据摄取到 Elasticsearch 中。
Elastic 集成提供了资产,包括默认的仪表板、映射等。
对于配置,需要以以下格式提供 Atlas 主机信息:mongodb+srv://user:pass@host
从 "Connect" 中复制主机信息到 MongoDB 数据库。
Elastic 集成配置:
Metrics 仪表盘:
日志
如果你正在使用自管理的 MongoDB 版本,则可以使用 MongoDB 集成来摄取日志,除了上面提到的指标。但是对于 MongoDB Atlas,它是一个托管服务,日志路径是不可见的,因此你不能直接使用集成。
MongoDB Atlas 提供了一个选项,可以将日志推送到 AWS S3 存储桶(在免费套餐中不可用)。然后 Elastic AWS 自定义日志集成可以从 S3 存储桶中拉取 MongoDB 的日志。
MongoDB 配置:
注意:按照 MongoDB 控制台上的提示启用日志导出到 S3 的功能。
Elastic 配置:
我们将在已经安装了 MongoDB 集成的现有 fleet 和 agent设置中使用自定义 AWS 日志集成。
AWS 集成需要凭证和权限才能访问 AWS 资源。有多种凭证方法,对于本博客,我们使用了访问密钥 ID/私有访问密钥。
AWS 总体步骤:
注意:确保 SQS 访问策略正确,并且 SQS 可以从 S3 存储桶读取数据。
在自定义 AWS 日志集成中开启 "Collect Logs from S3 Bucket" 的选项,并提供配置为获取 MongoDB 日志的 AWS S3 存储桶 ARN 或 SQS 队列 URL。推荐使用 SQS 方法,因为轮询所有 S3 对象的成本较高,相反,集成可以从 S3 通知事件指向的 S3 对象中检索日志,这些通知事件从 SQS 队列读取。
部署完成后,集成将开始从存储桶读取日志并导入到 Elasticsearch 中。由于这是针对自定义日志的集成,可能需要进行额外的字段映射。
在 Kibana 中验证日志 -> 在 "Discover" 中查看数据视图:logs-*
检查字段:aws.s3.bucket.arn、aws.s3.bucket.name 或 log.file.path,以确认日志是否来自已配置的 S3 存储桶。
扩展
目前,Elastic MongoDB 连接器一次只允许配置一个数据库和一个集合。通常,一个大型的 MongoDB 部署会有多个数据库和集合。连接器支持对多个数据库和集合的不同实例进行单独配置,并允许你从不同的数据库和集合中摄取数据。虽然每次都需要创建不同的索引,但你可以采用类似的命名约定,并为常见的搜索创建一个数据视图。
你可以在这里看到具有多个集合实例的情况:
注意:连接器运行在企业搜索实例上,重要的是根据负载监控其使用情况并进行扩展。
MongoDB 兼容数据库
Elastic MongoDB 连接器兼容并可与支持 MongoDB API 和驱动程序的数据库一起工作。例如,你也可以用类似的方式使用连接器从 Amazon DocumentDB 和 Azure CosmosDB 摄取数据。
结论
Elastic MongoDB 连接器提供了一种将 MongoDB 数据同步到 Elasticsearch 部署的简单方法。实现连接器并利用 Elastic 提供的行业领先的搜索体验相对容易。在我们的文档中了解更多关于连接器的信息。
准备在你的应用中构建 RAG 吗?想尝试不同的 LLM 与向量数据库吗? 请查看我们在 Github 上的 LangChain、Cohere 等样本笔记本,并加入即将开始的 Elasticsearch 工程师培训!
原文:MongoDB & Elasticsearch: Ingest MongoDB data into Elastic Cloud --- Elastic Search Labs