Elasticsearch 以前叫 Elastic Search。顾名思义,就是“弹性的搜索”。很明显, 它一开始是围绕着搜索功能,打造了一个分布式搜索引擎,底层是基于开源的搜索引擎库 Lucene,是由 Java 语言编写的,项目大概是 2010 年 2 月份在 Github 正式落户的。
Lucene
什么是Lucene?
Lucene 是一个用 Java 编写的非常古老的搜索引擎工具 包,用来构建倒排索引(一种数据结构)和对这些索引进行检索,从而实现全文检索功能。
缺点
1、仅仅是一个基础类库。
2、没有考虑高并发分布式场景。
3、不完善的api结构:想在自己的程序里面使用 Lucene,还是需要做很 多工作,并且涉及很多搜索原理和索引数据结构的知识,这就给我们带来了不少挑战。 所以,Lucene 的上手时间一般都比较长。
Elasticsearch
诞生背景
2004 年,有一个以色列小伙子,名字叫谢伊·班 农( Shay Banon),他成亲不久来到伦敦,因为当时他的夫人正好在伦敦学厨师。初 来乍到,也没有找到工作,于是班农就打算写一个叫作 iCook 的小程序来管理和搜索菜 谱,一来练练手,方便找工作;二来这个小工具还可以给其夫人用。
班农在编写 iCook 的过程中,使用了 Lucene,感受到了直接使用 Lucene 开发 程序的各种暴击和痛苦,于是他在 Lucene 之上,封装了一个叫作 Compass 的程序框 架,与 Hibernate 和 JPA 等 ORM 框架进行集成,通过操作对象的方式来自动地调用 Lucene 以构建索引。方便地实现对‘领域对象’进行索引的创建,并实现‘字 段级别’的检索,以及实现‘全文搜索’功能。可以说,Compass 大大简化了给 Java 程序添加搜索功能的开发。Compass 开源出来,变得很流行。
Compass 编写到 2.x 版本的时候,社区里面出现了更多需求,比如需要有处理 更多数据的能力以及分布式的设计。班农发现只有重写 Compass ,才能更好地实现这 些分布式搜索的需求,于是 Compass 3.0 就没有了,取而代之的是一个全新的项目, 也就是 Elasticsearch。”
优点
Elasticsearch的优点就是对lucene的缺点的完善。
1、Elasticsearch 作为一个独立的搜索服务器,提供了非常方便的搜索功能。
2、Elasticsearch 基于分片和副本的方式实现了一个分布式的 Lucene Directory,再结合 Map-reduce 的理念,实现了一个简单的搜索请求分发合并的策略, 能轻松化解海量索引和分布式高可用的问题。
3、完善的API结构:用户完全 不用关心底层 Lucene 的细节,只需要通过标准的 Http+RESTful 风格的 API,就可以 进行索引数据的增删改查。数据的输入输出采用 JSON 格式,以文档和面向对象的方式, 这样就能非常方便地理解和表达领域数据。
如今,Elasticsearch 基本上已经是搜索引擎市场排名第一的产品了,从 DB- Engines 网站的排名可以看到,Elasitcsearch 基本上是一骑绝红尘。
https://db-engines.com/en/ran...
ELK 横空出世
logstash
是什么? Logstash 是一个用 JRuby 写的开源的日志处理工具。
怎么做?主要特点是基于灵活的Pipeline 管道架构来处理数据。是将数据放进一个管道内进行处理,并且就跟真正的自来水管一样,管道由一截一截管子组成,每一个小管代表着一个数据处理的流程,每一个流程只做一件事情,然后可以根据数据的处理需要,选择多个不同类型的管子灵活组装。
为什么?主要用于我们的日志收集。
Kibana
是什么?:Kibana 的名字是俩个水果的名字的组合(Kiwi+Banana);用于日志的搜索和查看,还加上了一些统计展示功能。
为什么?Logstash 自带的 UI 查询日志的界面有点简陋,于是有一个叫作 Rashid
Khan 的运维工程师表示完全忍不了了,用 PHP 写了一个叫作 Kibana 的程序,一个
更好看和更好用的前端界面。PHP 写完一版,他又用 Ruby 写一版,后面又用
AngularJS 写了一版。
怎么做的?kibana是对Elasticsearch的API的封装,通过调用Elasticsearch提供的Restful API功能实现目的。
于是乎,ELK 横空出世(Elasticsearch、Logstash 和 Kibana 这三个产品的首字
母缩写),风靡了整个运维界。
Elastic Stack 平台的魅力
Beat
Elastic 后面又引入了 Beats 家族。这是一系列非常轻量级的数据收集端,我给 29 > Elasticsearch 的前世今生 你介绍几个比较典型的,比如:
Packetbeat
可以实时监听网卡流量,并实时解析网络协议数据,可用来做 NPM 网络数据分析;
Metricbeat
可以用来收集服务器,以及服务器上部署的应用服务的各项监控指标数据,这样就 可以替代 Zabbix 等传统的监控软件,来做服务器的性能指标分析;
Auditbeat
可以实时收集服务器的行为事件,用于安全方面的入侵检测和安全日志审计分析;
Winlogbeat
用于 Windows 平台的事件日志收集;
- Filebeat 用于日志文件的收集等。
Elasticsearch、Logstash、Kibana、Beats ,这几个放在一起,就叫作 Elastic Stack。
这样 Elastic Stack 这一个平台就可以同时做到:
- 日志分析
- 性能指标分析
- 安全日志分析
- APM 应用性能分析
- NPM 网络性能分析
- 网站站内搜索
- 企业级搜索
- 代码搜索
- 实时 BI 业务分析
- SIEM 解决方案
- 终端设备安全
- ......
试想一下:
在一个风和日丽的下午,你手机上收到一条告警短信,于是点击链接,打开
Kibana 的监控仪表盘,发现某台服务器的 CPU 达到 100% 了。
于是,你顺手点击过滤这台服务器的所有相关信息,可以看到相关的日志显示,是
这台服务器上面部署的某一个业务服务的 QPS 有显著下降,然后过滤到这个业务的日
志,发现有很多异常的日志信息,前端 Nginx 代理日志还显示有很多请求被拒绝,看样
子是后端的微服务处理能力达到瓶颈。
这个时候,继续点击 APM 的分析面板,切换到事务和会话分析界面,看到有很多
数据库链接处于开启状态。你点击查看调用代码,立马就找到了性能瓶颈的原因,原来
是某个类的某个方法调用 MySQL 却没有及时释放链接造成了泄露,于是修改这行代码,提交上线,问题解决。然后,你可以若无其事地继续浏览相亲网站啦。这是一个假想的例子,但是可以看到,基于 Elastic Stack ,你可以覆盖一整套完整的,从全局性能监控到具体代码级别的排障和解决问题的过程,并且使用起来要 比很多现有的方案更加高效和便捷。