如何将数据采集到 Elasticsearch 服务
做者Florian Kelbert
对于数据搜索和分析来讲,Elasticsearch 无处不在。开发人员和社区可利用 Elasticsearch 寻找寻找各类各样的用例,从应用程序搜索和网站搜索,到日志、基础架构监测、APM 和 安全分析,不一而足。虽然如今有针对这些用例的免费解决方案,可是开发人员首先须要将其数据提供给 Elasticsearch。html
本文将描述几种最多见的将数据采集到 Elasticsearch 服务的方法。这多是一个托管在 Elastic Cloud 或其本地方案 Elastic Cloud Enterprise 上的集群。虽然咱们主要关注于这些服务,但采集到自管型 Elasticsearch 集群的数据看起来几乎是相同的。惟一的变化是您处理集群的方式。node
在咱们深刻探讨技术细节以前,提醒一下:若是您在阅读本文时遇到任何问题,请随时访问 discuss.elastic.co。咱们的社区很是活跃,您有望会在那里找到问题的答案。git
接下来,咱们开始使用如下方法来深刻探讨数据采集:github
**web
**正则表达式
Elasticsearch 提供了灵活的 RESTful API,用于与客户端应用程序通讯。所以,REST 调用被用来采集数据、执行搜索和数据分析,以及管理集群及其索引。实际上,上述全部方法都依赖于这个 API 将数据采集到 Elasticsearch。docker
在本文后续介绍中,咱们假设您已经建立了 Elasticsearch 服务集群。若是您尚未建立,请注册 Elastic Cloud 免费试用。在您建立集群后,系统将会为您提供 Elastic 超级用户账户的云 ID 和密码。云 ID 的格式以下:cluster_name:ZXVy...Q2Zg==
。它对您集群的 URL 进行了编码,而且咱们将会看到,它可简化数据采集。数据库
**缓存
**安全
Elastic Beats 是一组轻量型的数据采集器,能够方便地将数据发送给 Elasticsearch 服务。因为是轻量型的,Beats 不会产生太多的运行时开销,所以,能够在硬件资源有限的设备(如 IoT 设备、边缘设备或嵌入式设备)上运行和收集数据。若是您须要收集数据,但没有资源来运行资源密集型数据收集器,那么 Beats 会是您最佳的选择。这种无处不在(涵盖全部联网设备)的数据收集方式,让您可以快速检测到异常状况作出反应,例如系统范围内的问题和安全事件等。
固然,Beats 并不局限于资源有限的系统,它们还可用于具备更多可用硬件资源的系统。
**
**
Beats 有多种风格,能够收集不一样类型的数据:
一旦您决定了在特定场景中要使用哪一个 Beats,入门就像下节所描述的那样,很是简单。
**
**
在这部分中,咱们将以 Metricbeat 为例,学习如何开始使用 Beats。对于其余 Beats,步骤大同小异。针对您具体的 Beat 和操做系统,请参考本文档并按照下列步骤进行操做。
sudo metricbeat modules enable docker
启用 Docker 模块(若是您使用包管理器安装)。若是您经过解压缩 tgz/zip 包安装,则使用 /metricbeat modules enable docker
。cloud.id: cluster_name:ZXVy...Q2Zg== cloud.auth: "elastic:YOUR_PASSWORD"
cloud.id
是在建立集群时提供给您的。cloud.auth
是一个冒号分隔的用户名和密码的串联,且已在 Elasticsearch 集群中被授予足够的权限。/etc/metricbeat
目录下找到配置文件;若是您使用 tgz/zip 包安装,则在解压缩的目录下。sudo metricbeat setup
将它们加载到 Kibana;若是使用 tgz/zip 包安装,则在解压缩的目录下运行 ./metricbeat setup
。sudo systemctl start metricbeat
;若是您使用 tgz/zip 包安装,则使用 ./metricbeat -e
若是一切正常,数据就会开始流入 Elasticsearch 服务。
**
**
前往 Elasticsearch 服务中的 Kibana 来查看数据:
metricbeat-*
索引模式,您将可以看到已采集的各个文档。**
**
Logstash 是一个强大而灵活的工具,能够读取、处理和传送任何类型的数据。Logstash 提供了许多功能,这些功能目前还不可用,或者经过 Beats 执行成本过高,好比经过对外部数据源执行查找来丰富文档。无论采用哪一种方式,Logstash 的这种功能和灵活性都是有代价的。此外,Logstash 的硬件要求也显著高于 Beats。严格来讲,Logstash 一般不该部署在低资源设备上。所以,在 Beats 功能不足以知足特定用例要求的状况下,可将 Logstash 用做其替代选择。
一种常见的架构模式是将 Beats 和 Logstash 组合起来:使用 Beats 来收集数据,并使用 Logstash 来执行 Beats 没法执行的任何数据处理。
**
**
Logstash 经过执行事件处理管道来工做,其中每一个管道至少包含如下各项中的一个:
**
**
没有两个用例是相同的。所以,您可能必须开发符合自身特定数据输入和需求的 Logstash 管道。
咱们提供了一个示例 Logstash 管道,该管道可以
步骤以下:
./bin/logstash-plugin install logstash-input-rss
input { rss { url => "/blog/feed" interval => 120 } } filter { mutate { rename => [ "message", "blog_html" ] copy => { "blog_html" => "blog_text" } copy => { "published" => "@timestamp" } } mutate { gsub => [ "blog_text", "<.*?>", "", "blog_text", "[\n\t]", " " ] remove_field => [ "published", "author" ] } } output { stdout { codec => dots } elasticsearch { hosts => [ "https://<your-elsaticsearch-url>" ] index => "elastic_blogRead More
启动 Logstash 须要几秒钟的时间。您会在控制台上看到出现圆点 (.....)。每一个点表示一个已采集到 Elasticsearch 的文档。
有关更多详细信息,请参阅优秀的博客文章 Logstash 实用介绍。所有详细信息,请参阅 Logstash 文档。
在某些状况下,最好将数据采集与自定义应用程序代码集成。为此,咱们建议使用一个官方支持的 Elasticsearch 客户端。这些客户端是抽象出数据采集低层细节的库,使您可以专一于特定应用程序的实际工做。Java、JavaScript、Go、.NET、PHP、Perl、Python 和 Ruby 都有官方客户端。有关您所选语言的全部详细信息和代码示例,请参阅相关文档便可。若是您的应用程序不是用上面所列语言编写的,则极可能会有社区贡献的客户端。
咱们推荐的用于开发和调试 Elasticsearch 请求的工具是 Kibana 开发工具控制台。开发工具公开了通用的 Elasticsearch REST API 的所有功能和灵活性,同时抽象出了底层 HTTP 请求的技术细节。不出所料,您可使用开发工具控制台将原始 JSON 文档放到 Elasticsearch 中:
PUT my_first_index/_doc/1 { "title" :"How to Ingest Into Elasticsearch Service", "date" :"2019-08-15T14:12:12", "description" :"This is an overview article about the various ways to ingest into Elasticsearch Service" }
**
**有了 Elasticsearch 提供的通用 REST 接口,您便可为所欲为地找到本身喜欢的 REST 客户端来与 Elasticsearch 通讯并采集文档。虽然咱们建议首先尝试上面提到的工具,可是有不少缘由可能会让您考虑其余选择。例如,curl 是一款常常做为最后手段使用的工具,用于开发、调试或与自定义脚本集成。
将数据采集到 Elasticsearch 服务的方法不胜枚举。没有两种场景是相同的;选择具体的方法或工具来采集数据取决于您的特定用例、需求和环境。Beats 提供了一种方便、轻量级的开箱即用型解决方案,能够从许多不一样的来源收集和采集数据。与 Beats 封装在一块儿的模块为许多常见数据库、操做系统、容器环境、Web 服务器、缓存等提供了数据获取、解析、索引和可视化的配置。这些模块可提供五分钟实现数据到仪表板的体验。由于 Beats 是轻量型的,因此很是适合资源受限的嵌入式设备,例如 IoT 设备或防火墙。另外一方面,Logstash 是一种灵活的工具,可用于读取、转换和采集数据,提供了大量的过滤器、输入和输出插件。若是 Beats 的功能对于某些用例来讲还不够,那么一种常见的架构模式是使用 Beats 来收集数据,并经过 Logstash 作进一步处理,而后再采集到 Elasticsearch 中。咱们建议在直接从应用程序采集数据时使用官方支持的客户端库。Kibana 开发工具控制台很是适合开发和调试。最后,Elasticsearch REST API 为您提供了使用您喜欢的 REST 客户端的灵活性。准备好进一步深刻了解了吗?推荐您阅读如下相关文章:
想要更多了解Elastic技术,欢迎关注和报名参加webinar,近期安排以下:
2020年2月19日(星期三)15:00-16:00
使用Elastic Stack构建全方位可观察性实例
2020年2月26日(星期三)15:00-16:00
Kibana Lens 网络研讨会
2020年3月4日(星期三)15:00-16:00
Elastic Endpoint Security 概述网络
2020年3月11日(星期三)15:00-16:00
使用Elastic Stack监控网站资源