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插件安裝
相關文章
相關標籤/搜索