Evonne 研究室

ELK建置:從零到有全攻略

前言

由於前陣子工作需要,必須建置ELK系統,剛好趁這個機會記錄一下如何從零到有建置ELK系統。
ELK 就是 Elasticsearch + Logstash + Kibana 三個服務取開頭字母的縮寫。

其中Elasticsearch是提供非關聯式Database資料庫的服務,Logstash負責處理資料的流動(data flow)與前處理。
比方說你想要有一個接口負責每天去訪問某隻API拿取資料後,前處理完,匯進Elasticsearch,就可以透過Logstash做到。
Kibana則是負責提供UI介面與資料分析的服務,可以在UI上用指令的方式查詢所有在Elasticsearch的資料,也可以在這邊設定監控Logstash服務是否正常。
另外我認為Kibana最強大的功能是他可以直接取用Elasticsearch的資料後,在UI上產生Dashboard視覺化這些資料,產出各種圖表加以分析。

簡單介紹到這邊,其實ELK還有很多非常強大的功能,有興趣可以到官方網站看看!
elastic 官網:https://www.elastic.co/

環境

我的機器是一台虛擬機 規格如下:
Ubuntu 20.04 LTS
VM Spec: 8GB RAM, 2 CUPs, 50GB Disk size

# To check your Ubuntu version
$ lsb_release -a

ELK建置與config設定

Pre-requesties 需要先安裝OpenJDK

由於ELK這套系統,底層是Java語言,所以使用上必須要安裝Java才能使用。

$sudo apt-get update
$sudo apt install openjdk-17-jdk
# check java version
$ java -–version

安裝 Elasticsearch

二話不多說,先安裝!

Install Elasticsearch
$ curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt update
$ sudo apt install elasticsearch
Configuring Elasticsearch

安裝完後需要做一些設定,首先

1) 基本網路設定 Add basic network settings

$ sudo vim /etc/elasticsearch/elasticsearch.yml

將檔案裡面的這兩行改成以下

network.host: 127.0.0.1
http.port: 9200

修改好後,重啟服務,並curl看結果是否正常

$ sudo systemctl start elasticsearch
$ sudo systemctl enable elasticsearch
$ curl 127.0.0.1:9200 (your ip address)

如果成功應該會回傳以下類似的訊息 (注意我們是裝7.x.x版)

{
"name" : "aicreate360ml",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
"version" : {
"number" : "7.17.8",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2022-12-02T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

2) 手動加上Xpack settings. (Elasticsearch預設有裝xpack但參數不會預寫在.yml,要手動寫入)

Xpack就是個控管安全性的插件,此步驟是要幫Elasticsearch服務設定帳號密碼

Enabling security without TLS

$ sudo vim /etc/elasticsearch/elasticsearch.yml

將 xpack.security.enabled 設為 true → 此項開啟後 需要重設每個user group的密碼

http.host: 0.0.0.0
http.cors.enabled: true

!切記勿必 要重設每個user group密碼,這個指令下完後,會是互動式的方式要你設定每組帳號及密碼 (帳密請記下來 之後登入會用到)

$ cd /usr/share/elasticsearch/bin
$ ./elasticsearch-setup-passwords interactive

此時從外部的瀏覽器網址列輸入 http://{YourServerIP}:9200

會被要求輸入帳號密碼,輸入完後會看到跟剛才curl同樣的結果顯示在瀏覽器中。

安裝 Logstash

$ sudo apt install logstash -y
$ sudo systemctl start logstash
$ sudo systemctl enable logstash
$ sudo systemctl status logstash

如果要安裝Logstash額外plug-in,可以透過以下語法進行安裝。(其中logstash-output-exec是plug-in的名稱)

$cd /usr/share/logstash
$sudo ./bin/logstash-plugin install logstash-output-exec

安裝 & Config Kibana

$ sudo apt install kibana -y
$ sudo vim /etc/kibana/kibana.yml

將設定改成以下

server.port: 5601
server.host: "127.0.0.1"
elasticsearch.hosts: ["[http://localhost:9200](http://localhost:9200/)"]
elasticsearch.username = kibana
elasticsearch.password = your-password

重啟Kibana,並且如果有防火牆的話要記得開啟5601 port,5601是Kibana UI的port。

$ sudo systemctl start kibana
$ sudo systemctl enable kibana

從外部瀏覽器key上對應的網址應該看到此畫面 {YourServerIP}:5601/app/home#/

結束!!恭喜你已經安裝完ELK了。

接下來可以直接在Kibane UI上匯入資料玩玩看,或是Kibana也有提供一些現成的範例資料可以直接使用。