# ELK - 日誌集中&分析平台
ELK 是由三個服務 - **E**lasticsearch、**L**ogstash、**K**ibana 組合起來的開源日誌管理方案,提供 Log 蒐集、分析、查詢系統等,以下簡單介紹這三個服務:
* Elasticsearch:是一個實時的分佈式搜索分析引擎,它能讓你以前所未見的速度和規模,去探索你的數據。它被用作**全文檢索**、**結構化搜索**、**分析**以及這三個功能的組合。
* logstash:是一款輕量級的日誌搜集處理框架,可以方便的把分散的、多樣化的日誌搜集起來,並進行自定義的處理,然後傳輸到指定的位置,比如某個伺服器或者文件。
* Kibana:開源的數據分析和可視化平台,它是 Elastic Stack 成員之一,設計用於和 Elasticsearch 協作。您可以使用 Kibana 對 Elasticsearch 索引中的數據進行搜索,查看,交互操作。您可以很方便的利用圖表,表格及地圖對數據進行多元化的分析和呈現,基於瀏覽器的界面便於您快速創建和分享動態數據儀表板來追踪 Elasticsearch 的實時數據變化。
目前所使用的 ELK 為 opensource 的 docker 版本,最新支援到 Elasticsearch ``7.8.0``,可以永久使用 [Basic license](https://www.elastic.co/subscriptions)。
---
## Log 搜集方式
因為開發、測試站都是使用 GCP 的虛擬機,有權限及網路控管,為了更方便查詢 log,所以就使用 [ngrok](https://ngrok.com/) 做 webhook 中繼

>如圖,ngrok 開啟本機 logstash 的 webhook
接著從 VM 透過 [netcat](https://blog.gtwang.org/linux/linux-utility-netcat-examples/) 將 log file 傳送到本機的 logstash。
```shell=
nc [NGROK_HOST] [PORT] < [LOGFILE]
#例如
nc 0.tcp.ngrok.io 12345 < test.log
```
logstash 就會將 file 送到 elasticsearch ,這樣就完成了 log 蒐集
---
## Kibana 使用簡介
輸入 kibana URL
>目前暫時架設在本機上,可透過公司內網 http://192.168.133.119:5601 連接
>帳號 : ``elastic`` 密碼 : ``changeme``

可以看到 kibana 預設首頁
按下左上角的圖案

就會進到 log 搜索頁面

點選右上方的日曆圖案,會出現時間區間的輸入選項

使用預設的快速選項 ``Today`` 會顯示今天24小時內的 log 資訊

左邊的 ``Available fields``可以過濾想看到的欄位資訊

上方的 ``Search`` 可以輸入搜索條件,類似 google search 的全文檢索功能

另外還支援 kibana 自行定義的 `KQL` 語法,可以實現複雜的搜索條件
>[KQL相關文件](https://docs.microsoft.com/zh-cn/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference)
ELK 有相當多的功能與使用情境,這邊我們只有用到簡單的 log 蒐集 & 搜索。實際上根據使用情境,會有更進階的功能,但是伴隨而來的是更複雜的設定。
---
參考資料:
[The Complete Guide to the ELK Stack](https://logz.io/learn/complete-guide-elk-stack/)
[ELK簡介](https://claire-chang.com/2019/10/09/elk%E4%BB%8B%E7%B4%B9/)
[ELK 教學 - 從無到有安裝 ELK (CentOS/Red Hat)](https://blog.johnwu.cc/article/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-red-hat.html)
[docker-ELK github](https://github.com/deviantony/docker-elk)
[ngrok](https://ngrok.com/docs)
###### tags: `elk` `docker`