ELKstack elasticsearch logstash kibana log

ELKstack簡介與搭建使用

林政儀 2016/07/18 09:14:21
1604







主題

ELKstack簡介與搭建使用

文章簡介

介紹ELKstack使用時機及搭建過程

作者

林政儀

版本/產出日期

V1.0/2016.07.17




1. 前言

ELKstack為elastic這間公司所推出的一個log收集監控方案。

ELKstack其實為Elasticsearch、Logstash、Kibana為三個獨立系統所串接之系統。

ELKstack用以解決log零散即無法及時獲取資訊之方案。

ELKstack可以將log資訊圖形、圖表化,利於分析。




2. 目的

本文會針對三個系統各自簡述功能與使用方法。

教學如何將三系統搭建串接起來,並收集log至畫面上呈現。




3. 開始前準備(ELK分別都有提供windoslinux環境的版本,本文以linux為教學環境。)

JDK7+

去官網下載Elasticsearch、Logstash、Kibana三個軟體:

Elasticsearch

Logstash

Kibana




4. 架構說明

Elasticsearch

做為索引引擎,以利查詢。簡單來說可以視為ELKstack的資料庫。

Logstash

做為收集資訊的agent。即為去收集log資訊並送給Elasticsearch。

Kibana

做為畫面的呈現。由Elasticsearch取得資料後呈現或製成圖表。

1. Logstash部屬在各機器上收集log資訊,並將每行視為一個event送給Elasticsearch

2. Elasticsearch收到event之後建立索引,以利查詢。

3. Kibana即為使用者介面,它會向Elasticsearch查詢資料來呈現。


5. ELK簡介

Elasticsearch

1. API接口皆為httpRestful API,資料格式皆為json

2. 底層為ApacheLucene全文搜尋引擎。

3. 可以建立clusterHA


Logstash

1. Jruby,因此需要jre

2. 其實不只可以收log可以由許多不同來源收集資料,處理後發送給許多異質系統

3. 因此Logstash為一個三層式架構,每一層可根據config隨意使用不同plugin達到收集、過濾、輸出目的


Kibana

1. 用以呈現所收集log

2. 可以簡單的呈現每行log,或者根據jsonkey-value來繪製圖形或圖表。


6. 搭建ELKstack

1. 準備好java環境、ElasticsearchLogstashKibana

2. 啟動Elasticsearch

進到elasticsearch的bin底下執行elasticsearch

確認是否啟動成功執行 wget http://localhost:9200

如果有下載index.html並內容同上圖,則表示elasticsearch啟動成功

3. 啟動Kibana

進到kibanabin底下執行kibana

確認是否啟動成功browser存取5601 port

頁面如上圖所示則表示kibana啟動成功。


7. 開始匯入log資料

1. 進到logstashbin底下,建立一個shipper.conf的檔案,並輸入以下內容

input {

file {

path => "/home/test/elasticsearch-2.3.4/logs/elasticsearch.log"

start_position => "beginning"

}

}

filter {


}

output {

stdout {

codec => rubydebug

}


elasticsearch {

hosts => ["localhost:9200"]

index => "logstash-test"

}

}

shipper.conf可以看到最外層有三個設定inputfilteroutput,即為之前所介紹logstash的三層架構,內部則是每層想要套用的plugin,更詳細的plugin請詳閱官網 -logstash 的說明。

input:使用一個fileplugin,在這裡指定要收集elasticsearchlog

filter:這裡為空,其實也不定要這一項設定。

output:這裡有使用stdoutelasticsearch兩個plugin,意即一個event(一行log)會送往consoleelasticsearch

2. 接著執行logstash ./logstash agent -f shipper.conf

就會看到以下的訊息

可以看到許多筆json資料,logstashinput層的時候會將log的每一行訊息收集放在messagekey裡,然後加上一些default訊息組成此次的event向後送到filter層,因此在filter層進行一些處理,就是由這個json觀點出發進行處理,接著再送到output層決定event要輸出到哪裡


8. 查看log資料

回到borwser,重整一下,即會看下方多出一個選項欄位

這是告訴kibana應該要用哪一個key的內容來顯示資料,若event沒有kibana認得的時間欄位,將無法顯示。


按下Create之後,點選上方的Discover


接著就可以看到訊息已顯示在畫面上了。


9. 參考來源

Elastic 官網

林政儀