Elasticsearch is a search engine based on Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents. Elasticsearch is developed in Java and is released as open source under the terms of the Apache License. Official clients are available in Java, .NET (C#), PHP, Python, Apache Groovy, Ruby and many other languages.ios
Elasticsearch是一个基于Lucene的开源搜索服务,一个分布式多用户能力的全文搜索引擎,是当前流行的企业级搜索引擎,设计用于云计算中,可以达到准实时搜索。ELK是ElasticSearch,Logstash,Kibana的缩写,分别提供搜索,数据接入和可视化功能,构成了Elastic的应用栈。数据库搜索引擎有Elastic,Solr和Splunk等。web
Elastic数据库
准实时(NRT)数组
Elasticsearch是一个准实时性的搜索平台,从数据索引到数据能够被搜索存在必定的时延。ruby
索引(Index)服务器
索引是有共同特性的文档的集合,索引有本身的名字,能够对索引执行搜索,更新,删除等操做。架构
类型(Type)框架
每一个索引能够包含一个或者多个类型,类型能够看做一个索引数据的逻辑分组,一般咱们会把拥有相同字段的文档定义为同一个类型。分布式
文档(Document)ide
文档是索引信息的基本单元。Elastic中文档表现为JSON对象,文档物理存贮在索引中,并须要被制定一个类型。由于表现为JSON, 很天然的,文档是由一个个的字段(Feilds)组成,每一个字段是一个名值对(Name Value Pair)
评分(score)
Elastic是基于Lucene构建的,因此搜索的结果会有一个打分。来评价搜索结果和查询的相关性。
数据接入和获取
Elastic栈使用Logstash和Beats来进行数据的消化和获取。
Logstash用jruby实现,相似于一个数据管道,把输入的数据进行处理,变形,过滤,而后输出到其它地方。Logstash 设计了本身的 DSL,包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字段引用等。Logstash的数据管道包含三个步骤,Input,Filter和Output,每一步均可以经过plugin来扩展。另外Input和Output还支持配置Codecs,完成对输入输出数据的编解码工做。
Logstash支持的常见的Input包含File,syslog,beats等。Filter中主要完成数据的变形处理,能够增删改字段,加标签,等等。做为一个开源软件,Output不单单支持ElasticSearch,还能够和许多其它软件集成和目标,Output能够是文件,graphite,数据库,Nagios,S3,Hadoop等。
在实际运用中,logstash 进程会被分为两个不一样的角色。运行在应用服务器上的,尽可能减轻运行压力,只作读取和转发,这个角色叫作 shipper;运行在独立服务器上,完成数据解析处理,负责写入 Elasticsearch 的角色,叫 indexer。
logstash 做为无状态的软件,配合消息队列系统,能够很轻松的作到线性扩展。Beats是 Elastic 从 packetbeat 发展出来的数据收集器系统。beat 收集器能够直接写入 Elasticsearch,也能够传输给 Logstash。其中抽象出来的 libbeat,提供了统一的数据发送方法,输入配置解析,日志记录框架等功能。
Kibana数据展示和可视化
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,能够经过各类图表进行高级数据分析及展现。
架构
Elastic Stack
ELK是一套栈,Logstash提供数据的消化和获取,Elasticsearch对数据进行存储,索引和搜索,而Kibana提供数据可视化和报表的功能。