共计 2734 个字符,预计需要花费 7 分钟才能阅读完成。
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,你能够笼罩一整套残缺的,从全局性能监控到具体代码级别的排障和解决问题的过程,并且应用起来要 比很多现有的计划更加高效和便捷。