「ELK」是三個開源項目的首字母縮寫:Elasticsearch,Logstash和Kibana。mysql
Elastic Stack比ELK Stack更加靈活且強大git
目前官網的ELK教程使用的是ElasticSearch+Filebeat+Kibana,因此咱們也先使用這三個組件來從零搭建ELK,關於Logstash後文會用到。github
Filebeat是一個輕量級的收集與發送日誌數據的組件,將它安裝在你的服務器上,相似一個代理,它將監控你指定路徑下的日誌文件,而後將日誌信息發送給ElasticSearch或LogStashsql
請自行選擇本身的操做系統進行安裝,並找到對應的安裝目錄,好比我如今使用的是Mac系統,下載下來的爲gzip的壓縮包,而後直接解壓便可,以下圖: 數據庫
所在目錄爲/ekl。./elasticsearch-7.1.0/bin/elasticsearch
複製代碼
./kibana-7.1.0-darwin-x86_64/bin/kibana
複製代碼
cd filebeat-7.1.1-darwin-x86_64
./filebeat modules enable mysql
./filebeat -e -c filebeat.yml
複製代碼
瀏覽器打開http://localhost:5601瀏覽器
Collapse默認是收起來的,展開後可找到Dashboard,點擊便可bash
Dashboard頁面的展現出來了filebeat幫咱們建立的索引,以下圖: 服務器
在Index pattern輸入filebeat*
便可匹配到filebeat所建立的索引: 微信
第二步須要咱們選擇一個時間字段,時間過濾器將使用此字段按時間過濾數據。您能夠選擇不包含時間字段,但沒法按時間範圍縮小數據範圍。不太明白這個時間字段意思,咱們選擇下拉列表的最後一個可選值I don't want to use the Time Filter
,而後點擊Create index pattern。建立後進入到的頁面展現出了索引所包含的字段以及字段類型,而且你也是能夠去修改字段類型的,這裏就不演示了。架構
點擊進入到Discover就能夠進行查看和搜索日誌,以下下圖:
可使用KQL語法來搜索日誌,關於KQL語法咱們用另一篇文章來介紹吧,如今你只須要知道它是使用Kibana時進行快速搜索的語法。
Filebeat是負責收集日誌以及傳輸的,Filebeat默認的配置文件精簡後以下:
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: false
paths:
- /var/log/*.log
#- c:\programdata\elasticsearch\logs\*
#================================ Outputs =====================================
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]
#----------------------------- Logstash output --------------------------------
#output.logstash:
# The Logstash hosts
#hosts: ["localhost:5044"]
複製代碼
Filebeat分爲數據輸入配置與數據輸出配置。 默認配置文件中數據輸入配置表示從/var/log/
這個目錄下獲取.log
的文件內容,可是暫時沒有打開。 默認配置文件中數據輸出配置表示輸出到localhost:9200
這個主機的elasticsearch中。
因此若是咱們想獲取咱們本身應用的日誌信息,咱們須要將應用日誌存在某個文件中,而後修改FileBeat的配置文件。 這裏在GitHub上我建立了一個項目,你們能夠自由克隆使用,這個項目在打印日誌的時候會將日誌輸出到/var/log/elk/app.log
文件中。
而後咱們修改Filebeat的配置文件,修改部分爲:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/elk/*.log
複製代碼
而後重啓Filebeat。
運行一下項目中的Main方法,就會產生一條日誌並存儲到/var/log/elk/app.log中,好比我目前這個文件中的內容爲:
回到Kibana進行查詢咱們就能夠查詢到這條日誌了,固然這中間可能須要等個幾秒鐘,由於Filebeat須要時間需發現你新增的日誌並傳輸到ElasticSearch中。你能夠在Kibana的Filters輸入框中輸入log.file.path : /var/log/elk/app.log
表示利用KQL來精確的查詢內容,查詢結果爲:
日誌文件中的內容對應爲ElasticSearch中的message字段,我這裏是由於手動修改過文件內容,因此這裏查出來的message內容不太正確,相信你按我上面的步驟來操做會獲得你想要的結果的。
事實上經過上面的步驟就實現了收集你本身應用的日誌了。
咱們利用ElasticSearch、Kibana、Filebeat已經搭建了一套日誌系統,彷佛知足了需求,可是要注意Filebeat的特色是輕量級的收集日誌器,功能比較單一,而且一般會從多個渠道收集日誌,好比mysql、系統日誌、應用日誌等等,那麼若是咱們想對這些日誌進行統一加工的話,就須要用到LogStash。
下載地址(體積有點大,休息一下吧,要麼趁機點贊並轉發?)
LogStash默認的配置文件是config/logstash.yml。 配置文件的基本格式是:
# This is a comment. You should use comments to describe
# parts of your configuration.
input {
...
}
filter {
...
}
output {
...
}
複製代碼
也有輸入、輸出,還有一個過濾器,這個過濾器就是LogStash的特別之處,也須要另一篇博客進行詳細的講解。那麼咱們這裏列一個簡單的配置文件,文件名稱爲elk-conf:
# 表示監聽5044端口,Filebeat將把日誌數據發送給此端口
input {
beats {
port => 5044
}
}
# 將接收到的日誌在控制檯進行輸出而且傳輸到elasticsearch中
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { }
}
複製代碼
咱們先按上面的配置測試一下,在這以前須要將Filebeat中的日誌數據輸出配置改一下:
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
複製代碼
改好以後能夠先啓動LogStash,再重啓Filebeat,否則在啓動Filebeat的時候會連不上5044端口而報錯,使用一下命令啓動LogStash:
bin/logstash -f config/elk-conf.yml
複製代碼
若是啓動LogStash出現「Logstash stopped processing because of an error: (ArgumentError) invalid byte sequence in US-ASCII」錯誤,是由於配置文件的全路徑中有中文,改爲英文吧...
若是你是其餘系統遇到了其餘錯誤,能夠在留言區進行反饋。
啓動LogStash成功後,咱們手動改變如下app.log中的內容,爲了之後講LogStash方便你們複製如下內容到app.log文件中吧:
83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
複製代碼
正常的話會在LogStash的控制檯看見該日誌內容,這裏就不貼圖了,由於控制檯打印的信息其實比較多,爲何會這麼多?這個都跟LogStash有關係,這裏就很少解釋了。 控制檯看到到了日誌後,咱們如今去Kibana中看看,Kibana目前所匹配的索引是filebeat*
,這個匹配模式是查不到咱們剛剛新增的信息的,由於如今這條日誌是經過LogStash發送到ElasticSearch中的,建立的索引是logstash-2019.06.12-000001,因此咱們以前在Kibana建立的Index Pattern是查不到這條日誌的,咱們能夠在Kibana中按照上文的步驟再來建立一個Index Pattern以匹配logstash所發送的日誌,建立成功後,咱們回到Kibana中的Discover模塊就會以下圖,而且能夠切換Index Pattern以查看日誌,同時也能看到咱們上面建立的logstash日誌。
最終的架構圖以下:
到此爲止,日誌系統已見雛形,我是徹底基於Elastic Stack中最新版本的組件所搭建的,但願你們在各自的系統中手動搭建,若有疑問請留言,我會盡快修正。若是以爲這篇文章能讓你學到知識,可否幫忙轉發,將知識分享出去。
若是想第一時間學習更多的精彩的內容,請關注微信公衆號:1點25