Elasticsearch:如何将 MongoDB 数据引入 Elastic Cloud

作者:Hemendra Singh Lodhi

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 作为连接方法:

复制连接字符串。主机名看起来会像这样:

_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 总体步骤:

  1. 创建 S3 存储桶

  2. 创建 SQS 队列并更新访问策略

  3. 在 S3 存储桶中启用事件通知,使用创建的 SQS 队列

注意:确保 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web安全学习笔记(10)

记一下第十四节课的内容。 一、MySQL学习 数据库基本结构:库——表——列——值 在本地打开navicat,连接数据库,新建一个liuyan库、liuyan库下新建一个member表: 在表里随意添加一些数据: 下面我们学习MySQL查询。新…

【Web】NewStarCTF 2022 题解(全)

目录 Week1 HTTP Head?Header! 我真的会谢 NotPHP Word-For-You Week2 Word-For-You(2 Gen) IncludeOne UnserializeOne ezAPI Week3 BabySSTI_One multiSQL IncludeTwo Maybe You Have To think More Week4 So Baby RCE BabySSTI_Two UnserializeT…

C++修炼之路之STL_stack,queue和容器适配器

目录 前言 一:SLT中stack和queue的基本使用 1.在官网中对stack和queue的简单介绍 2.数据结构中栈和队列的基本知识和操作 3. STL中stack的接口函数及使用 4.STL中queue的接口函数及使用 二:容器适配器Container 三:使用容器适配器…

springboot Logback 不同环境,配置不同的日志输出路径

1.背景: mac 笔记本开发,日志文件写到/data/logs/下,控制台报出:Failed to create parent directories for [/data/logs/........... 再去手动在命令窗口创建文件夹data,报Read-only file system 2.修改logback-spri…

Linux安装和使用Android Debug Bridge(ADB)

目录 1、开发环境和工具 2、ADB是什么? 3、安装ADB 3.1、使用包管理器安装 ADB 3.2、手动安装 ADB 4、使用ADB 4.1、连接设备 4.2、执行shell命令 4.3、安装应用程序 4.4、截取屏幕截图 4.5、模拟按键和手势 4.6、上传文件到Android设备 4.7、从Android设备下载文件…

BGP边界网关路由实验(华为)

一,技术简介 BGP(边界网关路由协议)是一种自治系统(AS)间的协议,主要用于在不同的AS之间交换路由信息。AS是一个由一组网络设备和路由器组成的网络集合,这些设备可以在一个共同的管理域中协同工…

1 回归:锂电池温度预测top2 代码部分(一) Tabnet

2024 iFLYTEK A.I.开发者大赛-讯飞开放平台 TabNet: 模型也是我在这个比赛一个意外收获,这个模型在比赛之中可用。但是需要GPU资源,否则运行真的是太慢了。后面针对这个模型我会写出如何使用的方法策略。 比赛结束后有与其他两位选手聊天&am…

win2022服务器apache配置https(ssl)真实环境实验(避坑之作)不依赖宝塔小皮等集成环境

本次实验背景: 完全参考官方 https://cloud.tencent.com/document/product/400/4143 文档流程,没有搞定,于是写下避坑之作。 服务器:腾讯云轻量应用服务器 操作系统: Windows Server 2022 DataCenter 64bit CN apache…

李沐45_SSD实现——自学笔记

主体思路: 1.生成一堆锚框 2.根据真实标签为每个锚框打标(类别、偏移、mask) 3.模型为每个锚框做一个预测(类别、偏移) 4.计算上述二者的差异损失,以更新模型weights 先读取一张图像。 它的高度和宽度分别为561和728像素。 %matplotlib inline import …

Photoshop 2024 (ps) v25.6中文 强大的图像处理软件 mac/win

Photoshop 2024 for Mac是一款强大的图像处理软件,专为Mac用户设计。它继承了Adobe Photoshop一贯的优秀功能,并进一步提升了性能和稳定性。 Mac版Photoshop 2024 (ps)v25.6中文激活版下载 win版Photoshop 2024 (ps)v25.6直装版下载 无论是专业的设计师还…

EI Scopus双检索 | 2024年清洁能源与智能电网国际会议(CCESG 2024)

会议简介 Brief Introduction 2024年清洁能源与智能电网国际会议(CCESG 2024) 会议时间:2024年 11月27-29日 召开地点:澳大利亚悉尼 大会官网:CCESG 2024-2024 International Joint Conference on Clean Energy and Smart Grid 由CoreShare科…

m4p转换mp3格式怎么转?3个Mac端应用~

M4P文件格式的诞生伴随着苹果公司引入FairPlay版权管理系统,该系统旨在保护音频的内容。M4P因此而生,成为受到FairPlay系统保护的音频格式,常见于苹果设备的iTunes等平台。 MP3文件格式的多个优点 MP3格式的优点显而易见。首先,其…

k8s之etcd

1.特点: etcd 是云原生架构中重要的基础组件。有如下特点: 简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单键值对存储:将数据存储在分层组织的目录中,如同在标准文件系统中监…

vscode msvc qt环境搭建

自己整了好久都没把环境搞好,后来发现已经有大佬搞好了插件,完全不需要自己整理。 下载如下插件: 第二个qt插件就可以自动帮我们生成工程了。 可惜目前似乎支持win,另外就是debug模式运行后会报qwindowsd.dll插件找不到的错误&a…

【简单讲解下如何用爬虫玩转石墨文档】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

链表OJ - 6(链表分割)

题目描述(来源) 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 思路 创建两个链表&#xff0c…

ChatGPT:引领未来的语言模型革命?

一、引言 随着人工智能技术的不断发展,Chat GPT作为一种自然语言处理技术,已经逐渐渗透到各个领域,具有广泛的应用前景。本文将从多个角度探讨Chat GPT的应用领域及其未来发展趋势。 ChatGPT的语言处理能力超越了以往任何一款人工智能产品。…

Docker一键快速私有化部署(Ollama+Openwebui) +AI大模型(gemma,llama2,qwen)20240417更新

几行命令教你私有化部署自己的AI大模型,每个人都可以有自己的GTP 第一步:安装Docker(如果已经有了可以直接跳第二步) ####下载安装Docker wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo##…

STM32 USB虚拟串口

电路原理图 usb部分 晶振部分 usb与单片机连接 配置信息 sys配置信息 rcc配置信息 usb配置信息 虚拟串口配置信息 时钟配置信息 项目配置信息 代码 包含文件 主函数代码 实验效果 修改接收波特率依然可以正常接收,也就是说单片机可以自动适应上位机的波特率设置。…

4.17作业

#include "double_link_list.h" node_p create_double_link_list() //创建双向链表 {node_p H(node_p)malloc(sizeof(node));if(HNULL){printf("空间申请失败\n");return NULL;}H->data0;H->priNULL;H->nextNULL;return H; } node_p create_node…