背景介紹
???????隨著軟件行業(yè)的發(fā)展,軟件系統(tǒng)的生產(chǎn)部署結(jié)構(gòu)日趨復(fù)雜。對(duì)于一個(gè)分布式的系統(tǒng),同一應(yīng)用通常部署在不同的節(jié)點(diǎn)上,通過(guò)負(fù)載均衡的方式將請(qǐng)求分發(fā)到各個(gè)不同的節(jié)點(diǎn)進(jìn)行處理。此時(shí)就會(huì)相對(duì)增加生產(chǎn)運(yùn)維的復(fù)雜度,在進(jìn)行問(wèn)題查詢(xún)的時(shí)候很難判斷本次請(qǐng)求是在哪臺(tái)機(jī)器上執(zhí)行的,也就無(wú)法快速的對(duì)日志進(jìn)行查詢(xún)從而定位問(wèn)題,因此,就需要對(duì)日志進(jìn)行統(tǒng)一的處理和分析,以便方便開(kāi)發(fā)和運(yùn)維人員的問(wèn)題處理速度。
本文介紹的是elastic stack開(kāi)源的ELK組件,主要包括elasticsearch(簡(jiǎn)稱(chēng)es),logstash,kibana三個(gè)核心組件。
es是實(shí)時(shí)全文搜索和分析引擎,提供搜集、分析、存儲(chǔ)數(shù)據(jù)三大功能,對(duì)外提供REST和java api,可擴(kuò)展性的分布式系統(tǒng)。
Logstash是一個(gè)用來(lái)搜集、分析、過(guò)濾日志的工具,幾乎支持所有類(lèi)型的日志,能夠接收多種來(lái)源的日志,包括syslog、mq,并且能夠輸出到多種介質(zhì)中,包括es,郵件等等。
Kibana是一個(gè)基于Web的圖形界面,用于搜索、分析和可視化存儲(chǔ)在 Elasticsearch指標(biāo)中的日志數(shù)據(jù)。它利用Elasticsearch的REST接口來(lái)檢索數(shù)據(jù),不僅允許用戶(hù)定制儀表板視圖,還允許用戶(hù)使用es語(yǔ)法進(jìn)行操作。

但是,在實(shí)際使用的過(guò)程中發(fā)現(xiàn),logstash會(huì)占用很多系統(tǒng)資源,因此決定加入一個(gè)更輕量的日志收集組件(也是elastic stack的組件之一)filebeat。因此在加入filebeat之后,整個(gè)部署架構(gòu)變成了如下圖所示。

部署步驟
1.準(zhǔn)備工作(ELK 三個(gè)組件必須使用同一個(gè)版本,其他邊緣組件可以不使用)
安裝包:
????elasticsearch-6.6.2.tar.gz
????kibana-6.6.2-linux-x86_64.tar.gz
????logstash-6.6.2.tar.gz
????filebeat-6.6.0-linux-x86_64.tar.gz
????jdk-8u192-linux-x64.tar.gz
機(jī)器:
????192.168.45.174,192.168.45.175,192.168.45.176(ES集群)
????192.168.45.2(logstash,kibana)
????192.168.45.136(應(yīng)用服務(wù)器,安裝filebeat)
2.開(kāi)始安裝ES集群
???注(1):由于ELK組件都是使用java開(kāi)發(fā)的,因此需要安裝1.8以上版本的jdk
??????jdk的安裝方法:https://www.cnblogs.com/kuoAT/p/7555298.html
???注(2):Elasticsearch不能使用root用戶(hù)運(yùn)行,需要單獨(dú)創(chuàng)建用戶(hù)
1)為es創(chuàng)建一個(gè)目錄
mkdir elasticsearch
2)創(chuàng)建一個(gè)elk用戶(hù),并為elk用戶(hù)授權(quán)elasticsearch目錄
groupadd elk
useradd elk -g elk -p elk
chown -R elk:elk elasticsearch
3)上傳es的安裝包,并解壓到elasticsearch目錄
tar -zxvf elasticsearch-6.6.2.tar.gz
4)切換到root用戶(hù),修改以下文件
vi /etc/security/limits.conf
添加如下四行
@elk hard nofile 65536
@elk soft nofile 65536
@elk hard nproc 4096
@elk soft nproc 4096
vi /etc/sysctl.conf
添加以下內(nèi)容
vm.max_map_count=655360
5)執(zhí)行sysctl –p ,使配置生效
6)切換回elk用戶(hù),進(jìn)入 elasticsearch/config/目錄下,修改es的配置文件elasticsearch.yml
cluster.name: my-application
node.name: node-1
node.master: true
node.data: true
path.data: elasticsearch/data
path.logs: elasticsearch/logs
network.host: 192.168.45.174
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.45.174", "192.168.45.175","192.168.45.176"] // 配置ES集群各個(gè)節(jié)點(diǎn)
discovery.zen.minimum_master_nodes:2 // 防止腦裂
3.開(kāi)始安裝filebeat
1)將filebeat上傳到要進(jìn)行日志收集的服務(wù)器上192.168.45.136,并解壓
tar -zxvf filebeat-6.6.0-linux-x86_64.tar.gz
2)修改配置文件
vi filebeat-6.6.0-linux-x86_64/filebeat.yml
a. 修改其中的enabled為true,并配置paths(要收集的日志路徑,可以使用* 代替)。也可以根據(jù)exclude_lines和include_lines來(lái)做一些過(guò)濾日志的行為。

b. filebeat的配置文件路徑,以及是否允許重新加載配置文件。并設(shè)置索引的分片數(shù)量

c. 配置kibana地址

d. 配置logstash地址

4.開(kāi)始安裝logstash
1)將logstash安裝包上傳到192.168.45.2服務(wù)器并解壓
tar -xvf logstash-6.6.2.tar.gz
2)修改logstash輸入輸出的配置文件logstash-sample.yml
a.input中配置filebeat的監(jiān)聽(tīng)端口
b.filter中可以增加過(guò)濾條件對(duì)所有或者指定索引進(jìn)行過(guò)濾
c.output中可以配置filebeat輸出之后的索引

5.開(kāi)始安裝kibana
1)將kibana安裝包kibana-6.6.2-linux-x86_64.tar.gz上傳到192.168.45.2,并解壓
tar -xvf kibana-6.6.2-linux-x86_64.tar.gz
2)修改配置文件
vi kibana-6.6.2-linux-x86_64/config/kibana.yml
修改下列內(nèi)容
server.port:5601
server.host:"192.168.45.2"
elasticsearch.host:["http://192.168.45.174", "192.168.45.175","192.168.45.176"]
6.分別啟動(dòng)ES集群,logstash,filebeat,kibana
1)分別在對(duì)應(yīng)的bin目錄下執(zhí)行下列操作
nohup ./elasticsearch >elasticsearch.log 2>&1 & //ES啟動(dòng)服務(wù)
nohup ./logstash >logstash.log 2>&1 & //logstash啟動(dòng)服務(wù)
nohup ./filebeat -e -c filebeat.yml >filebeat.log 2>&1 & // filebeat啟動(dòng)服務(wù)
nohup ./kibana >kibana.log 2>&1 & //kibana啟動(dòng)服務(wù)
2)啟動(dòng)后可以在瀏覽器中輸入192.168.45.2:5601來(lái)進(jìn)入kibana界面進(jìn)行日志查詢(xún)
