前言
由於前陣子工作需要,必須建置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也有提供一些現成的範例資料可以直接使用。