ELKStack 實戰之 Elasticsearch [一]
標籤(空格分隔): ELKStack
ELKStack簡介
ELK Stack 是 Elasticsearch、Logstash、Kibana 三個開源軟件的組合。在實時數據檢索和分析場合,三者通常是配合共用,而且又都先後歸於 Elastic.co
公司名下,故有此簡稱。
ELK Stack 在最近兩年迅速崛起,成爲機器數據分析,或者說實時日誌處理領域,開源界的第一選擇。和傳統的日誌處理方案相比,ELK Stack 具有如下幾個優點:
• 處理方式靈活。Elasticsearch 是實時全文索引,不需要像 storm 那樣預先編程才能使用;
• 配置簡易上手。Elasticsearch 全部採用 JSON 接口,Logstash 是 Ruby DSL 設計,都是目前業界最通用的配置語法設計;
• 檢索性能高效。雖然每次查詢都是實時計算,但是優秀的設計和實現基本可以達到全天數據查詢的秒級響應;
• 集羣線性擴展。不管是 Elasticsearch 集羣還是 Logstash 集羣都是可以線性擴展的;
• 前端操作炫麗。Kibana 界面上,只需要點擊鼠標,就可以完成搜索、聚合功能,生成炫麗的儀表板。
ELK地址:https://www.elastic.co/
Logstash 最佳實踐:http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html
Elasticsearch 權威指南:http://www.learnes.net/index.html
ELKStack中文社區:https://kibana.logstash.es/content/
對於日誌來說,最常見的需求就是收集、存儲、查詢、展示,開源社區正好有相對應的開源項目:logstash(收集)、elasticsearch(存儲+搜索)、kibana(展示),我們將這三個組合起來的技術稱之爲ELKStack,所以說ELKStack指的是Elasticsearch(java)、Logstash(jruby)、Kibana技術棧的結合,一個通 用的架構如下圖所示:
圖片解釋:elk 前面主要靠logstash來進行收集日誌,logstash將日誌上傳到broker上,後面還有一個logstash用來讀取broker中的日誌,在將日誌存儲到es裏面,最後用kibana練到es上進行展示
提示:我們可以將Elasticsearch簡稱爲es
Elasticsearch介紹
ElasticSearch是一個基於Lucene
的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是第二流行的企業搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
Elasticsearch部署
Elasticsearch首先需要Java環境,所以需要提前安裝好JDK,可以直接使用yum安裝。也可以從Oracle官網下載JDK進行安裝。開始之前要確保JDK正常安裝並且環境變量也配置正確:
環境介紹
[root@abcdocker ~]#
[root@abcdocker ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 2.4G 18G 12% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.6M 904M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
tmpfs 183M 0 183M 0% /run/user/0
[root@abcdocker ~]# free -m
total used free shared buff/cache available
Mem: 1823 328 1113 8 381 1322
Swap: 0 0 0
[root@abcdocker ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
本次使用2臺服務器來進行模擬集羣,所以請準備2臺服務器
安裝JDK
[root@linux-node1 ~]# yum install -y java
[root@linux-node1 ~]# java -version
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)
源碼安裝JDK
下載安裝http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
配置Java環境
# tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/local/
# ln –s /usr/local/jdk1.8.0_91 /usr/local/jdk
# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile
看到如下信息,java環境配置成功
# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
配置安裝ElasticSearch
可以使用源碼,或者yum
一、yum安裝
1.下載並安裝GPG key
[root@linux-node1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
2.添加yum倉庫
[root@linux-node1 ~]# cat /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
3.安裝elasticsearch
[root@hadoop-node1 ~]# yum install -y elasticsearch
二、源碼安裝
[root@CentOS6 home]# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.tar.gz #下載elasticsearch
[root@CentOS6 home]# tar xf elasticsearch-1.7.2.tar.gz -C /usr/local/ #解壓elasticsearch
[root@CentOS6 home]# ln -s /usr/local/elasticsearch-1.7.2 /usr/local/elasticsearch #創建軟連接
三、配置elasticsearch
修改配置文件
[root@abcdocker ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: myes #ES集羣名稱
node.name: abcdocker-node-1 #節點名稱
path.data: /data/es-date #數據存儲的目錄(多個目錄使用逗號分隔)
path.logs: /var/log/elasticsearch #日誌格式
bootstrap.memory_lock: true #鎖住es內存,保證內存不分配至交換分區
network.host: 192.168.56.11 #設置本機IP地址
http.port: 9200 #端口默認9200
四、設置數據目錄權限
[root@abcdocker ~]# chown -R elasticsearch:elasticsearch /data/es-date/
#這個是我們存放數據的目錄,手動創建
es默認發現有組播和單播,組播就是都加入到一個組裏面,單播就是一對一通信
提示: yum安裝時會少了許多配置,如果編譯安裝就會產生很多。
五、啓動
啓動es
[root@abcdocker ~]# systemctl start elasticsearch.service
[root@abcdocker ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 532/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 724/master
tcp6 0 0 192.168.56.11:9200 :::* LISTEN 2125/java
tcp6 0 0 192.168.56.11:9300 :::* LISTEN 2125/java
tcp6 0 0 :::22 :::* LISTEN 532/sshd
tcp6 0 0 ::1:25 :::* LISTEN 724/master
端口默認:9200
本次環境我們使用2臺服務器,這2臺服務器的服務搭建可以跟上面的步驟相同即可
訪問測試:http://IP:9200
Elasticsearch提供了非常多的插件,還可以使用curl
進行通訊
我們可以使用curl來查看es裏面有什麼內容
[root@abcdocker ~]# curl -i -XGET 'http://192.168.56.11:9200/_count?'
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 59
{"count":0,"_shards":{"total":0,"successful":0,"failed":0}}[
解釋:
返回頭部200,執行成功0個,返回0個
Elasticsearch有很多插件,但是有的插件好用但是收費
Elasticsearch插件介紹
一、Haed插件
插件作用:主要是做es集羣管理的插件
Github下載地址:https://github.com/mobz/elasticsearch-head
下載方式:
[root@abcdocker ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
-> Installing mobz/elasticsearch-head...
Trying https://github.com/mobz/elasticsearch-head/archive/master.zip ...
Downloading ...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................DONE
Verifying https://github.com/mobz/elasticsearch-head/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed head into /usr/share/elasticsearch/plugins/head
下載完會在/usr/share/elasticsearch/plugins/目錄下產生插件目錄
訪問:http://ip地址:9200/_plugin/head/
二、Bigdesk插件
插件作用:性能監控
Github下載:https://github.com/lukas-vlcek/bigdesk
提示:因爲我們使用yum安裝的最新版本,bigdesk暫時不支持最新版本
[root@abcdocker ~]# /usr/share/elasticsearch/bin/elasticsearch -V
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Version: 2.4.4, Build: fcbb46d/2017-01-03T11:33:16Z, JVM: 1.8.0_121
正常訪問地址:http://localhost:9200/_plugin/bigdesk/
Bigdesk 1.x
Bigdesk 2.X
三、Kopf插件
插件作用:kopf是一個簡單的網絡管理工具
Kopf不再維護。已經開發了替代品(cerebro),目前維護在https://github.com/lmenezes/cerebro。在這一點上,cerebro應該有相當於kopf的功能,頂部有一些新的功能。
Github地址:https://github.com/lmenezes/elasticsearch-kopf
安裝
[root@abcdocker ~]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
-> Installing lmenezes/elasticsearch-kopf...
Trying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip ...
Downloading ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................DONE
Verifying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed kopf into /usr/share/elasticsearch/plugins/kopf
訪問地址:http://192.168.56.11:9200/_plugin/kopf/
插件使用
1、Head插件使用介紹
現在我們已經將插件安裝完成,這時候裏面還沒有數據。我們現在往裏面寫一些數據
點擊提交
_index:創建了一個索引index-demo
_type:創建了一個類型test
total:分片2個
Successful:成功1個
Failed:失敗0個
Created:狀態成功
我們點擊概覽,點擊連接
我們寫一篇文檔會幫我們分成5片(0-4,可以修改成多個),粗線代表主分片細線代表副本分片(可以理解爲一主一備)正常情況下會將主分片和副本分片放在2臺機器上
集羣健康值介紹:
黃色代表沒有主分片數據丟失,但是現在不是健康的狀態(警告)應該有10個分片,現在只有5個。
紅色代表有數據丟失
綠色代表正常
提示:es支持一個類似於快照的功能,方便我們用於數據備份
Es索引信息
這裏索引信息是open代表我們可以將它給關閉掉,這樣就不會繼續使用這個索引進行搜索
關閉索引
除了支持關閉和開啓索引,同樣也支持刪除
提示:刪除之後索引數據是無法恢復的
Head插件小缺點: 當我們索引特別多的時候,打開head至少需要五分鐘。因爲它要把所有的索引都掃描一遍進行展示,這時候打開使用的帶寬也會特別大(不會出現超時,一直等待就可以)
2、kopf插件使用介紹
訪問地址:http://192.168.56.11:9200/_plugin/kopf/
我們可以看到索引、分片、文檔數量、大小以及jvm使用情況、disk、cpu、load等
我們點擊節點,就可以看到更詳細的硬件信息(實時變化)
同樣kopf也支持head的插件,支持請求
(生產場景這個信息主要給開發使用)
提示:es是有自己的查詢語言,可以寫的很複雜。
其他功能
▲ Create index: 創建索引:
▲ Cluster settings: 集羣設置:
▲ Aliases: 別名:
▲ Analysis: 分析:
▲ Percolator: 過濾器:
▲ Snapshot: 快照
▲ Index templates: 索引模板:
▲ Cat apis: api
▲ Hot threads: 熱線程:
ES介紹完成
本文參考:趙班長,趙夢夢,吳依相關文章