一 ELK是什麼?
在項目初期的時候,大家都是趕着上線,一般來說對日誌沒有過多的考慮,當然日誌量也不大,所以用log4j就夠了,隨着應用的越來越多,日誌散落在各個服務器的logs文件夾下,確實有點不大方便。
當我們需要日誌分析的時候你大概會這麼做:直接在日誌文件中 grep、awk 就可以獲得自己想要的信息。
那你們想過這種方式的問題嗎?
1.日誌量太大如何歸檔、文本搜索太慢怎麼辦、如何多維度查詢
2.應用太多,面臨數十上百臺應用時你該怎麼辦
3.隨意登錄服務器查詢log對系統的穩定性及安全性肯定有影響
4.如果使用人員對Linux不太熟練那面對龐大的日誌簡直要命。
ELK因此就應運而生,那麼爲什麼要用ELK呢?ELK又能給我們解決哪些問題呢?
1.日誌統一收集,管理,訪問。查找問題方便安全:收集放到搜索引擎中。也就就是ELK中的E表示es:分佈式搜索引擎存儲庫。是一個Nosql。其核心是倒排索引庫。可存TB級的數據。
2.使用簡單,可以大大提高定位問題的效率:一個頁面搞定所有查詢。K:kibana。
3.可以對收集起來的log進行分析。L:Logstash,就是用收集日誌。會部署到應用服務器上面。還可以提供過濾功能。
4.能夠提供錯誤報告,監控機制。
二 ELK架構設計
ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件
1. LogStash
它可以流放到各自的服務器上收集Log日誌,通過內置的ElasticSearch插件解析後輸出到ES中
2.ElasticSearch
這是一個基於Lucene的分佈式全文搜索框架,可以對logs進行分佈式存儲,有點像hdfs。此爲ELK的核心組件,日誌的分析以及存儲全部由es完成,因此在後面的課程中我們還會對此進行重點講解。
3. Kibana:論壇。大屏展示
它可以多維度的展示es中的數據。可提供圖表展示,造出一些非常炫酷的頁面。這也解決了用mysql存儲帶來了難以可視化的問題。他提供了豐富的UI組件,簡化了使用難度,數據在es中的展示是比較讓人蛋疼的,後面再講es的時候讓大家看看。
目前ELK主要有兩種框架:
1.普通框架:這一套框架不會影響生成應用。唯一形象的就是logstash會耗一點系統資源。
2.個性化擴展框架(針對日誌數據需要二次處理以及多方使用的場景):kafka(不建議用,除非針對TB數據):
Filebeat:
三、如何快速搭建一套穩定的ELK環境
1.官方下載(鏈接如下,該鏈接可以選各種es插件和版本)
https://www.elastic.co/downloads/past-releases
2.建議版本:elasticsearch 2.4.6, lucene版本. 5.x。 6. 7.(我搭的2.4.6,注意:es5.+版本,比較麻煩,2.4.6夠用了)
單機版EKL的安裝(集羣和單機差不多,按上邊架構搭就ok了)
1 下載好,elasticsearch 2.4.6,kibana4.6.1 ,logstash2.4.0 (注意一定要安裝JDK7+,tomcat 運行一個項目)
2 把這些插件上傳到centos上
3 在/home目錄下建一個soft文件夾,用於裝這個機械上的插件,命令:cd /home/ mkdir soft
4 在soft文件夾中新建一個elk文件夾,裝es2.4.6和logstash和kibana
5 把上傳的e,l,k cp到soft/elk目錄下:cp /home/xxx/elasticsearch 2.4.6.tar.gz kibana4.6.1.tar.gz logstash2.4.0.tar.gz /home/soft/elk/
6 切換到elk 目錄 :cd /home/soft/elk/ 然後分別解壓:tar -zxvf elasticsearch 2.4.6.tar.gz ,其他的同理。一一解壓就好
7.1 安裝es2.4.6,先cd /elasticsearch 2.4.6 在cd /config 在修改elasticsearch.yml vim elasticsearch.yml
vim elasticsearch.ym
cluster.name: my-es#注意一個集羣裏面的機器一定要保持一致
node.name: node-01 #集羣需要改名字 同一個集羣裏面的名字不能相同(這是節點名字可以自己隨便寫)
node.master: true#儘量配置機器差作爲主節點 注意只有兩個節點的話第二個請配置爲false
node.data: true
network.host: 192.168.0.15(這個最好配置0.0.0.0 這樣就是外網可以訪問了)
http.port: 9200 (http端口,將來訪問就是這個端口)
transport.tcp.port: 9300 (數據傳輸端口)
端口9300 需要想防火牆開放,防火牆關了也需要開放 命令:
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
8 可以啓動了,(注意root無法啓動,可以新建一個用戶 elk ,並且把soft這個文件的所有者改成elk,這樣elk就可以操作 soft文件夾下的所有文件了,)root啓動權限太高,不允許,elk用戶啓動需要又寫和執行的權限操作,所以直接把soft文件 夾一次性把所有者改成elk 命令:cd /home/ chown -R elk soft 這樣就把soft文件夾的所有者改成elk了,這樣就可以去 啓動了
命令:cd /home/soft/elk/ cd elasticsearch-2.4.6/ ./bin/elasticsearch(前臺啓動) ./bin/elasticsearch -d (後臺啓動)
打開谷歌瀏覽器 在地址欄輸入xxxx.xxx.xxxx:9200
9 安裝es 的head插件 命令:在bin目錄下:./ plugin install mobz/ elasticsearch-head
輸入 http://192.168.0.xxx:9200/_plugin/head/ 驗證 出現下面界面成功
2 安裝logstash
1 剛剛在soft裏的elk中已經解壓了logstash了,直接修改配置文件就好
2 先cd logstash-2.4.0/ ,再mkdir config 再cd config/ 再 touch log.conf 文件 再vim log,conf
input {
file {
type => "log"
path => ["/export/home/tomcat/domains/*/*/logs/*.out"]
start_position => "end"
ignore_older => 0
codec=> multiline { //配置log換行問題
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
}
beats {
port => 5044
}
}
output {
if [type] == "log" {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "log-%{+YYYY.MM}"
}
}
}
og,conf 的配置賦值上邊即可,就是改一改input中的path 你的項目運行的日誌生產目錄
3 logstash 就搞好了 然後啓動 再logstash-2.4.0的目錄下執行:./bin/logstash -f config/log.config(前臺啓動)
後臺啓動:nohup ./bin/logstash -f config/log.conf > log.log &
4 啓動完成後 刷新剛剛的鏈接就多處一個索引庫
三 安裝kibana4.6.1
1 kibana4.6.1剛剛也在soft文件夾中解壓了,直接進入kibana4.6.1 的config目錄下修改kibana.yml
目錄vim kibana.yml
2 啓動kibana 命令:./bin/kibana(前臺) nohup ../bin/kibana &(後臺啓動)
3 驗證 再谷歌瀏覽器中 輸入 http://xxx.xxx.xxx:5601
4 記住 es 的端口,和logstash和kibana的端口dou'都要開放,並且logstash中的日誌生成的文件夾的所有者必須是是一個人 elk 用戶,不然 logstash讀不到 項目產生的日誌,權限不夠 改文件所有者就用 chown -R 用戶名 wen'文件夾 這條命令吧
總結:es logstash kibana 解壓,修改各自的配置文件,開放端口。啓動,測試,和所有的或日誌生成目錄所有者是一個人,就ok了,其實前面說的大部分都是廢話,歡迎大家技術交流,小弟是初學蟄,勿見笑