###### tags: `Elastic Stack` # Elastic stack(安裝篇) [toc] 小弟最近工作需要用 Elastic Stack,整理了一下安裝的重點筆記來跟大家分享。 (註:寫完這篇之後不久就更新到 6.6.0了,但原則上安裝方法是一致的) ## 一、前情提要(簡介) 首先,什麼是 Elastic Stack? Elastic stack 就是大家很常聽到的 ELK Stack,最近被正名為 Elastic stack, 而它主要由三個部份所組成,分別是 Elasticsearch、Logstash、Kibana。 大致上的架構圖如下: ![](https://i.imgur.com/PfNJ5og.png) 其中最為核心的部份就是 **Elasticsearch**,它底層應用 **Apache Lucene** 做全文檢索, 且形式上是將實際資料以 **JSON** 格式儲存的 **NoSQL** 資料庫。 Logstas h則是做 **Extract, Load, Transfer(ETL)**, 將資料從輸入(input)透過篩選機制(Filter)最後輸出(output)到elasticsearch。 Kibana 則是透過 UI 介面管理 Elasticsearch 的資料, 並進一步以視覺化的方式將數據作呈現供業務單位作分析。 除了 Elasticsearch, Logstash, Kibana 之外, 還有一個可以在架構圖中看到的就是 Beats, 它主要是作資料傳輸(Data shipping),依其傳輸型態區分 Metricbeat、Filebeat、WinLogBeat、Heartbeat… 等, 在目前需求的實際應用上我們選擇了 Filebeats。 除了以上主要的功能之外,這間公司也提供了很多的 Solution 來整合、強化這些資料的應用, 如資訊安全、商業分析、機器學習、以及最近似乎也很紅的 APM(Application Performance Monitoring)。 當然,有一些功能是要付費才能使用的。 ## 二、主菜(實際安裝) 這個部份主要會簡單介紹如何建立起整個 Elastic stack 的循環, 我們的機器配置如下: * OS : CentOS 7 64-bit * RAM: 8G * CPU: 2-Core * HDD: 64GB ### 1.安裝JDK 由於Elastic stack幾乎所有的組成都是以Java開發的,所以要先安裝**JDK**才能正常執行。 版本上我們是選擇JDK 8(註: 官方在Elastic stack 6.5 版已支援到Java 11) 執行的指令 -> **sudo yum install java-1.8.0-openjdk-devel** 安裝完之後記得執行兩個指令確認有正常安裝完成: a.**java -version** b.**javac -version** 如下圖,都沒有顯示錯誤就代表OK囉! ![](https://i.imgur.com/DAtosjR.png) ### 2.安裝elasticsearch Elasticsearch 這一系列的產品都有提供三種安裝方式,yum, tar, rpm, 在此我們選擇用 rpm 的方式作安裝。 #### a.首先先下載rpm檔 `wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.rpm` ![](https://i.imgur.com/sYXBQ5A.png) (**註:** 如果出現wget command not found,記得先用yum install wget安裝) #### b.接著下載checksum `wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.rpm.sha512` ![](https://i.imgur.com/ZCV6s6E.png) #### c.檢查下載的檔案無誤 `sha512sum -c elasticsearch-6.5.1.rpm.sha512` #### d.開始安裝: `sudo rpm –install elasticsearch-6.5.1.rpm` 安裝完成之後也先別急著關機,還有幾個步驟要做, 確保安裝好的elasticsearch有如預期正常運作。 #### e.至/etc/elasticsearch/elasticsearch.yml調整host與port ![](https://i.imgur.com/P19YHIh.png) #### f.將elasticsearch打開 `sudo systemctl start elasticsearch.service` #### g.接著利用curl測試是否有通 -> curl -X GET “您的機器的IP:9200/” 如果有通的話會顯示如下的畫面: ![](https://i.imgur.com/RHwMDNG.png) ### 3.安裝Kibana Kibana 的安裝跟 elasticsearch 一樣簡單,跟著步驟做就對了! #### a.下載rpm `wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-x86_64.rpm` #### b.下載checksum `wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-x86_64.rpm.sha512` #### c.檢查下載的檔案無誤 `sha512sum -c kibana-6.5.1-x86_64.rpm.sha512` #### d.安裝開始 `sudo rpm –install kibana-6.5.1-x86_64.rpm` (**註:**安裝時看起來似乎卡住了,其實不然,千萬別按 ctrl+c) 一樣,安裝完別急著下班… 來驗證一下是否安裝成功吧! #### e.至/etc/kibana/kibana.yml 設定 host 與 port ![](https://i.imgur.com/w9NM5hV.png) #### f.啟動kibana `sudo systemctl start kibana.service` #### g.打開瀏覽器,看5601 port是否有顯示畫面如下 ![](https://i.imgur.com/XYjgIGC.png) ### 4.安裝 Filebeat Filebeat是資來傳輸的專家,負責幫忙監視某個資料夾內的log, 如果有任何的變化就會將內容送到指定的目的(預設是logstash)。 #### a.下載 rpm 檔 `wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.1-x86_64.rpm` #### b.安裝 filebeat `sudo rpm -vi filebeat-6.5.1-x86_64.rpm` #### c.調整設定檔(filebeat.yml)如下 ![](https://i.imgur.com/2AufteG.png) ![](https://i.imgur.com/YdOZW1G.png) > `<strong style="color:red;">[注意]</strong>`安裝完先別急著啟動 filebeat,它的輸出目的地 logstash 還沒安裝呢! ### 5.安裝Logstash: 最後要安裝的是轉換資料來源的 logstash, logstash 的設定會有一點多, 還請各位多留意。 #### a.下載tar檔 `wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.1.tar.gz` #### b.解壓縮 `tar xzvf logstash-6.5.1.tar.gz` #### c.將解壓縮後的logstash搬到喜歡的路徑, 本人是統一和 elasticsearch, kibana 一樣放在 /etc底下。 指令: **mv logstash-6.5.1 /etc/logstash** 解壓縮完的目錄結構應該會是如下圖: ![](https://i.imgur.com/HzAjkHj.png) #### d.接著要設定一下 logstash 的 user/group, 打開 config/startup.options,如下修改: ![](https://i.imgur.com/9Wtt92q.png) 因為我的電腦只有一個 root 使用者故這樣設定, 或許上 production 環境的時候該賦予 logstash 適當的 user/group。 #### e.開始安裝: 先切到 /etc/logstash/bin目錄下, 接著執行 -> ./system-install, 安裝完成如下圖: ![](https://i.imgur.com/xng9DRL.png) #### f.裝完之後要針對input, filter, output做一些設定 首先先在/etc/logstash/bin下建立一個 logstash-simple.conf 並接著填入以下的內容: ![](https://i.imgur.com/2jgQLcY.png) 如上圖,留意設定「來源」及「輸出」的部份, 至於 filte r由於比較複雜,先照著圖設定吧, 之後有機會會再詳細說明, 或是可以參考 [Logstash設定](https://www.elastic.co/guide/en/logstash/current/config-examples.html) #### g.接著要設定啟動logstash的時候讀上面步驟設定的內容 ```bash= cd /etc/systemd/system vi logstash.service ``` 將ExecStart的部份調整如下圖: ![](https://i.imgur.com/y7Ar53e.png) ### 6.全部串起來! 在裝完所有的東西之後, 就要來試試是不是真的能如想像中的流程運作了。 大致上會是如下流程: 1.Filebeat 從 log 讀取資料傳給 logstash。 2.Logstash 依據 filter 處理資料後丟給 elasticsearch。 3.Elasticsearch 會依 Logstash 傳入的資訊建立 Index。 4.透過 Kibana 以 Index Pattern 匯總 Elasticsearch的Index。 5.建立基本的視覺化。 那麼,就讓我們開始吧! #### 首先,先啟動Elasticsearch。 `sudo systemctl start elasticsearch.service` #### 接著,啟動Kibana。 `sudo systemctl start kibana.service` #### 再來先放一個檔案到/var/log目錄底下 此範例內容大致上就是一些json型態的log, 需要的可參考以[下載](https://ufile.io/4vx3m) #### 放完log,該啟動filebeat了 `sudo systemctl start filebeat.service` #### 最後再啟動logstash `sudo systemctl start logstash.service` 如果一切正常,可以在 Management -> Elasticsearch 看到如下畫面: ![](https://i.imgur.com/OU0bBLW.png) 這代表 Logstash 將 log 檔裡的內容解析, 並透過 AP I在 elasticsearch 建立了 Index。 接著我們再利用 Kibana 建立 Index Pattern 如下圖: ![](https://i.imgur.com/3GvgQgV.png) 其中下方的 index 為 logstash 透過 API 在 elasticsearc h建立的 index, 透過設定 index pattern 為「filebeat*」, 就可以把所有 filebeat 開頭的「Elasticsearch」index 匯總, 在 Kibana 以一個 Pattern 建立符合 Pattern 的所有資料。 (註:step 2/2設定Time filter field為@timestamp即可) 如果好奇收了什麼資料,可以去「Discover」瞧瞧,如下圖: ![](https://i.imgur.com/sF2XTMn.png) 最後可以透過「Visualization」針對資料圖型化, 如下圖是以圓餅圖呈現常用系統使用的port: ![](https://i.imgur.com/NStdbjI.png) ## 三、結語: 以上,是整個 Elastic stack的安裝篇, 往後有機會再分享實戰篇講解各個部件的詳細說明, 畢竟整個 stack 相當的大而廣,本人也尚在學習當中, 希望以上的經驗可以讓各位更順利導入 Elastic stack,謝謝。