基於Elastic Stack最新版本搭建ELK

什麼是ELK Stack

「ELK」是三個開源項目的首字母縮寫:Elasticsearch,Logstash和Kibana。mysql

  • Elasticsearch是一個搜索和分析引擎。
  • Logstash是一個服務器端數據處理管道,它同時從多個源中提取數據,對其進行轉換,而後將其發送到好比Elasticsearch這樣的「數據庫」中進行存儲。
  • Kibana能夠對Elasticsearch中的數據進行數據可視化。

什麼是Elastic Stack

Elastic Stack比ELK Stack更加靈活且強大git

Elastic Stack發展歷程

  • Elasticsearch是核心
  • LogStash負責數據的收集與發送、Kibana負責展現數據
  • 社區愈來愈大,使用案例也愈來愈多
  • 2015年,社區在ELK Stack中引入了一系列輕量級,單用途的數據發送器,叫作Beats
  • 那麼這個階段的Stack,咱們到底應該叫BELK? BLEK? ELKB? 首字母縮寫並不重要
  • 如此簡單易用開源的產品,不該該只侷限於首字母縮寫,因此有了Elastic Stack

從零搭建ELK,快速收集Mysql日誌並實現可視化

目前官網的ELK教程使用的是ElasticSearch+Filebeat+Kibana,因此咱們也先使用這三個組件來從零搭建ELK,關於Logstash後文會用到。github

Filebeat是一個輕量級的收集與發送日誌數據的組件,將它安裝在你的服務器上,相似一個代理,它將監控你指定路徑下的日誌文件,而後將日誌信息發送給ElasticSearch或LogStashsql

下載並解壓

請自行選擇本身的操做系統進行安裝,並找到對應的安裝目錄,好比我如今使用的是Mac系統,下載下來的爲gzip的壓縮包,而後直接解壓便可,以下圖: 數據庫

image.png
所在目錄爲/ekl。

運行

啓動ElasticSearch

./elasticsearch-7.1.0/bin/elasticsearch
複製代碼

啓動Kibana

./kibana-7.1.0-darwin-x86_64/bin/kibana
複製代碼

啓動Filebeat

cd filebeat-7.1.1-darwin-x86_64
./filebeat modules enable mysql
./filebeat -e -c filebeat.yml
複製代碼

使用Kibana

1. 訪問Kibana

瀏覽器打開http://localhost:5601瀏覽器

2. 進入dashboard

image.png

Collapse默認是收起來的,展開後可找到Dashboard,點擊便可bash

3.初始化

Dashboard頁面的展現出來了filebeat幫咱們建立的索引,以下圖: 服務器

image.png

在Index pattern輸入filebeat*便可匹配到filebeat所建立的索引: 微信

image.png
點擊Next step,表示咱們如今想將filebeat*所匹配到的索引數據在kibana中進行查看。

第二步須要咱們選擇一個時間字段,時間過濾器將使用此字段按時間過濾數據。您能夠選擇不包含時間字段,但沒法按時間範圍縮小數據範圍。不太明白這個時間字段意思,咱們選擇下拉列表的最後一個可選值I don't want to use the Time Filter,而後點擊Create index pattern。建立後進入到的頁面展現出了索引所包含的字段以及字段類型,而且你也是能夠去修改字段類型的,這裏就不演示了。架構

4. 使用

點擊進入到Discover就能夠進行查看和搜索日誌,以下下圖:

image.png

可使用KQL語法來搜索日誌,關於KQL語法咱們用另一篇文章來介紹吧,如今你只須要知道它是使用Kibana時進行快速搜索的語法。

收集你本身的應用日誌

Filebeat配置文件

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的配置文件,修改部分爲:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/elk/*.log
複製代碼

而後重啓Filebeat。

產生並查看應用日誌

運行一下項目中的Main方法,就會產生一條日誌並存儲到/var/log/elk/app.log中,好比我目前這個文件中的內容爲:

image.png
回到Kibana進行查詢咱們就能夠查詢到這條日誌了,固然這中間可能須要等個幾秒鐘,由於Filebeat須要時間需發現你新增的日誌並傳輸到ElasticSearch中。你能夠在Kibana的Filters輸入框中輸入 log.file.path : /var/log/elk/app.log表示利用KQL來精確的查詢內容,查詢結果爲:
image.png
日誌文件中的內容對應爲ElasticSearch中的message字段,我這裏是由於手動修改過文件內容,因此這裏查出來的message內容不太正確,相信你按我上面的步驟來操做會獲得你想要的結果的。

總結

事實上經過上面的步驟就實現了收集你本身應用的日誌了。

集成LogStash

咱們利用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

啓動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日誌。

image.png

總結

最終的架構圖以下:

image.png
到此爲止,日誌系統已見雛形,我是徹底基於Elastic Stack中最新版本的組件所搭建的,但願你們在各自的系統中手動搭建,若有疑問請留言,我會盡快修正。

若是以爲這篇文章能讓你學到知識,可否幫忙轉發,將知識分享出去。

若是想第一時間學習更多的精彩的內容,請關注微信公衆號:1點25

相關文章
相關標籤/搜索