【Day01】ELK環境建置與介紹


什麼是ELK

ELK其實不是一個software (「・ω・)「
ELK是由elastic這間公司所開發的三個software(Elastic search、Logstash、Kibana)
這間公司還有做其他的software,像是Beats、APM之類的,有興趣的可以再去研究
那我們來介紹今天的三個主角吧~

Elastic Search

簡稱ES(不是ECMAScript喔),他是一個可以做平行處理的Search Engine,Elastic Search可以將很多Server節點(Node)加入叢集(Cluster),以進行平行運算。
IT狗有比較生動的介紹,可以比較MySQL與ES的差異。

Logstash

Logstash可以將各方不同的Log資訊進行整理過濾轉換後,再依照需要儲存在指定的地方。
Logstash會經過三個步驟(Inputs、Filters、Outputs),將不同種類協定傳來的資料進行整理轉送,再經由其他程式進行儲存、修改等後續動作。
例如你做的專案需要整合各種設備或者程式的Log並且可以搜索,你就可以使用Logstash轉換成統一格式後,以不同設備類型做標記,存放到Elastic Search,不需要自己寫一套轉換器,算是相當方便呢~
Logstash pipeline

<center><a href="https://www.javainuse.com/spring/springboot-microservice-elk">出自某篇教學文章</a></center>

Kibana

Kibana(不是Hibana喔)是一個讓使用者方便查詢及觀看資料的前端服務,也可以做一些Machine Learning,跟PHPMySQL很像,但是功能多了許多。
Kibana Panel


ELK分工大致如下:
各種不同格式的Log資料→Logstash整理轉換過濾→ES做存取及查詢→Kibana做為ES的UI,方便使用者操作資料查詢。

環境安裝

接下來我們來實作架設ELK環境吧,這三個程式都可以分開在不同伺服器執行,但因為小的我電腦設備沒那麼好QQ(希望有人能抖內我幾條Ram阿),因此接下來應該都會在同一台主機運行。
這次實驗我用的linux版本是Ubuntu 18.04.4-desktop-amd64請先下載安裝好喔 (ゝ∀・)b

安裝之前...

安裝之前我們有兩件事要做

1. Java

由於ELK需要用到Java,因此我們要先安裝Java

sudo apt-get install openjdk-8-jdk

我們可以用java --version來檢查Java是否安裝成功

$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-0ubuntu3~18.04-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

如果你不需要用到OM2M,可以選擇openjdk-11-jdk

2. elastic的repository

elastic系列的產品並沒有在 apt 的安裝清單中,因此我們需要加入他們的repository

  1. 加入elastic的GPG key
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    
  2. 將elastic加入apt的sources list
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    
  3. 更新apt
    sudo apt-get update
    
    這樣我們就將elastic加入apt中了,是不是很簡單呢(๑•̀ㅂ•́)و✧

開始安裝

前置作業搞定了,現在終於可以開始建置ELK了( • ̀ω•́ )

Elastic Search

sudo apt-get install elasticsearch
sudo systemctl start elasticsearch.service

Logstash

sudo apt-get install logstash
sudo systemctl start logstash.service

Kibana

sudo apt-get install kibana
sudo systemctl start kibana.service

什麼? 這樣就裝好了??? (((゚Д゚;)))
對 就是這麼簡單 σ`∀´)σ
這時候你可以打開瀏覽器開啟連結http://localhost:5601
如果有東西出現代表Kibana正常啟動

接下來你可以瀏覽http://localhost:9200
如果有東西出現代表ES正常啟動
ES web
Logstash需要一些東西才會運作

設定

安裝好了接下來是將三個服務串起來,ES跟Kibana預設值就是串起來的,因此我們只需要將ES與Logstash串起來就會動了。
Server預設使用的Port,可以對照著看

在Elastic Search還沒有資料時,在Kibana的Discover會看到這個畫面

我們可以用Logstash簡單的塞一些資料進去,這時就要設定一下Logstash了
設定Logstash也很簡單,在/etc/logstash有一個檔案logstash-sample.conf
將他複製一份到/etc/logstash/conf.d/logstash.conf,設定檔檔名只要是*.conf就可以了

cp /etc/logstash/logstash-sample.conf /etc/logstash/conf.d/logstash.conf

接下來修改一下內容

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  tcp {  #使用TCP協定
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" #這行是beats用的 註解掉目前用不到
    #user => "elastic"
    #password => "changeme"
  }
}

然後重啟logstash

sudo systemctl restart logstash.service

logstash的測試設定就完成了
我們可以下這個指令

echo "test" | nc localhost 5044

5044是Logstash我們設定監聽的Port
如果他是停在那裏沒換行就是成功了
如果他直接換行了可能需要用systemctl status logstash.service檢查一下Logstash有沒有正常啟動

如果成功了,你開啟http://localhost:9200/_cat/indices可以找到logstash開頭index

你重整Kibana的Discover就會看到以下畫面

這時在Index pattern輸入logstash-*他會用正規表達是選取logstash-開頭的index,點選Next step

選擇以@timestamp這個欄位作為時間過濾的欄位

然後點選create index parttern就可以新增這個index的查詢了
這時後你就可以看到剛剛新增的log了

最基礎的ELK架設終於做完了,是不是很簡單呢(ゝ∀・)b

<style> .article-content h1, .article-content h2, .article-content h3, .article-content h4, .article-content h5, .article-content h6 { margin-block-start: 0.5em; margin-block-end: 0.5em; } </style>
#Elastic Search #ELK #Kibana #Logstash #IoT #Search Engine





本系列實驗將使用:一台電腦、一台樹梅派、一台手機,來做實驗。大部分內容是以不同平台架構(如OM2M、Elastic Search)之間的串接實驗,並嘗試將其整合。

留言討論