那么,ELK 到底是什么呢?“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
先前,数据采集的工作是由Logstash来完成的,但是Logstash消耗性能过多,只用来采集工作着实有点大材小用.2015年,Elastic公司引入轻量级的数据收集框架Beats来协同Logstash,而Logstash用来做数据转换和格式化.
Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件
2.2.1 索引(index)
索引(index)是Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。
可以把索引看成关系型数据库的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。
Elasticsearch可以把索引存放在一台机器或者分散在多台服务器上,每个索引有一或多个分片(shard),每个分片可以有多个副本(replica。
2.2.2 文档(Document)
存储在Elasticsearch中的主要实体叫文档(document)。用关系型数据库来类比的话,一个文档相当于数据库表中的一行记录。
Elasticsearch和MongoDB中的文档类似,都可以有不同的结构,但Elasticsearch的文档中,相同字段必须有相同类型。
文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫多值字段(multivalued)。
每个字段的类型,可以是文本、数值、日期等。字段类型也可以是复杂类型,一个字段包含其他子文档或者数组。
2.2.3 映射(mapping)
所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做 映射(mapping)。一般由用户自己定义规则。
2.2.4 文档类型
在Elasticsearch中,一个索引对象可以存储很多不同用途的对象。例如,一个博客应用程序可以保存文章和评论。
每个文档可以有不同的结构。
不同的文档类型不能为相同的属性设置不同的类型。例如,在同一索引中的所有文档类型中,一个叫title的字段必须具有相同的类型。
2.2.5 分片和副本
为了将数据添加到Elasticsearch,我们需要索引(index)——一个存储关联数据的地方。实际上,索引只是一个用来指向一个或多个分片(shards)“逻辑命名空间(logical namespace).
一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。
我们需要知道是分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。应用程序不会和它直接通信。
分片可以是主分片(primary shard)或者是复制分片(replica shard)。
索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。
当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。
本文选择在Ubunto18.04中安装es,与windows同理,主要是为了后面方便es集群的建立.虚拟机的安装使用在这里就不赘述了.
2.3.1 下载
Elasticsearch 6.8.4
如果想用xshell等远程工具,可以先开启ssh服务
# 更新源
sudo apt-get update
# 安装ssh服务
sudo apt-get install openssh-server
# 检测启动
ps -e | grep ssh
2.3.2 解压
tar -xvf elasticsearch-6.8.4.tar.gz
2.3.4 安装JDK
sudo apt-get install openjdk-8-jdk
2.3.4 修改elaticsearch.yaml配置
# ---------------------------------- Network -----------------------------------## Set the bind address to a specific IP (IPv4 or IPv6):#network.host: 192.168.68.132 #本机ip## Set a custom port for HTTP:#http.port: 9200## For more information, consult the network module documentation.
2.3.5 启动
./bin/elasticsearch
在浏览器中打开:192:168:68:132:9200
2.3.6 错误解决
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
suod vim /etc/sysctl.conf # 在后面添加vm.max_map_count=262144 sudo /sbin/sysctl -p 生效
由于ES官方并没有为ES提供界面管理工具,仅仅是提供了后台的服务。elasticsearch-head是一个为ES开发的一个页 面客户端工具,其源码托管于GitHub:mobz/elasticsearch-head
Head有多种安装方式,可自行百度进行安装,本文仅介绍一种快捷简单的安装方式:chrome浏览器插件安装:
能访问google应用商店的可在商店中直接搜索head,即可进行添加安装.
或者从head的github中下载head的crx拓展进行本地安装:mobz/elasticsearch-head
安装完成后就可将地址输入对elasticsearch进行后台操作
ES支持RESTFUL风格的请求操作,我们可以选择在head中的复合查询中完成以下简单操作,es支持多种复杂的操作,本文篇幅有限,仅展示几个简单操作,更多复杂操作将之后在其他文章中展示.
2.5.1 建立索引
PUT test
2.5.2 删除索引
DELETE test
2.5.3 获取索引信息
GET test
2.5.4 添加数据
PUT test/user/0001{
"id":1001,
"name":"张三",
"age":20,
"sex":"男" }
2.5.5 更新数据(覆盖更新)
PUT test/user/0001{
"id":1001,
"name":"张三",
"age":20,
"sex":"女" }
2.5.6 删除数据
DELETE test/user/1001
2.5.7 查询数据
GET test/user/_search # 返回多条用户信息