之前已在Udemy上過Elasticsearch的課程,一開始只覺得Elasticsearch就是一種NoSQL。阿猩在前幾天,將上一批工作告一段落了。最近就趁著空擋來測試一下ELK。結合著累積的經驗,再回頭看,於是發現了一些有趣的東西。
什麼是ELK?
ELK取自於三個開源產品的字首,分別為Elasticsearch、Logstash、Kibana。
Elasticsearch:以Restful的概念,提供API 實現資料庫 CRUD的功能。資料格式為JSON。
Logstash: Logstash 是一種資料處理管道(Pipeline),可分為三個部分,input、filter、output。可用於Log的前處理,也能夠從多個檔案來源擷取、轉換,最後再將其傳送至「資料儲存區」。LogStash是使用JRuby開發,故會發現許多教學網誌中,都會提到要安裝JDK。
Kibana: 主要功能為圖像化,如顯示 Elasticsearch數據資料相關的 Dashboard、資料庫查詢介面等。
以前阿猩曾做過NLP,取得資料後,一定會先做Data Preprocessing,例如Tokenization、Stop word Remove等,最後才會使用TDF-IDF進行詞向量分析。
Elasticsearch作為搜尋引擎,亦提供了一些文字相關性處理的功能(參考)
測試時,Logstash也可以直接讀檔,再寫入Elasticsearch,奇怪的是,在網路上找到的logstash.conf範例都不太一樣。
爬文後歸納出大致原因,是因為Log檔案會來自各處,但因為Logstash使用JVM的關係,若Log來源與Logstash要為1對1,則會有硬體使用效率或效能的缺點。故後來都慢慢產生出一套新的流程。
Filebeat取得Log檔案 => 送入 MQ(Ex: Kafka…) => Logstash => Elasticsearch
如此一來,MQ就可以扮演緩衝區,再由少量Logstash服務慢慢處理。
使用docker 建立ELK測試環境
每次要測試新技術時,最討厭的就是版號選擇,網路上提供的教學是當時適用,但一段時間以後,可能會不適用,或者出現相容性衝突。所以阿猩決定先看看ELK的Image(網站),還好ElasticStack提供的資訊很完整,且看起來ELK的版號,應該是有所對應。從6.X之後,就只剩下很單純的arm64、amd64、跟通用版。
阿猩為了能先順利測試,決定照著網路教學安裝較舊的版本。
但看一下Image版本沒有提供arm64,但amd64卻分成oss版本與一般版本,再往前看舊一點版號,甚至還有basic版本。
可以發現oss版的容量比較小,查詢過後的確是少了一些依賴,例如Xpack等,為避免出現搞不清楚狀況的奇怪問題,阿猩最後決定安裝一般版本。
elasticsearch 安裝
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name es_local_632 docker.elastic.co/elasticsearch/elasticsearch:6.3.2
Kibana 安裝
docker pull docker.elastic.co/kibana/kibana:6.3.2
docker run --link es_local_632 -d -p 5601:5601 --name kb_local_632 docker.elastic.co/kibana/kibana:6.3.2
因阿猩是將ELK分別安裝於3個runner,故kibana.yml內容中,要將elasticsearch.url設為http:host.docker.internal:9200,而不是localhost:9200
Logstash 安裝
docker pull docker.elastic.co/logstash/logstash:6.3.2
docker run -d -p 5055:5055 -p 9600:9600 --name lg_local_632 docker.elastic.co/logstash/logstash:6.3.2
如果想在啟用runner時就帶入設定檔,可使用-v 指定mount的目錄,可方便塞入測試的log檔案,及更新logstash.conf。
成功畫面
在瀏覽器輸入localhost:9200、localhost:5601,若Elasticsearch、Kibana安裝沒問題,應該會出現下列畫面
最後透過Management設定,即可篩選出Log的內容,並以DashBoard的方式顯示在Kibana的畫面上。
參考:
https://lihan.cc/2021/11/1239/
https://www.cnblogs.com/zsql/p/13137833.html
https://www.cnblogs.com/langjunnan/p/15942613.html
https://ithelp.ithome.com.tw/m/articles/10186351