什麼是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,不需要自己寫一套轉換器,算是相當方便呢~
Kibana
Kibana(不是Hibana喔)是一個讓使用者方便查詢及觀看資料的前端服務,也可以做一些Machine Learning,跟PHPMySQL很像,但是功能多了許多。
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
- 加入elastic的GPG key
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
- 將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
- 更新apt
這樣我們就將elastic加入apt中了,是不是很簡單呢(๑•̀ㅂ•́)و✧sudo apt-get update
開始安裝
前置作業搞定了,現在終於可以開始建置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正常啟動
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