目录
2、配置elasticsearch环境(在node1和node2上)
3、部署elasticsearch软件(在node1和node2上)
前言
在规模较大的企业场景中,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。所以企业中都会建立日志服务器,调高安全性、集中化管理,但是相应的大量的日志文件导致对日志分析困难。而今天介绍的ELK就是为了解决这一问题。
一、ELK日志分析系统简介
1、日志处理的步骤
(1)将APP servers的日志进行集中化管理到Logstash agent。
(2)将日志格式化(Logstash)并输出到Elasticsearch cluster。
(3)对格式化后的数据进行索引和存储(Elasticsearch)。
(4)前端数据的展示(Kibana)。
(5)可以在线查看界面化展示。
2、ELK日志分析系统三部分
(1)ELK是由Elasticsearch、Logstash、Kiban三个开源软件的组合。
(2)Logstash 收集APP server产生的log,然后存放到Elasticsearch集群节点中,kibana从Elasticsearch集群节点中查询数据生成图表,再返回给Brower。
APPServer集群→logstash Agent采集器→ElasticSearch Cluster→Kibana Server→Browser
3、日志服务器
(1)提高安全性
(2)集中存放日志(缺陷:对日志的分析困难)
二、Elasticsearch介绍
1、Elasticsearch概述
(1)提供了一个分布式多用户能力的全文搜索引擎;
(2)是一个基于Lucene的搜索服务器;
(3)基于restful web接口;
(4)使用java开发;
(5)作为apache许可条款下的开放源码发布,是第二流行的企业搜索引擎;
(6)被设计用于云计算中,能够达到实时搜索、稳定、可靠、快速、安装实用方便的需求。
2、Elasticsearch的概念
(1)接近实时(NRT)
Elasticsearch是一个接近即时的搜索平台,从索引一个文档知道这个文档能够被搜索到的过程中有一个轻微的延迟(通常是1秒)
(2)集群(cluster)
由一个及其以上的节点组织在一起,它们共同持有整个数据,并一起提供索引和搜索功能,其中一个节点为主节点,这个节点是可以通过选举产生,并提供跨节点的联合索引和搜索的功能,集群有一个唯一标识的名字,默认是elaticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中。
因此,要确保集群的唯一性,在不同环境中使用不同的集群名字,一个集群只可以有一个节点,建议在配置elasticsearch时,配置成集群模式。
(3)节点(node)
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能,像集群一样,节点之间可是通过名字来标识区分,默认是在节点启动时随机分配的字符名。当然,你可以自己定义,该名字很重要,起到在集群中定位到对应的节点。
节点可以通过指定集群名字来加入到集群中,默认情况下,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能够自动发现对方,他们将会自动组建一个名为elastisearch的集群。
(4)索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引、一个产品目录的索引、还有一个订单数据的索引。一个索引用一个名字来标识(必须全部是小写字母组合),并且当我们要对相应的索引中的文档进行索引、收缩、更新和删除的时候,都要用到这个名字。在一个集群中,可以定义多个索引。(索引相对于关系型数据库的库)
(5)类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类分区,其寓意完全由你来定义。通常,会为具有一组共同字段的文档定义一个类型。比如:我们假设运营一个博客平台并且将所有的数据存储到一个索引中,在这个索引中,你可以为用户数据定义一个类型,为博客数据定义一个类型,也可以为评论数据定义另一个类型。(类型相对于关系型数据库的表)
(6)文档(Document)
一个文档是一个可被索引的基础信息单元。比如:你可以拥有一个客户的文档,某一个产品的文档;文档以JSON(Javascript Object Notation)格式来表示,json是一个通用的互联网数据交互模式。在一个index/type内,你可以存储任意多的文档。注意:虽然一个文档在物理上位于一个索引内,但是实际上一个文档必须在一个索引内可以被索引和分配一个类型。(文档相对于关系型数据库的列)
(7)分片和副本 (shards & replicas)
在实际情况下,索引存储的数据可能超过单个节点的硬件设置。比如十亿个文档需要1TB空间存储,可能不适合存储在单个节点上,读写被限制在单个节点;从单个节点搜索请求也太慢了。为了解决这个问题,elasticsearch集群提供将索引分割开,进行分片的功能。当创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中的任何节点上。
3、采用分片
(1)可以进行水平分割横向扩展,增大存储量;
(2)分布式并行跨分片操作,提高性能和吞吐量。
4、开启分片副本的主要原因
(1)高可用性,以应对分片或者节点故障,处于这个原因,分片副本要在不同节点上;
(2)提高I/O性能,增大吞吐量,搜索可以并行在所有副本执行。
总之,每个索引可以被分成多个分片,一个索引也可以被复制0次或者多次。一旦复制了,每个索引就有了主分片(可以作为复制源的原始分片)和复制分片(主分片的拷贝)之分。分片和副本的数量可以在索引创建的时候指定,在索引创建之后,你可以在任何时候动态改变副本的数量,但是你事后无法改变分片的数量。默认情况下,Elasticsearch中的每个索引被分片为5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点的情况下,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片。
三、Logstash介绍
1、Logstash概述
(1)一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出;
(2)工作思路:数据输入(collect)、数据加工(如过滤、改写等enrich)以及数据输出(transport);
(3)由LRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上;
(4)不同于分离的代理端(agent)或主机端(server),Logstash可配置单一的代理端(agent)与其他开源软件结合,以实现不同的功能。
2、Logstash主要组件
(1)Shipper:日志收集
负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent