ELK概述
ELK实际上是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。
用Elasticsearch作为后台数据的存储,kibana用来前端的报表展示。Logstash在其过程中担任搬运工的角色,它为数据存储,报表查询和日志解析创建了一个功能强大的管道链。
ElasticSearch介绍
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
- 它提供了强大的搜索功能,可以实现类似百度、谷歌等搜索。
- 可以搜索日志或者交易数据,用来分析商业趋势、搜集日志、分析系统瓶颈或者运行发展等等
- 可以提供预警功能(持续的查询分析某个数据,如果超过一定的值,就进行警告)
- 分析商业信息,在百万级的大数据中轻松的定位关键信息
首先介绍几个概念:
集群(Cluster):包含一个或多个具有相同cluster.name的节点.
- 集群内节点协同工作,共享数据,并共同分担工作负荷。
- 由于节点是从属集群的,集群会自我重组来均匀地分发数据.
- cluster Name是很重要的,因为每个节点只能是群集的一部分,当该节点被设置为相同的名称时,就会自动加入群集。
- 集群中通过选举产生一个mater节点,它将负责管理集群范畴的变更,例如创建或删除索引,添加节点到集群或从集群删除节点。master 节点无需参与文档层面的变更和搜索,这意味着仅有一个 master 节点并不会因流量增长而成为瓶颈。任意一个节点都可以成为 master 节点。我们例举的集群只有一个节点,因此它会扮演 master 节点的角色。
- 作为用户,我们可以访问包括 master 节点在内的集群中的任一节点。每个节点都知道各个文档的位置,并能够将我们的请求直接转发到拥有我们想要的数据的节点。无论我们访问的是哪个节点,它都会控制从拥有数据的节点收集响应的过程,并返回给客户端最终的结果。这一切都是由 Elasticsearch 透明管理的
节点(Node):一个节点是一个逻辑上独立的服务,可以存储数据,并参与集群的索引和搜索功能, 一个节点也有唯一的名字,群集通过节点名称进行管理和通信.
分片(Shard):当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。 当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。
- 分片是一个独立的Lucene实例,并且它自身也是一个完整的搜索引擎。
- 文档存储并且被索引在分片中,但是我们的程序并不会直接与它们通信。取而代之,它们直接与索引进行通信的
- 把分片想象成一个数据的容器。数据被存储在分片中,然后分片又被分配在集群的节点上。当你的集群扩展或者缩小时,elasticsearch 会自动的在节点之间迁移分配分片,以便集群保持均衡
- 分片分为 主分片(primary shard) 以及 从分片(replica shard) 两种。在你的索引中,每一个文档都属于一个主分片
- 从分片只是主分片的一个副本,它用于提供数据的冗余副本,在硬件故障时提供数据保护,同时服务于搜索和检索这种只读请求
- 索引中的主分片的数量在索引创建后就固定下来了,但是从分片的数量可以随时改变。
- 一个索引默认设置了5个主分片,每个主分片有一个从分片对应
副本(Replia):为提高查询吞吐量或实现高可用性,可以使用分片副本。 副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。 当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。
文档(Document):文档是存储数据信息的基本单元,使用json来表示(类似于关系型数据库中的一条记录)。索引只是一个 逻辑命名空间,它指向一个或多个分片(shards),内部用Apache Lucene实现索引中数据的读写
索引(Index):索引是一类文档的集合,所有的操作比如索引(索引数据)、搜索、分析都是基于索引完成的(类似于关系型数据库中的database)。
类型(Type):类型可以理解成一个索引的逻辑分区,用于标识不同的文档字段信息的集合。但是由于ES还是以索引为粗粒度的单位,因此一个索引下的所有的类型,都存放在一个索引下。这也就导致不同类型相同字段名字的字段会存在类型定义冲突的问题。(类似于关系型数据库中的表)。
映射(Mapping):相当于数据库中的schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以自动根据数据创建。
Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
ElasticSearch部署安装教程
Elasticsearch安装
- 安装java8,这里就不多介绍了
- 创建elk用户,终端下执行useradd elk
- 切换到elk用户,下载安装包:https://www.elastic.co/downloads/elasticsearch(建议安装v2.3.4,由于elasticsearch-jdbc最高支持到2.3.4,elasticsearch-jdbc是一个mysql迁移到elasticsearch的工具)
- 解压安装包,进入elasticsearch目录
- 运行Elasticsearch,执行以下命令可在前台启动./bin/elasticsearch
- 打开另一个终端进行测试,curl 'http:
{ "name" : "node-1", "cluster_name" : "my-application", "cluster_uuid" : "Qg6ObzB3RlCUheO9MDytLw", "version" : { "number" : "6.1.1", "build_hash" : "bd92e7f", "build_date" : "2017-12-17T20:23:25.338Z", "build_snapshot" : false, "lucene_version" : "7.1.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Elasticsearch默认http端口为9200,如果想修改host和port,进入配置文件中config/elasticsearch.yml修改network.host和network.port即可
安装问题
问题1:
ERROR: bootstrap checks failed max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决办法:
切换到root用户,编辑limits.conf 添加类似如下内容 vi /etc/security/limits.conf
添加如下内容: * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
修改后需要重启系统,不然配置无法生效
问题2:
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决办法:
切换到root用户修改配置sysctl.conf vi /etc/sysctl.conf 添加下面配置: vm.max_map_count=655360 并执行命令: sysctl -p 然后,重新启动elasticsearch,即可启动成功。
问题3:
can not run elasticsearch as root
解决办法:
不能以root用户启动,切换到elk用户启动,如果非要用root启动,修改配置文件Des.insecure.allow.root=true
ElasticSearch推荐插件安装
安装head
head插件可以用来快速查看elasticsearch中的数据概况以及非全量的数据,也支持控件化查询和rest请求,但是体验都不是很好。
一般就用它来看各个索引的数据量以及分片的状态。
进入elasticsearch目录
执行bin/plugin install mobz/elasticsearch-head即可安装
访问http://172.16.4.53:9200/_plugin/head/查看效果如下图所示
Elasticsearch使用方法在之后的文档中阐述。
Logstash介绍
Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(ELK场景下存储库当然是 Elasticsearch。)
Logstash部署安装
下载Logstash安装包:https://www.elastic.co/cn/downloads/logstash
解压安装包
logstash如何使用在之后的文档中会有阐述
Kibana介绍
Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。
Kibana部署安装过程
kibana安装
下载安装包:https://www.elastic.co/downloads/past-releases/kibana-4-6-0(建议安装4.6.0版本,太高版本仅支持elasticsearch6.0版本,版本太低用户体验不好)
解压安装包
启动kibana,执行bin/kibana即可
Kibana推荐插件安装
安装sense
sense可以方便的执行rest请求,但是中文输入的体验不是很好。(elasticsearch6.0和kibana6.0以上集成了sense可以不用下载该插件,也已经不提供该插件下载)
需要在kinaba端安装进行安装,插件会自动安装到kibana的应用菜单中
进入kibana目录,执行bin//kibana plugin --install elastic/sense
访问http://172.16.4.53:5601/app/sense查看效果如下图所示
kibana的使用方式在之后的文档中会有阐述