参考文档:Elasticsearch官网传送门 博客文章传送门
elk 是什么 ?
Elastic Stack(旧称ELK Stack),是一种能够从任意数据源抽取数据,并实时对数据进行搜索、分析和可视化展现的数据分析框架。(hadoop同一个开发人员)
java 开发的开源的全文搜索引擎工具
基于lucence搜索引擎的
采用 restful - api 标准的
高可用、高扩展的分布式框架
实时数据分析的
2、为什么要用elk?
服务器众多,组件众多,日志众多
发现问题困难,技能要求高
业务场景:《实时日志分析展现》
日志主要包括系统日志、应用程序日志和安全日志。
系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。
当务之急我们使用集中化的日志管理,例如:开源的 syslog ,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep 、 awk和 wc 等 Linux 命令能实现检索和统计,
但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
开源实时日志分析 ELK 平台能够完美的解决我们上述的问题, ELK 由 ElasticSearch 、 Logstash 和 Kiabana 三个开源工具组成。
通过一内容的简单了解,发现elk是一个框架,包含从数据抽取,到数据查询,到可视化工具,扩展包的一整套内容
首先我们来了解一下Elasticsearch,通过Elasticsearch的官方文档了解
Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎。Logstash和Beats有助于收集,聚合和丰富您的数据并将其存储在Elasticsearch中。Kibana使您能够以交互方式探索,可视化和分享数据洞察,并管理和监控堆栈。Elasticsearch是索引,搜索和分析魔术发生的地方。
Elasticsearch为所有类型的数据提供实时搜索和分析。无论您是结构化文档还是非结构化文本,数字数据或地理空间数据,Elasticsearch都可以以支持快速搜索的方式有效地存储和索引它。您可以远远超出简单的数据检索和聚合信息,以发现数据中的趋势和模式。随着您的数据和查询量的增长,Elasticsearch的分布式特性使您的部署能够与其一起无缝地增长。
虽然不是每个问题都是搜索问题,但Elasticsearch提供了处理各种用例数据的速度和灵活性:
Elasticsearch是一个分布式文档存储。Elasticsearch不是将信息存储为列数据行,而是存储已经序列化为JSON文档的复杂数据结构。当群集中有多个Elasticsearch节点时,存储的文档将分布在群集中,并且可以从任何节点立即访问。
存储文档时,它会在1秒内实时索引并完全可搜索。Elasticsearch使用称为倒排索引的数据结构,支持非常快速的全文搜索。倒排索引列出任何文档中出现的每个唯一单词,并标识每个单词出现的所有文档。
索引可以被视为优化的文档集合,每个文档都是字段的集合,这些字段是包含数据的键值对。默认情况下,Elasticsearch会为每个字段中的所有数据编制索引,并且每个索引字段都具有专用的优化数据结构。例如,文本字段存储在反向索引中,数字和地理字段存储在BKD树中。使用每个字段的数据结构来汇编和返回搜索结果的能力使Elasticsearch如此之快。
Elasticsearch还具有无模式的能力,这意味着可以索引文档而无需显式指定如何处理文档中可能出现的每个不同字段。启用动态映射后,Elasticsearch会自动检测并向索引添加新字段。这种默认行为使您可以轻松索引和浏览数据 - 只需开始索引文档,Elasticsearch将检测并将布尔值,浮点和整数值,日期和字符串映射到相应的Elasticsearch数据类型。
但是,最终,希望您比Elasticsearch更了解您的数据以及您如何使用它。您可以定义规则来控制动态映射并显式定义映射,以完全控制字段的存储和索引方式。
定义自己的映射使您能够:
geo_point
和geo_shape
无法自动检测的数据类型为不同目的以不同方式索引相同字段通常很有用。例如,您可能希望将字符串字段索引为全文搜索的文本字段和用于排序或聚合数据的关键字字段。或者,您可以选择使用多个语言分析器来处理包含用户输入的字符串字段的内容。
在索引期间应用于全文字段的分析链也在搜索时使用。查询全文字段时,查询文本在索引中查找术语之前会进行相同的分析。
一种索引方法,用来存储在全文检索下某个单词在一个/组文档中的存储位置。
常规索引,文档->关键词,费时,得把一个文档全部遍历一遍
倒排索引,关键词->文档,全文搜索过程如下:
1、构建单词集合:
先对文档进行分词,
然后筛选过滤,
得到单词集合,并编号id
2、构建文档集合:文档id
3、建立单词、文档矩阵, 得出倒排索引,如:
乔布斯:{(文档1,<位置3,位置11>),2次}, {(文档2,<位置7>),1},{(文档3,<位置9>),1}
苹果:{(文档1,<位置16>),1次}, {(文档5,<1>),1次}
虽然您可以将Elasticsearch用作文档存储并检索文档及其元数据,但真正的强大功能来自于能够轻松访问基于Apache Lucene搜索引擎库构建的全套搜索功能。
Elasticsearch提供了一个简单,一致的REST API,用于管理集群,索引和搜索数据。出于测试目的,您可以直接从命令行或通过Kibana中的Developer Console轻松提交请求。从您的应用程序中,您可以使用 Elasticsearch客户端 作为您选择的语言:Java,JavaScript,Go,.NET,PHP,Perl,Python或Ruby。
Elasticsearch REST API支持结合了两者的结构化查询,全文查询和复杂查询。结构化查询类似于可以在SQL中构造的查询类型。例如,您可以搜索索引中的gender
和age
字段,并按字段employee
对匹配项进行排序hire_date
。全文查询查找与查询字符串匹配的所有文档,并按相关性对其进行返回 - 与搜索字词的匹配程度。
除了搜索单个术语外,您还可以执行短语搜索,相似性搜索和前缀搜索,并获取自动填充建议。
Elasticsearch始终可用,可根据您的需求进行扩展。它通过自然分配来实现这一点。您可以将服务器(节点)添加到群集以增加容量,Elasticsearch会自动在所有可用节点上分配数据和查询负载。无需彻底检查您的应用程序,Elasticsearch了解如何平衡多节点群集以提供规模和高可用性。节点越多,越好。
这是如何运作的?在封面下,Elasticsearch索引实际上只是一个或多个物理分片的逻辑分组,其中每个分片实际上是一个自包含的索引。通过跨多个分片在索引中分发文档,并将这些分片分布在多个节点上,Elasticsearch可以确保冗余,这可以防止硬件故障,并在节点添加到群集时提高查询容量。随着集群的增长(或收缩),Elasticsearch会自动迁移分片以重新平衡集群。
有两种类型的分片:原色和副本。索引中的每个文档都属于一个主分片。副本分片是主分片的副本。副本提供数据的冗余副本,以防止硬件故障并增加服务读取请求(如搜索或检索文档)的容量。
索引中的主分片数在创建索引时是固定的,但副本分片的数量可以随时更改,而不会中断索引或查询操作。
关于分片大小和为索引配置的主分片数量,存在许多性能考虑因素和折衷方案。分片越多,维护这些索引的开销就越大。分片大小越大,当Elasticsearch需要重新平衡群集时,移动分片所需的时间越长。
查询大量小分片使得每个分片的处理速度更快,但查询意味着更多的开销,因此查询较少数量的较大分片可能会更快。简而言之......这取决于。
作为一个起点:
确定用例的最佳配置的最佳方法是 使用您自己的数据和查询进行测试。
CCR提供了一种自动将索引从主群集同步到可作为热备份的辅助远程群集的方法。如果主群集出现故障,则辅助群集可以接管。您还可以使用CCR创建辅助群集,以便在地理位置接近用户时提供读取请求。
跨群集复制是主动 - 被动的。主群集上的索引是活动的leader索引并处理所有写入请求。复制到辅助群集的索引是只读关注者。
与任何企业系统一样,您需要工具来保护,管理和监控您的Elasticsearch集群。集成到Elasticsearch中的安全性,监控和管理功能使您可以将Kibana 用作管理集群的控制中心。类似的特征数据汇总和指标生命周期管理 帮助您明智随着时间的推移管理您的数据。