本文提供了将数据采集到阿里云Elasticsearch服务中的几种解决方案。
背景信息
对于数据搜索和分析来说,Elasticsearch无处不在。开发人员和社区可使用Elasticsearch寻找各种各样的使用场景,从应用程序搜索和网站搜索,到日志、基础架构监测、APM和安全分析,不一而足。虽然现在有针对这些场景的免费解决方案,但是开发人员仍需要先将其数据提供给Elasticsearch。
本文提供了以下几种常见的将数据采集到阿里云Elasticsearch中的方法:
Elasticsearch提供了灵活的RESTful API,用于与客户端应用程序进行通信。因此通过调用RESTful API,可以完成数据采集、搜索和分析,以及管理集群及其索引的操作。
Elastic Beats
Elastic Beats是一组轻量型的数据采集器,可以方便地将数据发送给Elasticsearch服务。由于是轻量型的,Beats不会产生太多的运行开销,因此,可以在硬件资源有限的设备(如 IoT 设备、边缘设备或嵌入式设备)上运行和收集数据。如果您需要收集数据,但没有资源来运行资源密集型数据收集器,那么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操作系统捕获事件日志,包括应用程序事件、硬件事件,以及安全和系统事件。
Auditbeat可以检测对关键文件的更改,并从Linux的审计框架中收集事件,主要应用于安全分析场景中。
Heartbeat可以使用探测来监测系统和服务的可用性,因此可以应用于很多场景中,例如基础架构监测和安全分析。同时支持ICMP、TCP和HTTP协议。
Functionbeat可以从无服务器环境(如AWS Lambda)中收集日志和指标。
请参见通过自建Metricbeat收集系统指标信息学习Beats的使用方法,其他Beats的使用方法与此类似。
Logstash
Logstash是一个强大而灵活的工具,可以读取、处理和传送任何类型的数据,并且具有丰富的功能,但对设备资源的要求较高。目前Beats还不支持Logstash提供的一些丰富的功能,或者通过Beats执行成本太高,例如通过查找外部数据源来丰富文档。但是Logstash的硬件要求显著高于Beats,因此Logstash通常不应部署在低资源设备上,在Beats功能不足以满足特定应用场景要求的情况下,可使用Logstash进行代替。
一种常见的架构模式是将Beats和Logstash组合起来:使用Beats来收集数据,并使用Logstash来执行Beats无法执行的数据处理任务。
阿里云Elasticsearch提供了Logstash服务。阿里云Logstash作为服务器端的数据处理管道,提供了100%兼容开源的Logstash功能,能够动态地从多个来源采集数据、转换数据,并且将数据存储到所选择的位置。通过输入、过滤和输出插件,Logstash可以对任何类型的事件进行加工和转换。
Logstash通过事件处理管道来执行任务,其中每个管道至少包含以下各项中的一个:
从数据源读取数据。官方支持多种数据源,包括文件、http、imap、jdbc、kafka、syslog、tcp和udp。
以多种方式处理和丰富数据。在许多情况下,需要先将非结构化的日志行解析为更加结构化的格式。因此,除其他功能外,Logstash还在正则表达式的基础上,提供了解析CSV、JSON、键/值对、分隔的非结构化数据、复杂的非结构化数据的过滤器(grok过滤器)。Logstash还提供了更多的过滤器,通过执行DNS查找,添加关于IP地址的地理信息,或通过查找自定义目录或Elasticsearch索引来丰富数据。通过这些附加的过滤器,能够对数据进行各种转换,例如重命名、删除、复制数据字段和值(mutate过滤器)。
输出是Logstash处理管道的最后阶段,可以将解析后并加以丰富的数据写入数据接收器。虽然有很多输出插件可用,但本文主要讨论如何使用Elasticsearch输出,将数据采集到Elasticsearch服务中。
以下提供了一个示例Logstash管道,该管道能够:
读取Elastic博客RSS源。
通过复制或重命名字段、删除特殊字符以及HTML标记,来执行一些简单的数据预处理。
将文档采集到Elasticsearch。
按照如下示例配置阿里云Logstash管道。
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_blog" user => "elastic" password => "<your-elasticsearch-password>" } }
hosts
需要替换为<对应阿里云Elasticsearch实例的私网地址>:9200
;password
需要替换为对应阿里云Elasticsearch的访问密码。在Kibana控制台中,查看索引数据。
POST elastic_blog/_search
详细操作方法请参见查看数据同步结果。
语言客户端
通过Elasticsearch提供的客户端,您可以将数据采集与自定义应用程序代码集成。这些客户端是抽象出数据采集低层细节的库,使您能够专注于特定应用程序的实际工作。目前Elasticsearch支持多种客户端语言,包括Java、JavaScript、Go、.NET、PHP、Perl、Python和Ruby等,更多支持的客户端语言以及您所选语言的详细信息和代码示例,请参见官方支持的Elasticsearch客户端。
如果您的应用程序所使用的语言不在官方支持的客户端语言中,可以在社区贡献的客户端中查找相关文档。
Kibana开发工具
推荐您使用Kibana开发控制台开发并调试Elasticsearch请求。Kibana开发工具公开了通用的Elasticsearch RESTful API的全部功能,同时抽象出了底层HTTP请求的技术细节。您可以使用Kibana开发工具,将原始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"
}
除了Kibana开发工具以外,您也可以使用其他工具,通过RESTful API与Elasticsearch通信并采集文档。例如curl是一款经常使用的工具,用于Elasticsearch请求的开发、调试或与自定义脚本集成。
总结
将数据采集到Elasticsearch服务的方法不胜枚举。您需要根据特定用例、需求和环境,选择合适的方法或工具来采集数据。
Beats提供了一种方便、轻量级的开箱即用型解决方案,可以从许多不同的来源采集数据。与Beats封装在一起的模块为许多常见数据库、操作系统、容器环境、Web服务器、缓存等提供了数据获取、解析、索引和可视化的配置。通过这些模块,可以实现五分钟将数据制作成仪表板进行展示。因为Beats是轻量型的,所以非常适合资源受限的嵌入式设备,例如IoT设备或防火墙。
Logstash是一种灵活的工具,可用于读取、转换和采集数据,提供了大量的过滤器、输入和输出插件。如果Beats的功能对于某些用例来说还不够,那么一种常见的架构模式是使用Beats来收集数据,并通过Logstash做进一步处理,然后再采集到Elasticsearch中。
当您需要直接从应用程序采集数据时,建议使用官方支持的客户端库。
当您需要对Elasticsearch请求进行开发或调试时,建议您使用Kibana开发工具。