对于数据搜索和分析来说,Elasticsearch 无处不在。开发人员和社区可利用 Elasticsearch 寻找寻找各种各样的用例,从应用程序搜索和网站搜索,到日志、基础架构监测、APM 和 安全分析,不一而足。虽然现在有针对这些用例的免费解决方案,但是开发人员首先需要将其数据提供给 Elasticsearch。
本文将描述几种最常见的将数据采集到 Elasticsearch 服务的方法。这可能是一个托管在 Elastic Cloud 或其本地方案 Elastic Cloud Enterprise 上的集群。虽然我们主要关注于这些服务,但采集到自管型 Elasticsearch 集群的数据看起来几乎是相同的。唯一的变化是您处理集群的方式。
在我们深入探讨技术细节之前,提醒一下:如果您在阅读本文时遇到任何问题,请随时访问 discuss.elastic.co。我们的社区非常活跃,您有望会在那里找到问题的答案。
接下来,我们开始使用以下方法来深入探讨数据采集:
Elasticsearch 提供了灵活的 RESTful API,用于与客户端应用程序通信。因此,REST 调用被用来采集数据、执行搜索和数据分析,以及管理集群及其索引。实际上,上述所有方法都依赖于这个 API 将数据采集到 Elasticsearch。
在本文后续介绍中,我们假设您已经创建了 Elasticsearch 服务集群。如果您还没有创建,请注册 Elastic Cloud 免费试用。在您创建集群后,系统将会为您提供 Elastic 超级用户帐户的云 ID 和密码。云 ID 的格式如下:cluster_name:ZXVy...Q2Zg==
。它对您集群的 URL 进行了编码,并且我们将会看到,它可简化数据采集。
Elastic Beats 是一组轻量型的数据采集器,可以方便地将数据发送给 Elasticsearch 服务。由于是轻量型的,Beats 不会产生太多的运行时开销,因此,可以在硬件资源有限的设备(如 IoT 设备、边缘设备或嵌入式设备)上运行和收集数据。如果您需要收集数据,但没有资源来运行资源密集型数据收集器,那么 Beats 会是您最佳的选择。这种无处不在(涵盖所有联网设备)的数据收集方式,让您能够快速检测到异常情况做出反应,例如系统范围内的问题和安全事件等。
当然,Beats 并不局限于资源有限的系统,它们还可用于具有更多可用硬件资源的系统。
Beats 系列:概述
Beats 有多种风格,可以收集不同类型的数据:
一旦您决定了在特定场景中要使用哪个 Beats,入门就像下节所描述的那样,非常简单。
Beats 入门
在这部分中,我们将以 Metricbeat 为例,学习如何开始使用 Beats。对于其他 Beats,步骤大同小异。针对您具体的 Beat 和操作系统,请参考本文档并按照下列步骤进行操作。
cloud.id: cluster_name:ZXVy...Q2Zg== cloud.auth: "elastic:YOUR_PASSWORD"
sudo metricbeat modules enable docker
启用 Docker 模块(如果您使用包管理器安装)。如果您通过解压缩 tgz/zip 包安装,则使用 /metricbeat modules enable docker
。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 示例管道
没有两个用例是相同的。因此,您可能必须开发符合自身特定数据输入和需求的 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://" ]
index => "elastic_blog"
user => "elastic"
password => ""
}
}
启动 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 客户端的灵活性。准备好进一步深入了解了吗?推荐您阅读以下相关文章: