Elasticsearch日志分析系统

Elasticsearch⽇志分析系统
                          Elasticsearch⽇志分析系统
                                              作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
⼀.什么是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对应数据库的关系
  我们知道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,or
ange,Mozilla等等。同⽐跟Elasticsearch这样同性质的⼯具也有很多,⽐如说solr和splunk等等。下⾯有⼀张2015年8⽉的搜索引起排⾏榜:
  我们可以看到Solr排⾏是第⼀的,当这个Elasticsearch也是名列前茅,处于第⼆代位置,它的使⽤率还是挺⾼的。Solr和Elasticsearch都是全⽂搜索⽐较⽕的引擎,他们有什么区别呢?Elasticsearch侧重实时数据分析,solr在这⼀⽅⾯是远不及Elasticsearch的。当然,Solr⽀持⽂本格式⽐Elasticsearch多:⽐如:html,pdf,word,excel,cvs等等。⽽Elasticsearch只⽀持json的格式。所以⼤家在选择⼯具的同时,也要根据⾃⼰项⽬的情况去选择。这样才有利于我们项⽬的开展。
  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
  Elasticsearch官⽅⽂档地址:
1.操作环境
1 [root@yinzhengjie ~]# cat /etc/redhat-release
2 CentOS release 6.6 (Final)
3 [root@yinzhengjie ~]#
4 [root@yinzhengjie ~]# uname -r
52.6.32-504.el6.x86_64
6 [root@yinzhengjie ~]#
7 [root@yinzhengjie ~]# uname -m
8 x86_64
9 [root@yinzhengjie ~]#
2.安装jdk,配置JAVA环境变量
a>.下载
b>.卸载旧版本的JAVA
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_6
4 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.720120313 (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>.安装Java
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
7100%  185289 KB  960 KB/s 00:03:
8
9 [root@yinzhengjie jdk]# ll
10总⽤量185300
11 -rw-r--r--+ 1 root root 189736377 10⽉2921:45
12 [root@yinzhengjie jdk]#
13 [root@yinzhengjie jdk]# tar xf
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
a>.下载
b>.源码安装并运⾏Elasticsearch
1 [root@yinzhengjie ~]# mkdir -pv /yinzhengjie/application/elasticsearch && cd /yinzhengjie/application/elasticsearch
2 [root@yinzhengjie elasticsearch]# wget /downloads/elasticsearch/elasticsearch-5.6.
3 [root@yinzhengjie elasticsearch]# rz
4 rz waiting to receive.
5  zmodem trl+C ȡ
6
7100%  32982 KB 1221 KB/s 00:00:
8
9 [root@yinzhengjie elasticsearch]# tar xf elasticsearch-5.6.
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
2550157861421:29 pts/000:00:17 /yinzhengjie/application/jdk/jdk1.8.0_151/bin/java -Xms2g -Xmx2g -
XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPre 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安装并运⾏Elasticsearch
1 [root@yinzhengjie ~]# mkdir -pv /yinzhengjie/application/elasticsearch && cd /yinzhengjie/application/elasticsearch
2 [root@yinzhengjie elasticsearch]# wget /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]#
  更多安装姿势,请参考官⽅链接:
e>.⽬录结构说明(以下是源码安装的⽬录结构作为说明)
1 [root@yinzhengjie elasticsearch-5.6.3]# ll
2 total 244
3 drwxr-xr-x.  2 yinzhengjie yinzhengjie  4096 Oct 3005:11 bin            -------->运⾏elasticsearch实例和管理插件的⼀些脚本;
4 drwxr-xr-x.  3 yinzhengjie yinzhengjie  4096 Oct 3005:07 config            --------->配置⽂件路径,包含l⽂件,注意RPM安装的存放位置应该是/etc/elasticsearch这个⽬录;
5 drwxrwxr-x.  3 yinzhengjie yinzhengjie  409
6 Oct 3005:0
7 data            --------->在每个索引/碎⽚的数据⽂件的位置,可以有多个⽬录;
6 drwxr-xr-x.  2 yinzhengjie yinzhengjie  4096 Oct  613:35 lib                ---------->elasticsearch使⽤的库;
7 -rw-r--r--.  1 yinzhengjie yinzhengjie  11358 Oct  613:
8 drwxr-xr-x.  2 yinzhengjie yinzhengjie  4096 Oct 3005:06 logs            ---------->存放⽇志的⽂件夹,注意如果是RPM⽅式安装的话应该在/var/log/elasticsearch这个⽬录⾥⾯,官⽹⽂档是有说明的。
9 drwxr-xr-x. 13 yinzhengjie yinzhengjie  4096 Oct  613:35 modules
10 -rw-r--r--.  1 yinzhengjie yinzhengjie 194187 Oct  613:
11 drwxr-xr-x.  2 yinzhengjie yinzhengjie  4096 Oct  613:35 plugins            --------->存放已经安装的插件的存放位置
12 -rw-r--r--.  1 yinzhengjie yinzhengjie  9549 Oct  613:ile
13 [root@yinzhengjie elasticsearch-5.6.3]#
⼋.Elasticsearch相关插件。
  elasticsearch⽀持很多插件,本篇⽂章只介绍两个常⽤插件,即Head插件和Bigdesk插件。除了这两个插件,elasticsearch还⽀持很多的插件,如果想了解的童鞋可⾃⾏上⽹搜索。()
1.Head插件安装
a>.Head插件介绍
  head插件是⼀个elasticsearch的集管理⼯具,它是完全由html5编写的独⽴⽹页程序。GitHub地址:github/mobz/elasticsearch-head。
b>.安装head插件
2.Bigdesk插件安装

本文发布于:2024-09-23 02:27:06,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/387237.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   安装   节点   插件   状态   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议