您好,登錄后才能下訂單哦!
ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成,其官方網(wǎng)站為https://www.elastic.co/cn
Elasticsearch:是個開源分布實時分析搜索引擎,建立在全文搜索引擎庫Apache Lucens基礎(chǔ)上,同時隱藏了Apache Luces的復(fù)雜性。Elasticsearch將所有的功能打包成一個獨立的服務(wù),并提供了一個簡單的RESTful API接口,它具有分布式、零配置、自動發(fā)現(xiàn)、索引自動分片、索引副本機(jī)制、RESTful風(fēng)格接口、多數(shù)據(jù)源、自動搜索負(fù)載等特點;
Logstash:是一個完全開源的工具,主要用于日志收集,同時可以對數(shù)據(jù)處理,并輸出給Elasticsearch;
- Kibana:也是一個開源和免費的工具,Kibana可以為Logstash和Elasticsearch提供圖形化的日志分析Web界面,可以匯總、分析和搜索重要數(shù)據(jù)日志;
Logstash收集APPServer產(chǎn)生的Log,并存放到Elasticsearch群集中,而Kibana則從ES群集中查詢數(shù)據(jù)生成圖表,在返回給Browser。
簡單來說,進(jìn)行日志處理分析,一般需要經(jīng)過以下幾個步驟:
將日志進(jìn)行集中化管理;
將日志格式化(Logstash)并輸出到Elasticsearch;
對格式化后的數(shù)據(jù)進(jìn)行索引和存儲(Elasticsearch);
- 前端數(shù)據(jù)的展示(Kibana);
Elasticsearch是一個基于Lucene的搜索服務(wù)器,它穩(wěn)定、可靠、快速,而且具有比較好的水平擴(kuò)展能力、為分布式環(huán)境設(shè)計、在云計算中被廣泛應(yīng)用。Elasticsearch提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful Web接口。通過該接口,用戶可以通過瀏覽器和Elasticsearch通信。Elasticsearch使用Java開發(fā)的,并作為Apache許可條款下的開放源碼分布。Wikipedia、Stack、Overflow、GitHub等基于Elasticsearch來構(gòu)建搜索引擎,所以具有實時搜索、穩(wěn)定、可靠、快速、安裝使用方便等特點。
接近實時(NRT):Elasticsearch是一個搜索速度接近實時的搜索憑條,相應(yīng)速度非???,從搜索一個文檔直到這個文檔能夠被搜索到只有一個輕微的延遲(一般情況下是1s);
群集(cluster):群集就是由一個或多個節(jié)點組織在一起,在所有的節(jié)點上存放用戶數(shù)據(jù),并一起提供索引和搜索功能,通過選舉產(chǎn)生主節(jié)點,并提供跨節(jié)點的聯(lián)合索引和搜索的功能。每個群集都有一個標(biāo)示的名稱,默認(rèn)是Elasticsearch,每個節(jié)點是居于群集名字加入到其群集中的,一個群集可以只有一個節(jié)點,為了具備更好的容錯性,通常配置多個節(jié)點,在配置群集時,建議配置為群集模式;
節(jié)點(node):是指一臺單一的服務(wù)器,多個節(jié)點組織為一個群集,每個節(jié)點都存儲數(shù)據(jù)并參與群集的索引和搜索功能。和群集一樣,節(jié)點也是通過名字來標(biāo)識的,默認(rèn)情況下,在節(jié)點啟動時會隨機(jī)分配字符名,也可自定義。通過指定群集名稱,節(jié)點可以加入到群集中。默認(rèn)情況下,每個節(jié)點都可以加入Elasticsearch群集。如果群集中有多個節(jié)點,它們將會自動組建一個名為Elasticsearch的群集;
索引(Index):類似于關(guān)系型數(shù)據(jù)庫的中的“庫”。當(dāng)索引一個文檔后,就可以使用Elasticsearch搜索到該文檔,也可以簡單地將索引理解為存儲數(shù)據(jù)的地方,可以方便地進(jìn)行全文索引。在index下面包含存儲數(shù)據(jù)庫的類型(Type),TYPE類似于關(guān)系型數(shù)據(jù)庫中的“表”,用來存放具體數(shù)據(jù),而Type下面包含文檔(Document),文檔相當(dāng)Yui關(guān)系型數(shù)據(jù)庫的“記錄”,一個文檔是一個可被索引的基礎(chǔ)信息單元;
分片和副本:Elasticsearch將索引分為若干部分,每個部分稱為一個分片,每個分片就是一個全功能的獨立的索引。分片的數(shù)量一般在索引創(chuàng)建前指定,且創(chuàng)建索引后不能更改;分片的兩個最主要的原因:
水平分割擴(kuò)展,增大存儲量;
總之,索引可以將分為若干個分片。這些分片也可以被復(fù)制0次(沒有復(fù)制)或多次,當(dāng)有副本存在是,作為復(fù)制源的分片稱為主分片,而作為復(fù)制目標(biāo)的分片稱為復(fù)制分片。分片和副本的數(shù)量可以在索引創(chuàng)建時指定。在索引創(chuàng)建后,可以改變副本的數(shù)量,但是不能改變分片的數(shù)量。默認(rèn)情況,Elasticsearch中的每個索引被分片為5個主分片和1個副本。在兩個節(jié)點的場景下,每個索引都將會有5個主分片和另外5個副本分片,每個索引總共就有10個分片。
Logstash有JRuby語言編寫,運行在Java虛擬機(jī)(JVM)上,是一款強(qiáng)大的數(shù)據(jù)處理工具,可以實現(xiàn)數(shù)據(jù)傳輸、格式處理、格式化輸出。Logstash具有強(qiáng)大的插件功能,常用于日志處理。Logstash可配置單一的代理端,與其他開源軟件結(jié)合,實現(xiàn)不同的功能。
Logstash的理念很簡單,它只做三件事:數(shù)據(jù)輸入、數(shù)據(jù)加工(如過濾、改寫等)以及數(shù)據(jù)輸出。通過組合輸入和輸出,可以實現(xiàn)鎖種需求。Logstash處理日志時,典型的部署架構(gòu)圖如下:
Logstash的主要組件:
Shipper:日志收集者。負(fù)責(zé)監(jiān)控本地日志文件的變化,及時收集最新的日志文件內(nèi)容。通常,遠(yuǎn)程代理端(agent)只需要運行這個組件即可;
Indexer:日志存儲者。負(fù)責(zé)接收日志并寫入到本地文件;
Broker:日志Hub。負(fù)責(zé)連接多個Shipper和Indexer;
Search and Stronage:允許對事件進(jìn)行搜索和存儲;
- Web Interface:基于Web的展示界面;
正是由于以上組件在Logstash架構(gòu)中可獨立部署,才提供了更好的群集擴(kuò)展性。
Logstash使用管道方式進(jìn)行日志的搜集處理和輸出,優(yōu)點類似Linux系統(tǒng)的管道命令,將前一個流程的處理結(jié)構(gòu)發(fā)送到后一個流程繼續(xù)處理。在Logstash中,包括了三個階段,分別是輸入(input)、處理(Filter,非必需)和輸出(output),三者的關(guān)系如圖:
如圖中,整個流程為Input收集數(shù)據(jù),F(xiàn)ilter處理數(shù)據(jù)、Output輸出數(shù)據(jù)。每個階段也可以指定多種方式,如輸出既可以輸出到Elasticsearch中,也可以指定到stdout在控制臺打印。這種插件式的組織方式,使得Logstash的擴(kuò)展和定制非常方便。
Kibana是一個針對Elasticsearch的開源分析及可視化平臺,主要設(shè)計用來和Elasticsearch一起工作,可以搜索、查看存儲在Elasticsearch索引中的數(shù)據(jù),并通過各種圖表進(jìn)行高級數(shù)據(jù)分析和展示。Kibana可以讓數(shù)據(jù)看起來一目了然。它的操作十分簡單,基于瀏覽器的用戶界面可以讓用戶在任何位置都可以實時瀏覽。Kibana可以快速創(chuàng)建儀表板實時顯示查詢動態(tài)。Kibana使用非常簡單,只需添加索引就可以檢測Elasticsearch索引數(shù)據(jù)。
Elasticsearch無縫之集成:Kibana架構(gòu)是為了Elasticsearch定制的,可以將任何(結(jié)構(gòu)化和非結(jié)構(gòu)化)數(shù)據(jù)加入Elasticsearch索引。Kibana還充分李永樂Elasticsearch強(qiáng)大的搜索和分析功能;
整合數(shù)據(jù):Kibana可以讓海量數(shù)量變得更容易理解,根據(jù)數(shù)據(jù)內(nèi)容可以創(chuàng)建形象的柱形圖、折線圖、散點圖、直方圖、餅圖和地圖等,以便用戶查看;
復(fù)雜數(shù)據(jù)分析:Kibana提升了Elasticsearch的分析能力,能夠更加智能地分析數(shù)據(jù),執(zhí)行數(shù)據(jù)轉(zhuǎn)換并且根據(jù)要求對數(shù)據(jù)切割分塊;
讓更多團(tuán)隊成員受益:強(qiáng)大的數(shù)據(jù)庫可視化接口讓各業(yè)務(wù)崗位都能夠從數(shù)據(jù)集合受益;
接口靈活,分享更容易:使用Kibana可以更加方便地創(chuàng)建、保存、分享數(shù)據(jù),并將可視化數(shù)據(jù)快速交流;
配置簡單:Kibana的配置和啟用非常簡單,用戶體驗非常友好。Kibana自帶Web服務(wù)器,可以快速啟動運行;
- 可視化多數(shù)據(jù)源:Kibana可以非常方便地把來自Logstash、ES-Hadoop、Beats多第三方技術(shù)的數(shù)據(jù)整合到Elasticsearch,支持的第三方技術(shù)包括Apache、Flume、Fluentd等;
簡單數(shù)據(jù)導(dǎo)出:Kibana可以方便地導(dǎo)出感興趣的數(shù)據(jù),與其他數(shù)據(jù)集合并融合后快速建模分析,發(fā)現(xiàn)新結(jié)果;
案例環(huán)境如下:
準(zhǔn)備安裝環(huán)境:
準(zhǔn)備三臺服務(wù)器,分別根據(jù)上述環(huán)境表配置網(wǎng)絡(luò)參數(shù),我這里是192.168.100.10-30。其次關(guān)閉防火墻和Selinux。其中Centos01和Centos02節(jié)點分配4GB(>2GB)內(nèi)存,Apache節(jié)點分配1GB內(nèi)存。此案例自行連接廣域網(wǎng)。
本案例實現(xiàn)功能如下:
本案例用到的所有程序包請訪問:https://pan.baidu.com/s/1OK49eAIwbvwIV5swe0-8-w
提取碼:yiad
[root@localhost ~]# hostnamectl set-hostname centos01
[root@localhost ~]# bash
[root@centos01 ~]#
[root@centos01 ~]# vim /etc/hosts
192.168.100.10 centos01
192.168.100.20 centos02
[root@centos01 ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@centos01 ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
[root@centos01 ~]# systemctl stop firewalld
[root@centos01 ~]# reboot
[root@localhost ~]# hostnamectl set-hostname centos02
[root@localhost ~]# bash
[root@centos02 ~]#
[root@centos02 ~]# vim /etc/hosts
192.168.100.10 centos01
192.168.100.20 centos02
[root@centos02 ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@centos02 ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
[root@centos02 ~]# systemctl stop firewalld
[root@centos02 ~]# reboot
[root@centos01 ~]# ls <!--通過rz命令上傳elasticsearch包-->
anaconda-ks.cfg elasticsearch-5.6.16.rpm initial-setup-ks.cfg
[root@centos01 ~]# yum -y install elasticsearch-5.6.16.rpm <!--安裝elasticsearch程序-->
[root@centos01 ~]# vim /etc/elasticsearch/elasticsearch.yml <!--修改elasticsearch配置文件-->
cluster.name: ELK <!--定義群集名稱-->
node.name: centos01 <!--定義節(jié)點名稱-->
network.host: 192.168.100.10 <!--提供服務(wù)綁定的IP地址-->
http.port: 9200 <!--服務(wù)監(jiān)聽端口為9200-->
discovery.zen.ping.unicast.hosts: ["centos01", "centos02"] <!--群集發(fā)現(xiàn)通過單播的方式-->
[root@centos01 ~]# systemctl daemon-reload <!--配置以守護(hù)進(jìn)程方式運行elasticsearch-->
[root@centos01 ~]# /etc/init.d/elasticsearch start <!--啟動elasticsearch服務(wù)-->
[root@centos01 ~]# systemctl start elasticsearch <!--啟動elasticsearch服務(wù)-->
[root@centos01 ~]# systemctl enable elasticsearch <!--設(shè)置開機(jī)自動啟動-->
[root@centos01 ~]# netstat -anptu | grep 9200
<!--監(jiān)聽elasticsearch服務(wù)是否啟動成功(需要耐心等待幾秒才可以監(jiān)聽到)-->
tcp6 0 0 192.168.100.10:9200 :::* LISTEN 1557/java
[root@centos02 ~]# ls <!--通過rz命令上傳elasticsearch包-->
anaconda-ks.cfg elasticsearch-5.6.16.rpm initial-setup-ks.cfg
[root@centos02 ~]# yum -y install elasticsearch-5.6.16.rpm <!--安裝elasticsearch程序-->
[root@centos02 ~]# vim /etc/elasticsearch/elasticsearch.yml <!--修改elasticsearch配置文件-->
cluster.name: ELK <!--定義群集名稱-->
node.name: centos02 <!--定義節(jié)點名稱-->
network.host: 192.168.100.20 <!--提供服務(wù)綁定的IP地址-->
http.port: 9200 <!--服務(wù)監(jiān)聽端口為9200-->
discovery.zen.ping.unicast.hosts: ["centos01", "centos02"] <!--群集發(fā)現(xiàn)通過單播的方式-->
[root@centos02 ~]# systemctl daemon-reload <!--配置以守護(hù)進(jìn)程方式運行elasticsearch-->
[root@centos02 ~]# /etc/init.d/elasticsearch start <!--啟動elasticsearch服務(wù)-->
[root@centos02 ~]# systemctl start elasticsearch <!--啟動elasticsearch服務(wù)-->
[root@centos02 ~]# systemctl enable elasticsearch <!--設(shè)置開機(jī)自動啟動-->
[root@centos02 ~]# netstat -anptu | grep 9200
<!--監(jiān)聽elasticsearch服務(wù)是否啟動成功(需要耐心等待幾秒才可以監(jiān)聽到)-->
tcp6 0 0 192.168.100.20:9200 :::* LISTEN 1557/java
配置客戶端IP地址通過瀏覽器訪問centos01
配置客戶端IP地址通過瀏覽器訪問centos02
<!--上傳node壓縮包,解壓縮安裝到/usr/local/中 -->
[root@centos01 ~]# ls
anaconda-ks.cfg elasticsearch-5.6.16.rpm initial-setup-ks.cfg node-v4.2.2-linux-x64.tar.gz
[root@centos01 ~]# tar zxvf node-v4.2.2-linux-x64.tar.gz -C /usr/local/ <!---->
[root@centos01 local]# mv node-v4.2.2-linux-x64/ node <!--修改名字為node-->
[root@centos01 local]# ln -s /usr/local/node/bin/npm /usr/local/bin/npm<!--連接管理命令-->
[root@centos01 local]# ln -s /usr/local/node/bin/node /usr/local/bin/node<!--連接管理命令-->
[root@centos01 ~]# vim /etc/profile <!--配置環(huán)境變量加載node-->
export NODE_HOME=/usr/local/node
export PATH=$PATH:$NODE_HOME/bin
export BODE_PATH=$NODE_HOME/lib/node_modules/
[root@centos01 ~]# source /etc/profile <!--刷新環(huán)境變量-->
[root@centos01 ~]# vim /etc/elasticsearch/elasticsearch.yml
<!--修改elasticsearch連接elasticsearch-head-->
http.cors.enabled: true
http.cors.allow-origin: "*"
<!--接下來安裝elasticsearch-head-->
[root@centos01 ~]# git clone git://github.com/mobz/elasticsearch-head.git <!--配置安裝源-->
[root@centos01 ~]# ls
anaconda-ks.cfg elasticsearch-5.6.16.rpm elasticsearch-head initial-setup-ks.cfg node-v4.2.2-linux-x64.tar.gz
[root@centos01 ~]# mv elasticsearch-head /usr/local/<!--修改elasticsearch-head安裝位置-->
[root@centos01 ~]# cd /usr/local/elasticsearch-head/
[root@centos01 elasticsearch-head]# npm install -g grunt-cli <!--安裝grunt-cli程序-->
[root@centos01 elasticsearch-head]# grunt -version <!--檢查grunt是否安裝成功-->
grunt-cli v1.3.2
[root@centos01 ~]# vim /usr/local/elasticsearch-head/Gruntfile.js
<!--修改elasticsearch-head的Gruntfile.js配置文件-->
99 keepalive: true,
100 hostname: "*
[root@centos01 ~]# vim /usr/local/elasticsearch-head/_site/app.js
<!--修改elasticsearch-head的app.js配置文件-->
4374 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri")
|| "http://192.168.100.10:9200"; <!--將http后面的localhost改為此服務(wù)器IP地址-->
<!--接下來開始安裝npm-->
[root@centos01 ~]# cd /usr/local/elasticsearch-head/ <!---->
[root@centos01 elasticsearch-head]# npm install <!--安裝npm -->
[root@centos01 elasticsearch-head]# grunt server&<!--啟動grunt服務(wù),將服務(wù)運行在后臺-->
[root@centos01 ~]# /etc/init.d/elasticsearch restart <!--重啟elasticsearch服務(wù)-->
[root@centos01 ~]# netstat -anptu | grep 9200 <!--監(jiān)聽elasticsearch服務(wù)是否啟動-->
tcp6 0 0 192.168.100.10:9200 :::* LISTEN 1557/java
[root@centos01 ~]# netstat -anptu | grep 9100 <!--監(jiān)聽grunt服務(wù)是否啟動-->
tcp6 0 0 :::9100 :::* LISTEN 3400/grunt
centos02節(jié)點和centos01節(jié)點配置相同,就是改一下IP地址即可,參考centos01節(jié)點自行配置即可。
現(xiàn)在就可以通過瀏覽器訪問http://192.168.100.10:9100 去查看群集信息了
<!--上傳logstash壓縮包到服務(wù)器 -->
[root@centos01 ~]# ls
anaconda-ks.cfg elasticsearch-5.6.16.rpm initial-setup-ks.cfg logstash-5.5.1.rpm node-v4.2.2-linux-x64.tar.gz
[root@centos01 ~]# rpm -ivh logstash-5.5.1.rpm <!--安裝logstash-->
[root@centos01 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/<!--優(yōu)化安裝命令-->
[root@centos01 ~]# mkdir -p /usr/share/logstash/config <!--創(chuàng)建存儲數(shù)據(jù)目錄-->
[root@centos01 ~]# ln -s /etc/logstash/* /usr/share/logstash/config/<!--配置存儲數(shù)據(jù)目錄-->
[root@centos01 ~]# systemctl start logstash <!--啟動logstash服務(wù)-->
[root@centos01 ~]# systemctl enable logstash <!--設(shè)置開機(jī)自動啟動-->
[root@centos01 ~]# logstash -e 'input { stdin {} } output { stdout {} }'
<!--寫入測試數(shù)據(jù),測試日志服務(wù)器-->
The stdin plugin is now waiting for input:
www.baidu.com <!--自行輸入,完成后強(qiáng)制退出-->
2019-12-19T07:44:26.487Z centos01 www.baidu.com
[root@centos01 ~]# logstash -e 'input { stdin {} } output { stdout { codec=> rubydebug } }'
<!--寫入測試數(shù)據(jù),測試日志服務(wù)器-->
The stdin plugin is now waiting for input:
www.baidu.com <!--自行輸入,完成后強(qiáng)制退出-->
{
"@timestamp" => 2019-12-19T07:48:34.006Z,
"@version" => "1",
"host" => "centos01",
"message" => "www.baidu.com"
}
[root@centos01 ~]# logstash -e 'input { stdin {} } output { elasticsearch { hosts =>
["192.168.100.10:9200"] } }' <!--寫入測試數(shù)據(jù),測試日志服務(wù)器-->
The stdin plugin is now waiting for input:
www.baidu.com <!--自行輸入,完成后強(qiáng)制退出-->
centos02和centos01是相同配置,請自行配置。
接下來通過客戶端瀏覽器訪問9100查看日志
<!--上傳kibana-5.5.1-x86_64.rpm包到服務(wù)器-->
[root@centos01 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg logstash-5.5.1.rpm
elasticsearch-5.6.16.rpm kibana-5.5.1-x86_64.rpm node-v4.2.2-linux-x64.tar.gz
[root@centos01 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm <!--安裝kibana-->
[root@centos01 ~]# vim /etc/kibana/kibana.yml <!--修改kibana主配置文件-->
server.port: 5601 <!--服務(wù)監(jiān)聽的端口號-->
server.host: "0.0.0.0" <!--允許所有網(wǎng)段-->
elasticsearch.url: "http://192.168.100.10:9200" <!--連接elasticsearch的url-->
[root@centos01 ~]# systemctl start kibana <!--啟動kibana服務(wù)-->
[root@centos01 ~]# systemctl enable kibana <!--設(shè)置開機(jī)自動啟動-->
centos02和上面相同配置,將連接elasticsearch的url的IP地址改為centos02的IP地址即可,自行配置。
現(xiàn)在可以通過客戶端瀏覽器訪問5601端口
[root@centos03 ~]# yum -y install httpd <!--安裝httpd-->
[root@centos03 ~]# systemctl start httpd <!--啟動服務(wù)-->
[root@centos03 ~]# systemctl enable httpd <!--設(shè)置開機(jī)自動啟動-->
<!--上傳logstash到網(wǎng)站服務(wù)器,安裝logstash-->
[root@centos03 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg logstash-5.5.1.rpm
[root@centos03 ~]# rpm -ivh logstash-5.5.1.rpm <!--安裝logstash-->
[root@centos03 ~]# vim /etc/logstash/conf.d/apache_error.conf <!--配置監(jiān)控網(wǎng)站的錯誤日志-->
input {
file {
path => "/var/log/httpd/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "error" {
elasticsearch {
hosts => ["192.168.100.10:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@centos03 ~]# systemctl start logstash.service <!--啟動logstash服務(wù)-->
[root@centos03 ~]# systemctl enable logstash.service <!--設(shè)置開機(jī)自動啟動-->
[root@centos03 ~]# /usr/share/logstash/bin/logstash -f
/etc/logstash/conf.d/apache_error.conf <!--啟動監(jiān)控網(wǎng)站服務(wù)器-->
自行在kibana服務(wù)器添加索引。
—————— 本文至此結(jié)束,感謝閱讀 ——————
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。