思惟導圖
![](http://static.javashuo.com/static/loading.gif)
文章已收錄Github精選,歡迎Star:https://github.com/yehongzhi/learningSummaryjava
概述
咱們都知道,在生產環境中常常會遇到不少異常,報錯信息,須要查看日誌信息排查錯誤。如今的系統大多比較複雜,即便是一個服務背後也是一個集羣的機器在運行,若是逐臺機器去查看日誌顯然是很費力的,也不現實。node
若是能把日誌所有收集到一個平臺,而後像百度,谷歌同樣經過關鍵字搜索出相關的日誌,豈不快哉。因而就有了集中式日誌系統。ELK就是其中一款使用最多的開源產品。linux
1、什麼是ELK
ELK實際上是Elasticsearch,Logstash 和 Kibana三個產品的首字母縮寫,這三款都是開源產品。git
ElasticSearch(簡稱ES),是一個實時的分佈式搜索和分析引擎,它能夠用於全文搜索,結構化搜索以及分析。程序員
Logstash,是一個數據收集引擎,主要用於進行數據收集、解析,並將數據發送給ES。支持的數據源包括本地文件、ElasticSearch、MySQL、Kafka等等。github
Kibana,爲 Elasticsearch 提供了分析和 Web 可視化界面,並生成各類維度表格、圖形。web
![](http://static.javashuo.com/static/loading.gif)
2、搭建ELK
環境依賴:CentOS7.5,JDK1.8,ElasticSearch7.9.3,Logstash 7.9.3,Kibana7.9.3。shell
2.1 安裝ElasticSearch
首先,到官網下載安裝包,而後使用tar -zxvf
命令解壓。json
![](http://static.javashuo.com/static/loading.gif)
找到config目錄下的elasticsearch.yml文件,修改配置:瀏覽器
cluster.name: es-application
node.name: node-1
#對全部IP開放
network.host: 0.0.0.0
#HTTP端口號
http.port: 9200
#elasticsearch數據文件存放目錄
path.data: /usr/elasticsearch-7.9.3/data
#elasticsearch日誌文件存放目錄
path.logs: /usr/elasticsearch-7.9.3/logs
配置完以後,由於ElasticSearch使用非root用戶啓動,因此建立一個用戶。
# 建立用戶
useradd yehongzhi
# 設置密碼
passwd yehongzhi
# 賦予用戶權限
chown -R yehongzhi:yehongzhi /usr/elasticsearch-7.9.3/
而後切換用戶,啓動:
# 切換用戶
su yehongzhi
# 啓動 -d表示後臺啓動
./bin/elasticsearch -d
使用命令netstat -nltp
查看端口號:
![](http://static.javashuo.com/static/loading.gif)
訪問http://192.168.0.109:9200/能夠看到以下信息,表示安裝成功。
![](http://static.javashuo.com/static/loading.gif)
2.2 安裝Logstash
首先在官網下載安裝壓縮包,而後解壓,找到/config目錄下的logstash-sample.conf文件,修改配置:
input {
file{
path => ['/usr/local/user/*.log']
type => 'user_log'
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["http://192.168.0.109:9200"]
index => "user-%{+YYYY.MM.dd}"
}
}
input表示輸入源,output表示輸出,還能夠配置filter過濾,架構以下:
![](http://static.javashuo.com/static/loading.gif)
配置完以後,要有數據源,也就是日誌文件,準備一個user.jar應用程序,而後後臺啓動,而且輸出到日誌文件user.log中,命令以下:
nohup java -jar user.jar >/usr/local/user/user.log &
接着再後臺啓動Logstash,命令以下:
nohup ./bin/logstash -f /usr/logstash-7.9.3/config/logstash-sample.conf &
啓動完以後,使用jps
命令,能夠看到兩個進程在運行:
![](http://static.javashuo.com/static/loading.gif)
2.3 安裝Kibana
首先仍是到官網下載壓縮包,而後解壓,找到/config目錄下的kibana.yml文件,修改配置:
server.port: 5601
server.host: "192.168.0.111"
elasticsearch.hosts: ["http://192.168.0.109:9200"]
和elasticSearch同樣,不能使用root用戶啓動,須要建立一個用戶:
# 建立用戶
useradd kibana
# 設置密碼
passwd kibana
# 賦予用戶權限
chown -R kibana:kibana /usr/kibana/
而後使用命令啓動:
#切換用戶
su kibana
#非後臺啓動,關閉shell窗口即退出
./bin/kibana
#後臺啓動
nohup ./bin/kibana &
啓動後在瀏覽器打開http://192.168.0.111:5601,能夠看到kibana的web交互界面:
![](http://static.javashuo.com/static/loading.gif)
2.4 效果展現
所有啓動成功後,整個過程應該是這樣,咱們看一下:
![](http://static.javashuo.com/static/loading.gif)
瀏覽器打開http://192.168.0.111:5601,到管理界面,點擊「Index Management」能夠看到,有一個user-2020.10.31
的索引。
![](http://static.javashuo.com/static/loading.gif)
點擊Index Patterns
菜單欄,而後建立,命名爲user-*。
![](http://static.javashuo.com/static/loading.gif)
最後,就能夠到Discover欄進行選擇,選擇user-*的Index Pattern,而後搜索關鍵字,就找到相關的日誌了!
![](http://static.javashuo.com/static/loading.gif)
3、改進優化
上面只是用到了核心的三個組件簡單搭建的ELK,其實是有缺陷的。若是Logstash須要添加插件,那就所有服務器的Logstash都要添加插件,擴展性差。因此就有了FileBeat,佔用資源少,只負責採集日誌,不作其餘的事情,這樣就輕量級,把Logstash抽出來,作一些濾處理之類的工做。
![](http://static.javashuo.com/static/loading.gif)
FileBeat也是官方推薦用的日誌採集器,首先下載Linux安裝壓縮包:
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-linux-x86_64.tar.gz
下載完成後,解壓。而後修改filebeat.yml配置文件:
#輸入源
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/user/*.log
#輸出,Logstash的服務器地址
output.logstash:
hosts: ["192.168.0.110:5044"]
#輸出,若是直接輸出到ElasticSearch則填寫這個
#output.elasticsearch:
#hosts: ["localhost:9200"]
#protocol: "https"
而後Logstash的配置文件logstash-sample.conf,也要改一下:
#輸入源改爲beats
input {
beats {
port => 5044
codec => "json"
}
}
而後啓動FileBeat:
#後臺啓動命令
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &
再啓動Logstash:
#後臺啓動命令
nohup ./bin/logstash -f /usr/logstash-7.9.3/config/logstash-sample.conf &
怎麼判斷啓動成功呢,看Logstash應用的/logs目錄下的logstash-plain.log日誌文件:
![](http://static.javashuo.com/static/loading.gif)
寫在最後
目前,不少互聯網公司都是採用ELK來作日誌集中式系統,緣由很簡單:開源、插件多、易擴展、支持數據源多、社區活躍、開箱即用等等。我見過有一個公司在上面的架構中還會加多一個Kafka的集羣,主要是基於日誌數據量比較大的考慮。可是呢,基本的三大組件ElasticSearch,Logstash,Kibana是不能少的。
但願這篇文章能幫助你們對ELK有一些初步的認識,感謝你們的閱讀。
以爲有用就點個贊吧,你的點贊是我創做的最大動力~
我是一個努力讓你們記住的程序員。咱們下期再見!!!
能力有限,若是有什麼錯誤或者不當之處,請你們批評指正,一塊兒學習交流!
本文分享自微信公衆號 - java技術愛好者(yehongzhi_java)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。