如何将数据采集到 Elasticsearch 服务

如何将数据采集到 Elasticsearch 服务
做者Florian Kelbert
对于数据搜索和分析来讲,Elasticsearch 无处不在。开发人员和社区可利用 Elasticsearch 寻找寻找各类各样的用例,从应用程序搜索网站搜索,到日志、基础架构监测APM安全分析,不一而足。虽然如今有针对这些用例的免费解决方案,可是开发人员首先须要将其数据提供给 Elasticsearch。html

本文将描述几种最多见的将数据采集到 Elasticsearch 服务的方法。这多是一个托管在 Elastic Cloud 或其本地方案 Elastic Cloud Enterprise 上的集群。虽然咱们主要关注于这些服务,但采集到自管型 Elasticsearch 集群的数据看起来几乎是相同的。惟一的变化是您处理集群的方式。node

在咱们深刻探讨技术细节以前,提醒一下:若是您在阅读本文时遇到任何问题,请随时访问 discuss.elastic.co。咱们的社区很是活跃,您有望会在那里找到问题的答案。git

接下来,咱们开始使用如下方法来深刻探讨数据采集:github

  • Elastic Beats
  • Logstash
  • 语言客户端
  • Kibana 开发工具

**web

采集到 Elasticsearch 服务

**正则表达式

Elasticsearch 提供了灵活的 RESTful API,用于与客户端应用程序通讯。所以,REST 调用被用来采集数据、执行搜索和数据分析,以及管理集群及其索引。实际上,上述全部方法都依赖于这个 API 将数据采集到 Elasticsearch。docker

在本文后续介绍中,咱们假设您已经建立了 Elasticsearch 服务集群。若是您尚未建立,请注册 Elastic Cloud 免费试用。在您建立集群后,系统将会为您提供 Elastic 超级用户账户的云 ID 和密码。云 ID 的格式以下:cluster_name:ZXVy...Q2Zg==。它对您集群的 URL 进行了编码,而且咱们将会看到,它可简化数据采集。数据库

**缓存

Elastic Beats

**安全

Elastic Beats 是一组轻量型的数据采集器,能够方便地将数据发送给 Elasticsearch 服务。因为是轻量型的,Beats 不会产生太多的运行时开销,所以,能够在硬件资源有限的设备(如 IoT 设备、边缘设备或嵌入式设备)上运行和收集数据。若是您须要收集数据,但没有资源来运行资源密集型数据收集器,那么 Beats 会是您最佳的选择。这种无处不在(涵盖全部联网设备)的数据收集方式,让您可以快速检测到异常状况作出反应,例如系统范围内的问题和安全事件等。

固然,Beats 并不局限于资源有限的系统,它们还可用于具备更多可用硬件资源的系统。

**

Beats 系列:概述

**

Beats 有多种风格,能够收集不一样类型的数据:

  • Filebeat 支持您从以文件形式提供的源中读取、预处理和传送数据。尽管大多数用户使用 Filebeat 来读取日志文件,但它也支持任何非二进制文件格式。Filebeat 还支持许多其余数据源,包括 TCP/UDP、容器、Redis 和 Syslog。借助丰富的模块,能够轻松针对 Apache、MySQL 和 Kafka 等常见应用程序的日志格式收集和解析相应的数据。
  • Metricbeat 可收集并预处理系统和服务指标。系统指标包括关于运行中进程的相关信息,以及 CPU/内存/磁盘/网络利用率方面的数据。这些模块可用于收集来自许多不一样服务的数据,包括 Kafka、Palo Alto Networks、Redis,等等。
  • Packetbeat 可收集并预处理实时网络数据,从而支持应用程序监测、安全和网络性能分析。此外,Packetbeat 还支持如下协议:DHCP、DNS、HTTP、MongoDB、NFS 和 TLS。
  • Winlogbeat 可从 Windows 操做系统捕获事件日志,包括应用程序事件、硬件事件,以及安全和系统事件。对于许多用例来讲,从 Windows 事件日志中得到的大量信息很是有用。
  • Auditbeat 可检测对关键文件的更改并从 Linux 审计框架收集事件。不一样的模块简化了它的部署,这主要在安全分析用例中使用。
  • Heartbeat 利用探测来监测系统和服务的可用性。所以,Heartbeat 在许多场景中都颇有用,好比基础架构监测和安全分析。ICMP、TCP 和 HTTP 都是受支持的协议。
  • Functionbeat 可从无服务器环境(如 AWS Lambda)中收集日志和指标。

一旦您决定了在特定场景中要使用哪一个 Beats,入门就像下节所描述的那样,很是简单。

**

Beats 入门

**

在这部分中,咱们将以 Metricbeat 为例,学习如何开始使用 Beats。对于其余 Beats,步骤大同小异。针对您具体的 Beat 和操做系统,请参考本文档并按照下列步骤进行操做。

  1. 下载并安装所需的 Beat。安装 Beats 有不少种方法,但大多数用户都会选择使用为操做系统的包管理器提供的 Elastic 存储库 (DEB/RPM),或者简单下载并解压缩所提供的 tgz/zip 包。
  2. 配置 Beat启用任何所需的模块
  • 例如,要收集系统上运行的关于 Docker 容器的指标,则经过 sudo metricbeat modules enable docker 启用 Docker 模块(若是您使用包管理器安装)。若是您经过解压缩 tgz/zip 包安装,则使用 /metricbeat modules enable docker
  • 云 ID 是一种简便的方法,用以指定收集的数据要发送到的 Elasticsearch 服务。将云 ID 和身份验证信息添加到 Metricbeat 配置文件 (Metricbeat .yml):

cloud.id: cluster_name:ZXVy...Q2Zg== cloud.auth: "elastic:YOUR_PASSWORD"

  • 如前所述,cloud.id 是在建立集群时提供给您的。cloud.auth 是一个冒号分隔的用户名和密码的串联,且已在 Elasticsearch 集群中被授予足够的权限。
  • 若要快速启动,可使用在建立集群时提供的 Elastic 超级用户和密码。若是您使用包管理器安装,则能够在 /etc/metricbeat 目录下找到配置文件;若是您使用 tgz/zip 包安装,则在解压缩的目录下。
  1. 将预装仪表板加载到 Kibana。大多数 Beats 和它们的模块都带有预先定义好的 Kibana 仪表板。若是您使用包管理器安装,则经过 sudo metricbeat setup 将它们加载到 Kibana;若是使用 tgz/zip 包安装,则在解压缩的目录下运行 ./metricbeat setup
  2. 运行 Beat。若是您在基于 systemd 的 Linux 系统上使用包管理器安装,则使用 sudo systemctl start metricbeat;若是您使用 tgz/zip 包安装,则使用 ./metricbeat -e

若是一切正常,数据就会开始流入 Elasticsearch 服务。

**

探索预装仪表板

**

前往 Elasticsearch 服务中的 Kibana 来查看数据:

  • 在 Kibana Discover 中,选择 metricbeat-* 索引模式,您将可以看到已采集的各个文档。
  • “Kibana 基础架构”选项卡经过以各类图表形式显示有关系统资源(CPU、内存、网络)的使用状况,让您可以以更图形化的方式检查系统和 Docker 指标。
  • 在 Kibana 仪表板中,选择任意带有 [Metricbeat System] 前缀的仪表板,以交互方式查看数据。

**

Logstash

**

Logstash 是一个强大而灵活的工具,能够读取、处理和传送任何类型的数据。Logstash 提供了许多功能,这些功能目前还不可用,或者经过 Beats 执行成本过高,好比经过对外部数据源执行查找来丰富文档。无论采用哪一种方式,Logstash 的这种功能和灵活性都是有代价的。此外,Logstash 的硬件要求也显著高于 Beats。严格来讲,Logstash 一般不该部署在低资源设备上。所以,在 Beats 功能不足以知足特定用例要求的状况下,可将 Logstash 用做其替代选择。

一种常见的架构模式是将 Beats 和 Logstash 组合起来:使用 Beats 来收集数据,并使用 Logstash 来执行 Beats 没法执行的任何数据处理。

**

Logstash 概述

**

Logstash 经过执行事件处理管道来工做,其中每一个管道至少包含如下各项中的一个:

  • 输入从数据源读取数据。官方支持多种数据源,包括文件、http、imap、jdbc、kafka、syslog、tcp 和 udp。
  • 过滤器以多种方式处理和丰富数据。在许多状况下,首先须要将非结构化的日志行解析为更加结构化的格式。所以,除其余功能外,Logstash 还在正则表达式的基础上提供了解析 CSV、JSON、键/值对、分隔的非结构化数据和复杂的非结构化数据的过滤器(grok 过滤器)。Logstash 还提供了更多的过滤器,经过执行 DNS 查找,添加关于 IP 地址的地理信息,或经过对自定义目录Elasticsearch 索引执行查找来丰富数据。经过这些附加的过滤器,可以对数据进行各类转换,例如重命名、删除、复制数据字段和值(mutate 过滤器)。
  • 输出将解析后并加以丰富的数据写入数据接收器,这是 Logstash 处理管道的最后阶段。虽然有许多输出插件可用,但这里咱们主要讨论如何使用 Elasticsearch 输出将数据采集到 Elasticsearch 服务。

**

Logstash 示例管道

**

没有两个用例是相同的。所以,您可能必须开发符合自身特定数据输入和需求的 Logstash 管道。

咱们提供了一个示例 Logstash 管道,该管道可以

  • 读取 Elastic 博客 RSS 源
  • 经过复制/重命名字段和删除特殊字符及 HTML 标记来执行一些简单的数据预处理
  • 将文档采集到 Elaticsearch

步骤以下:

  1. 经过包管理器或下载并解压 tgz/zip 文件来安装 Logstash。
  2. 安装 Logstash rss 输入插件,这可支持读取 RSS 数据源:./bin/logstash-plugin install logstash-input-rss
  3. 将下列 Logstash 管道定义复制到一个新文件,例如 ~/elastic-rss.conf:

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

  1. 在上面的文件中,修改参数主机和密码,以匹配您的 Elasticsearch 服务端点和 Elastic 用户密码。在 Elastic Cloud 中,您能够从部署页的详细信息中获取 Elasticsearch 端点 URL(复制端点 URL)。

部署页面详细信息

  1. 经过启动 Logstash 执行管道:./bin/logstash -f ~/elastic-rss.conf

启动 Logstash 须要几秒钟的时间。您会在控制台上看到出现圆点 (.....)。每一个点表示一个已采集到 Elasticsearch 的文档。

  1. 打开 Kibana。在 Kibana 开发工具控制台中,执行如下操做,以确认已经采集了 20 个文档:POST elastic_blog/_search

有关更多详细信息,请参阅优秀的博客文章 Logstash 实用介绍。所有详细信息,请参阅 Logstash 文档

语言客户端

在某些状况下,最好将数据采集与自定义应用程序代码集成。为此,咱们建议使用一个官方支持的 Elasticsearch 客户端。这些客户端是抽象出数据采集低层细节的库,使您可以专一于特定应用程序的实际工做。Java、JavaScript、Go、.NET、PHP、Perl、Python 和 Ruby 都有官方客户端。有关您所选语言的全部详细信息和代码示例,请参阅相关文档便可。若是您的应用程序不是用上面所列语言编写的,则极可能会有社区贡献的客户端

Kibana 开发工具

咱们推荐的用于开发和调试 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" }

**

其余 REST 客户端

**有了 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监控网站资源

相关文章
相关标签/搜索