一:概念
ELK是Elasticsearch喳逛、Logstash瞧捌、Kibana三大開源框架首字母大寫簡稱,具體這三個工具的詳細(xì)介紹润文,百度都解釋的很詳細(xì)姐呐,今天我主要分享一下我實際中使用的問題和難點。
二:目的
簡單來說就是快速查看項目錯誤日志典蝌,快速鎖定問題曙砂。由于項目的使用用戶日益劇增,一臺服務(wù)器已經(jīng)扛不住上萬人的訪問系統(tǒng)骏掀,導(dǎo)致系統(tǒng)訪問慢鸠澈,超時等問題。所以團(tuán)隊開始提出負(fù)載均衡以及集群的一個搭建截驮,下個文章我會分享我在負(fù)載均衡以及配置nginx等詳細(xì)文章笑陈,這里就不多介紹了。集群搭建好了就出現(xiàn)一個問題--日志葵袭。由于我們?nèi)罩疚募际窃诿總€集群服務(wù)器涵妥,導(dǎo)致系統(tǒng)異常,我們無法快速追蹤到具體出錯日志在哪臺服務(wù)器坡锡,所以就開始在網(wǎng)上查找具體解決方案蓬网,這才看到ELK,了解了他們之間的原理后鹉勒,我就開始在測試環(huán)境部署帆锋,下面是我根據(jù)自己的理解畫的部署以及原理圖。
三:安裝環(huán)境
服務(wù)器系統(tǒng):Windows server 2012 r2
Elasticsearch版本:elasticsearch-7.7.0-windows-x86_64
Logstash版本:logstash-7.7.0
Kibana版本:kibana-7.7.0-windows-x86_64
(為了產(chǎn)生不必要的麻煩贸弥,最好這三個版本一致窟坐。官網(wǎng)下載比較慢,可以去華為開源鏡像站:https://mirrors.huaweicloud.com/ 下載)
四:安裝步驟
將Elasticsearch哲鸳、Logstash和Kibana下載后臣疑,解壓。目錄不要帶中文徙菠。安裝順序:先安裝Elasticsearch讯沈,再安裝Logstash,最后安裝Kibana
1婿奔、Elasticsearch的安裝與配置
找到根目錄的config文件夾缺狠,elasticsearch.yml進(jìn)行編輯,直接添加以下內(nèi)容萍摊,或者你可以找到對應(yīng)的字段挤茄,將注釋放開。默認(rèn)是本機(jī)可以訪問冰木,因為我要其他兩臺也能給**Elasticsearch傳輸數(shù)據(jù)穷劈,所以network.host我設(shè)置為 0.0.0.0。
node.name: nodes
http.cors.enabled: true
http.cors.allow-origin: "*"
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["nodes"]
到這里Elasticsearch的配置就已經(jīng)完工了踊沸,然后就是啟動歇终,根目錄下bin文件下的elasticsearch.bat,以管理員身份運行就可以啟動elasticsearch逼龟,啟動成功后瀏覽器訪問http://127.0.0.1:9200/评凝,看到如下界面代表啟動成功
2、Logstash的安裝與配置
首先說明腺律,它主要負(fù)責(zé)讀取日志文件奕短,然后傳輸給Elasticsearch,所以我們就要配置Logstash的輸入(input)和輸出(output)疾渣,整個配置文件分為三部分:input篡诽,filter,output榴捡。下來我們就開始以這三個參數(shù)在實際應(yīng)用是如何配置的杈女。在配置的前提,我們需要創(chuàng)建一個logstash.conf文件吊圾,創(chuàng)建地址為根目錄的confIg下面(或者復(fù)制logstash-sample.conf达椰,進(jìn)行名稱修改)
a、input參數(shù)配置
input {
file {
type => "d_52"
start_position => "beginning"
path => "D:/_projectLog/projectWeb/debug.log"
codec => plain{charset=>"GBK"}
}
}
input {
file {
type => "e_52"
start_position => "beginning"
path => "D:/_projectLog/projectWeb/error.log"
codec => plain{charset=>"GBK"}
}
}
input的解釋說明:我寫了兩個input项乒,因為我要把兩個日志文件分別輸出啰劲,所以這塊的配置是讀取多個文件。type:是我定義這個文件的類型檀何,具體用途就是對應(yīng)指定的tag蝇裤。start_position 檢查時間戳廷支。path 監(jiān)聽文件路徑。codec 主要是防止亂碼栓辜,當(dāng)然input中有很多屬性恋拍,根據(jù)具體情況指定吧。
filter的解釋說明:作用是過濾匹配藕甩。我是為了過濾tag施敢,在output中輸出到哪個索引中。
filter {
grok {
match => {
"message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) %{QS:referrer} %{QS:agent}'
}
}
if[type] == "d_52" {
mutate {
add_tag => ["d_52"]
}
}
if [type] == "e_52" {
mutate {
add_tag => ["e_52"]
}
}
}
output的解釋說明:根據(jù)tag推送到具體elasticsearch 的索引庫中狭莱。
output {
if "d_52" in [tags] {
elasticsearch {
hosts => "http://elasticsearch的ip:9200"
index => "project_debug_log-%{+YYYY.MM.dd}"
codec => plain{charset=>"GBK"}
}
}
if "e_52" in [tags] {
elasticsearch {
hosts => "http://**elasticsearch的ip**:9200"
index => "project_error_log-%{+YYYY.MM.dd}"
codec => plain{charset=>"GBK"}
}
}
stdout {
codec => json_lines
}
}
到這里僵娃,配置文件就完成了,然后我們啟動腋妙,具體啟動命令為logstash.bat -f ../config/logstash.conf(根目錄的bin下執(zhí)行)默怨,或者創(chuàng)建bat文件,把文件名改為bat骤素,放在bin下先壕,雙擊執(zhí)行,就可以看到控制臺讀取的數(shù)據(jù)內(nèi)容了谆甜。其他兩臺服務(wù)器,就只需要裝Logstash集绰,配置文件改一下path路徑规辱,type和tag也都改一下,標(biāo)記清除是哪個臺服務(wù)器的就行栽燕,為了在Kibana可以看到日志來源罕袋。
3、Kibana的安裝與配置
Kibana主要是讀取elasticsearch 的數(shù)據(jù)碍岔,那我們就在配置文件中配置elasticsearch 的地址就可以了浴讯,具體操作如下:
Kibana的根目錄config下的kibana.yml文件,添加下列配置
server.port: 5601 #Kibana的訪問端口
server.host: X.X.X.X #Kibana的訪問ip(內(nèi)網(wǎng)ip)蔼啦,最好不要寫127.0.0.1或者localhost榆纽,其他服務(wù)器就不能訪問了
elasticsearch.hosts: http://elasticsearch的ip:9200
i18n.locale: "zh-CN" #設(shè)置為中文
Kibana也就配置完了,bin目錄啟動kibana.bat捏肢,啟動好了奈籽,瀏覽器訪問http://配置的ip:5601,就可以了鸵赫。
按照指引創(chuàng)建成功后衣屏,看日志
整體沒有問題了,下來我們需要把Kibana和nginx結(jié)合起來辩棒,通過互聯(lián)網(wǎng)ip訪問狼忱。由于Kibana沒有登錄界面膨疏,我們就得借助nginx實現(xiàn)它的登錄,配置截圖如下
location / {
auth_basic "kibana login auth";
auth_basic_user_file D:/nginx/conf/passwd;# 存放密碼文件路徑
proxy_pass http://192.168.1.1:5601;# 轉(zhuǎn)發(fā)到 kibana
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
ok钻弄,外網(wǎng)訪問也沒有問題了佃却。結(jié)束了兩天的探索,也是第一次接觸ELK斧蜕,從了解到實踐双霍,有點意思。