Elasticsearch日志分析系统

                          Elasticsearch日志分析系统html

                                              做者:尹正杰前端

版权声明:原创做品,谢绝转载!不然将追究法律责任。html5

 

 

 

 

一.什么是Elasticsearch
  一个采用Restful API标准的高扩展性的和高可用性的实时数据分析的全文搜索工具。高扩展性体如今Elasticsearch添加节点很是简单,基本新的节点无需作复杂的配置,接入Elasticsearch的集群就能够了,自动会被发现;高可用体如今Elasticsearch它是分布式的,每一个节点它都有备份,因此down一两个节点不会出现任何问题的;实时数据分析体如今Elasticsearch它是试试的搜索平台,同时它支持PB级的这种大数据的搜索能力,从索引的一个文档到这个文档能被搜索到的时间只有一个轻微的延迟,一般是一秒,因此说它的实时性是很是高的。Elasticsearch是基于P2P的系统。它首先经过广播的机制讯早存在的节点,而后再经过这个多播协议来进行节点间的通讯,同时也支持点对点的交互。
 
二.Elasticsearch的主要概念
 1 Node(节点):  2     单个的装有Elasticsearch服务而且提供故障转移和扩展的服务器。  3 Cluster(集群):  4     一个集群就是由一个或多个node组织在一块儿,共同工做,共同分享整个数据具备负载均衡功能的集群。  5 Document(文档):  6     一个文档是能够被索引的基础信息单元。  7 Index(索引):  8     索引就是一个拥有几分类似特征的文档的集合。  9 Type(类型): 10     一个索引中,你能够定义一种或多种类型。 11 Field(列): 12     Field是Elasticsearchd的最小单位,至关于数据的某一列。 13 Shards(分片): 14     Elasticsearch将索引分红若干份,每一个部门就是一个shard。 15 Replicas(复制): 16     Replicas是索引一份或多份拷贝。

 

 

 

三.Elasticsearch对应数据库的关系java

  咱们知道Elasticsearch是NSQL,是非关系型数据库,它的Index对应关系型数据库(如MySQL)的Database,Type类型对应的就是Table,Document对应的就是Row,而Filed对应的就是Column等等。
 
四.Elasticsearch架构
  这幅图咱们先从下往上看,底层是Gateway,这个gateway就是Elasticsearch支持的索引数据的存储格式。当这个Elasticsearch关闭再启动的时候,它就会从这个gateway里面多去索引数据。图中咱们能够清晰的看到它支持的一些格式,有本地的Loacal FileSystem。还有分布式的Sharad FileSeystem,固然还支持当前比较流行的Hadoop HDFS还有一些亚马逊的S3等等。
  那么接下来Gateway上面这层就是Lucene的框架。这个Elasticsearch就是基于Lucene这个框架而写的。而Lucene又是基于JAVA语言编写的,也就是说若是咱们想要安装es,确定是须要安装Java虚拟机的,而对于不一样的版本对于Java的版本要求也不一致,好比目前最新版本的5.6.x系列要求最低Java版本就是1.8以上哟~
  而在Lucene在往上就是这个Elasticsearch对数据的加工处理方式了。咱们能够看到有建立index的模块,还有搜索的模块以及mapping(定义索引下面type字段的处理规则,好比说索引如何创建,还有索引数据类型等等。至关于这个关系型数据库里的schema。)和River(它是一个运行在Elasticsearch集群内部的一个插件,主要就是用来从外部获取异构数据,而后在Elasticsearch里建立索引,常见的插件有RabbitMQ River还有Twitter River)模块。
  再往上一层的第一块就是Elasticsearch自动发现节点的机制(Discovery),这个Zen是用来实现节点自动发现,还有Master节点选取用的。加入Master出现了故障,不能工做了,那么其余的这个节点会自动选举,而后产生一个新的Master。Scripting这块区域是Elasticsearch的脚本执行功能。有了这个功能就能够很方便对查询出来的数据进行加工处理,它支持mvel,js,python,Etc这样的脚本类型。那么最右边的这个3rd Plugins,它的意思说Elasticsearch支持安装不少第三方的插件(好比:中文分词,状态监控这样的插件等等,插件安装也很是简单)。由于Elasticsearch的社区支持力度是比较大的,因此说会有不少种插件提供给用户使用。这样就会让Elasticsearch使用的就更加的简单方便。
  再往上一层就是正数第二次就是Elasticsearch的交互方式了。外面能够看到有三种协议,Thrift,Memcached和HTTP,默认Elasticsearch是用HTTP协议传输的。
  最顶层就是Elasticsearch的API支持ID模式了,目前RESTFul这样的API接口的标准是很是流行的,因此说Elasticsearch也采用了这种标准,Elasticsearch能够支持JAVA语言,同时JAVA语言也是对Elasticsearch支持度最好的语言。由于Lucenn也是用JAVA开发的。经过JAVA当前最流行的这种开发语言,能够很好的开发处一套工具去管理和操做这个Elasticsearch。
 
 
 五.对比Elasticsearch与Solr
  当前采用Elasticsearch这个搜索引擎的公司特别多,包括有名的Adobe,ebay,微软,Facebook,orange,Mozilla等等。同比跟Elasticsearch这样同性质的工具也有不少,好比说solr和splunk等等。下面有一张2015年8月的搜索引发排行榜:
 
  咱们能够看到Solr排行是第一的,当这个Elasticsearch也是名列前茅,处于第二代位置,它的使用率仍是挺高的。Solr和Elasticsearch都是全文搜索比较火的引擎,他们有什么区别呢? Elasticsearch侧重实时数据分析,solr在这一方面是远不及Elasticsearch的。固然,Solr支持文本格式比Elasticsearch多:好比:html,pdf,word,excel,cvs等等。而Elasticsearch只支持json的格式。因此你们在选择工具的同时,也要根据本身项目的状况去选择。这样才有利于咱们项目的开展。
  Elasticsearch的官网地址:https://www.elastic.co/products/elasticsearch
 
 六.什么是RESTFul
  咱们知道Elasticsearch是彻底基于RESTFul设计风格的全文搜索引擎,包括咱们如今接触到的不少开源软件,其实不少都是基于RESTFul这种风格的。如今很流行邓凯元软件(架构),好比Openstack,它也是RESTFul风格的。接下来咱们就了解一下RESTFul基本知识。
  API:
    Application Programming Interface的缩写,中文意思就是应用程序接口;一个程序有了API以后,程序员和运维人员就能更加方便的经过命令或者是程序去调用和使用它,使用接口其实就是经过这个接口,获取或者修改一些数据。
  XML:
    可扩展标记语言,是一种程序与程序之间传输数据的标记语言;它的内容都是由标签组成的,很是有规律,阅读起来也很是的简洁明了。可是XML也有很多缺点,第一,XML文件格式比较庞大复杂,输出占用带宽;第二,服务端和客户端都要花费大量的代码去解析XML,并且解析这个XML会花费资源和时间;第三,不一样浏览器之间解析XML的方式不一致,须要重复并写不少代码,代码多不容易维护等等。
可是随着互联网的技术(好比微博和微信技术)的不断发展,用户对web应用的交互就愈来愈多了,所以数据交互也愈来愈频繁,若是数据形式仍是以XML的话,那就会很是的复杂和花费时间。因此 XML慢慢开始就废弃了,随之替代它的是另一种更方便简洁的数据形式,即JSON。
  JSON:
    英文JavaScript object notation的缩写,它是一种新型的轻量级数据交换格式;它有不少优势,第一,数据格式比较简单,易于阅读,易于读写;第二,格式是压缩的,占用带宽比较小;第三,易于解析;第四,支持不少种玉玉,包括C,C++,JAVA,Perl,PHP,Python等等(当前流行玉玉都支持);第五点,JSON数据直接能为服务端的代码(程序)使用,能简化服务端以及客户端的代码开发量,这样就利于维护。正是由于这些优势,加上如今这种JS前端技术的不断发展,出现了不少前端JS的一些框架。好比说AngularJS和ExrtJS等等。有了这些成熟的JS框架工具,那么这前端和后端的开发都已经彻底分离了。因此JSON这种数据交换方式就在web开发界被慢慢普及了。
  使用JSON的人愈来愈多,你们都但愿遵循一种风格去设计程序,RESTFul(Representational State Transfer)这种风格就孕育而生了。其实,REST这个词很早就提出来了,在2000年的时候,这个概念有Apache基金会的第一人主席Roy  Fielding,在他的博士论文中第五章就提到过REST这个概念。REST是英文单词Representational State Transfer的缩写,中文意思是“表现层状态转化”,咱们能够把它拆分理解,“表现层”它指的是“资源表现层”,这里的资源就是指网络上的信息(好比说,一段文本,一张图片,一个小电影什么的),那么每个资源它在网络上都有全球惟一标识(URI)。因此说咱们把资源具体呈现出来的这种形式叫作表现层。咱们知道Elasticsearch默认是使用http协议的,而http又是一种无状态(服务端它不会去记录客户端的全部信息和操做,数据的状态它只保存在服务端)的协议,所以,若是这个客户端想要操做这个服务器,必需要经过某些方法(GET,POST,PUT,DELETE),经过这些方法,才能让服务器发生状态转化,而这种转化须要创建在“表现层”之上的。因此咱们称之为表现层状态转化。
 
七.安装Elasticsearch
 
1.操做环境
1 [root@yinzhengjie ~]# cat /etc/redhat-release 
2 CentOS release 6.6 (Final)
3 [root@yinzhengjie ~]# 
4 [root@yinzhengjie ~]# uname -r
5 2.6.32-504.el6.x86_64
6 [root@yinzhengjie ~]# 
7 [root@yinzhengjie ~]# uname -m
8 x86_64
9 [root@yinzhengjie ~]# 

 

2.安装jdk,配置JAVA环境变量
a>.下载Java虚拟机

 b>.卸载旧版本的JAVAnode

 1 [root@yinzhengjie jdk]# java -version                    ----->检查当前版本
 2 java version "1.7.0_65"                                ------>当前版本是1.7
 3 OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)
 4 OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
 5 [root@yinzhengjie jdk]# 
 6 [root@yinzhengjie jdk]# yum -y groupremove java*            ------>卸载相关Java组件
 7 [root@yinzhengjie jdk]# java -version                    ------>再次查看当前Java版本
 8 java version "1.5.0"                                    ------->当前版本是1.5
 9 gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-18)
10 
11 Copyright (C) 2007 Free Software Foundation, Inc.
12 This is free software; see the source for copying conditions.  There is NO
13 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 [root@yinzhengjie jdk]# 
15 [root@yinzhengjie jdk]# yum -y remove java*
16 [root@yinzhengjie jdk]# java -version                    ------->再次查看Java版本应该报错说明卸载成功。
17 -bash: /usr/bin/java: 没有那个文件或目录
18 [root@yinzhengjie jdk]# 

c>.安装Javapython

 1 [root@yinzhengjie ~]# mkdir -pv /yinzhengjie/application/jdk && cd /yinzhengjie/application/jdk
 2 [root@yinzhengjie jdk]# yum -y install lrzsz
 3 [root@yinzhengjie jdk]# rz                            ------>上传咱们已经下载的文件
 4 rz waiting to receive.
 5  zmodem trl+C ȡ
 6 
 7   100%  185289 KB  960 KB/s 00:03:13       0 Errorsr.gz...
 8 
 9 [root@yinzhengjie jdk]# ll
10 总用量 185300
11 -rw-r--r--+ 1 root root 189736377 10月 29 21:45 jdk-8u151-linux-x64.tar.gz
12 [root@yinzhengjie jdk]# 
13 [root@yinzhengjie jdk]# tar xf jdk-8u151-linux-x64.tar.gz 
14 [root@yinzhengjie jdk1.8.0_151]# tail -6 /etc/profile
15 #ADD BY YINZHENGJIE
16 export JAVA_HOME=/yinzhengjie/application/jdk/jdk1.8.0_151
17 export JAVA_BIN=/yinzhengjie/application/jdk/jdk1.8.0_151/bin
18 export PATH=$PATH:$JAVA_HOME/bin
19 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
20 export JAVA_HOME JAVA_BIN PATH CLASSPATH
21 [root@yinzhengjie jdk1.8.0_151]# 
22 [root@yinzhengjie jdk1.8.0_151]# source /etc/profile        ------->从新读取该配置文件
23 [root@yinzhengjie jdk1.8.0_151]# java -version            -------->再一次的检查当前JAVA版本
24 java version "1.8.0_151"                                ------->当前版本为1.8版本,表示安装成功。
25 Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
26 Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
27 [root@yinzhengjie jdk1.8.0_151]#
 
3.安装Elasticsearch
 

b>.源码安装并运行Elasticsearchlinux

 1 [root@yinzhengjie ~]# mkdir -pv /yinzhengjie/application/elasticsearch && cd /yinzhengjie/application/elasticsearch 
 2 [root@yinzhengjie elasticsearch]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.tar.gz
 3 [root@yinzhengjie elasticsearch]# rz
 4 rz waiting to receive.
 5  zmodem trl+C ȡ
 6 
 7   100%   32982 KB 1221 KB/s 00:00:27       0 Errorsr.gz...
 8 
 9 [root@yinzhengjie elasticsearch]# tar xf elasticsearch-5.6.3.tar.gz 
10 [root@yinzhengjie elasticsearch]# useradd yinzhengjie
11 [root@yinzhengjie elasticsearch]# chown yinzhengjie:yinzhengjie elasticsearch-5.6.3 -R
12 [root@yinzhengjie elasticsearch]# cd elasticsearch-5.6.3/bin/
13 [root@yinzhengjie bin]# su yinzhengjie
14 [yinzhengjie@yinzhengjie bin]$ ./elasticsearch -d        ------>用非root用户在后台运行
15 [root@yinzhengjie ~]# lsof -i:9200                    ------>查看服务是否正常启动
16 COMMAND  PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
17 java    5543 yinzhengjie  137u  IPv6  35018      0t0  TCP localhost:wap-wsp (LISTEN)
18 java    5543 yinzhengjie  138u  IPv6  35019      0t0  TCP localhost:wap-wsp (LISTEN)
19 [root@yinzhengjie ~]# 
20 [yinzhengjie@yinzhengjie bin]$  exit 
21 exit
22 [root@yinzhengjie bin]# 
23 [root@yinzhengjie bin]# 
24 [root@yinzhengjie bin]# ps -ef | grep elasticsearch | grep -v grep
25 501        5786      1  4 21:29 pts/0    00:00:17 /yinzhengjie/application/jdk/jdk1.8.0_151/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/yinzhengjie/application/elasticsearch/elasticsearch-5.6.3 -cp /yinzhengjie/application/elasticsearch/elasticsearch-5.6.3/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
26 [root@yinzhengjie bin]# 
27 [root@yinzhengjie bin]# curl 127.0.0.1:9200            ------->用curl命令验证安装的es是否可用。
28 {
29   "name" : "uJy1--c",
30   "cluster_name" : "elasticsearch",
31   "cluster_uuid" : "mQ8mfu3bQQGdo-jSECJQhQ",
32   "version" : {
33     "number" : "5.6.3",
34     "build_hash" : "1a2f265",
35     "build_date" : "2017-10-06T20:33:39.012Z",
36     "build_snapshot" : false,
37     "lucene_version" : "6.6.1"
38   },
39   "tagline" : "You Know, for Search"
40 }
41 [root@yinzhengjie bin]# 

 

d>.rpm安装并运行Elasticsearchgit

 1 [root@yinzhengjie ~]# mkdir -pv /yinzhengjie/application/elasticsearch && cd /yinzhengjie/application/elasticsearch 
 2 [root@yinzhengjie elasticsearch]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.rpm
 3 [root@yinzhengjie elasticsearch]# rpm --install elasticsearch-5.6.3.rpm
 4 [root@yinzhengjie elasticsearch]# 
 5 [root@yinzhengjie elasticsearch]# ln -s `which java`  /sbin/java    ----->须要手动作一个软链接
 6 [root@yinzhengjie elasticsearch]# service elasticsearch start        ----->作好链接以后可用启动服务
 7 [root@yinzhengjie elasticsearch]# 
 8 [root@yinzhengjie elasticsearch]# lsof -i:9200                ------->检查服务是否正常启动
 9 COMMAND  PID          USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
10 java    3074 elasticsearch  135u  IPv6  29720      0t0  TCP localhost:wap-wsp (LISTEN)
11 java    3074 elasticsearch  137u  IPv6  29722      0t0  TCP localhost:wap-wsp (LISTEN)
12 [root@yinzhengjie elasticsearch]# 
13 [root@yinzhengjie elasticsearch]# curl 127.0.0.1:9200        ------->验证是否按照成功
14 {
15   "name" : "BAzujhz",
16   "cluster_name" : "elasticsearch",
17   "cluster_uuid" : "7jz3RzqdTiS--VoQADAE5g",
18   "version" : {
19     "number" : "5.6.3",
20     "build_hash" : "1a2f265",
21     "build_date" : "2017-10-06T20:33:39.012Z",
22     "build_snapshot" : false,
23     "lucene_version" : "6.6.1"
24   },
25   "tagline" : "You Know, for Search"
26 }
27 [root@yinzhengjie elasticsearch]# 
   更多安装姿式,请参考官方连接:https://www.elastic.co/guide/en/elasticsearch/reference/5.6/rpm.html
 
e>.目录结构说明(如下是源码安装的目录结构做为说明)
 1 [root@yinzhengjie elasticsearch-5.6.3]# ll
 2 total 244
 3 drwxr-xr-x.  2 yinzhengjie yinzhengjie   4096 Oct 30 05:11 bin            -------->运行elasticsearch实例和管理插件的一些脚本;
 4 drwxr-xr-x.  3 yinzhengjie yinzhengjie   4096 Oct 30 05:07 config            --------->配置文件路径,包含elasticsearch.yml文件,注意RPM安装的存放位置应该是/etc/elasticsearch这个目录;
 5 drwxrwxr-x.  3 yinzhengjie yinzhengjie   4096 Oct 30 05:07 data            --------->在每一个索引/碎片的数据文件的位置,能够有多个目录;
 6 drwxr-xr-x.  2 yinzhengjie yinzhengjie   4096 Oct  6 13:35 lib                ---------->elasticsearch使用的库;
 7 -rw-r--r--.  1 yinzhengjie yinzhengjie  11358 Oct  6 13:32 LICENSE.txt
 8 drwxr-xr-x.  2 yinzhengjie yinzhengjie   4096 Oct 30 05:06 logs            ---------->存放日志的文件夹,注意若是是RPM方式安装的话应该在/var/log/elasticsearch这个目录里面,官网文档是有说明的。
 9 drwxr-xr-x. 13 yinzhengjie yinzhengjie   4096 Oct  6 13:35 modules
10 -rw-r--r--.  1 yinzhengjie yinzhengjie 194187 Oct  6 13:34 NOTICE.txt
11 drwxr-xr-x.  2 yinzhengjie yinzhengjie   4096 Oct  6 13:35 plugins            --------->存放已经安装的插件的存放位置
12 -rw-r--r--.  1 yinzhengjie yinzhengjie   9549 Oct  6 13:32 README.textile
13 [root@yinzhengjie elasticsearch-5.6.3]#  
 
 
 八.Elasticsearch相关插件。
   elasticsearch支持不少插件,本篇文章只介绍两个经常使用插件,即Head插件和Bigdesk插件。除了这两个插件, elasticsearch还支持不少的插件,若是想了解的童鞋可自行上网搜索。(使劲戳我
1.Head插件安装
a>.Head插件介绍
  head插件是一个elasticsearch的集群管理工具,它是彻底由html5编写的独立网页程序。GitHub地址:https://github.com/mobz/elasticsearch-head。
b>.安装head插件
 
 
2.Bigdesk插件安装
相关文章
相关标签/搜索