要使用 ELK,有高手已經準備好 docker 的版本,安裝設定會比較容易,這裡就整理一下
docker-elk 的安裝 (這裡假設 Ubuntu 裡已經安裝好 git、docker 及 docker-compose)。
- 從 github 下載
git clone https://github.com/deviantony/docker-elk
下載完當然就差不多如下圖所示,所有東西都在 docker-elk 目錄裡。
- 執行 docker-compose 啟動 ELK
在 docker-elk 目錄裡有個 docker-compose.yml,可以透過 docker-compose 操作 ELK,啟動的指令如下,預設的帳密是 elastic / changeme: docker-compose up -d
第一次執行需要幾分鐘的時間,啟動後以 docker ps 查看,應該可以看到三個 container 在執行 (elasticsearch、logstash、kibana),並且可以看到,它們用的 port 為 9200、5000 及 5601,這些都是在 docker-compose.yml 中定義的。
- 測試 elasticsearch
用 curl 對 elasticsearch request 試看看: curl http://localhost:9200 -u elastic:changeme
看到以下回應,就是成功了。
- 測試 Kibana
我的 Ubuntu 的 IP 是 192.168.0.155,所以我在瀏覽器上輸入 http://192.168.0.155:5601,會出現要輸入帳密的登入畫面,輸入預設的 elastic / changeme 後,會出現如下畫面:
確定 Kibana 也正常執行了。
- 測試 logstash
現在修改一下 docker-compose.yml,讓 logstash 可以用 tcp 5000 port 接收資料及用 udp 12201 port 接收資料,如下:
接著再修改 ~/docker-elk/logstash/pipeline/logstash.conf,加入紅框的部份,表示要接收 udp 12201 port 的資料,如下:
按【ctrl-C】關閉 docker-elk,然後再重啟一次,再啟動後執行以下指令:
curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern' \
-H 'Content-Type: application/json' \
-H 'kbn-version: 7.6.2' \
-u elastic:changeme \
-d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'
這個指令會在 Kibana 建立一個 index pattern,然後執行以下指令,發出訊息到 ELK,看看 Kibana 會怎麼顯示。
docker run --log-driver=syslog --log-opt syslog-address=tcp://0.0.0.0:5000 --log-opt syslog-facility=daemon alpine echo hello world tcp
docker run --log-driver=gelf --log-opt gelf-address=udp://0.0.0.0:12201 alpine echo hello world udp
然後查看 Kibana,可以看到如下的顯示:
表示 docker 的 log 確實經由 logstash 的 tcp 5000 port 及 udp 12201 port 送到 Kibana 了。