上一篇 基於docker部署的微服務架構(六): 日誌統一輸出到kafka中間件 中,已經把分散在各個項目中的日誌集中輸出到了 kafka 中間件,能夠在 kafka 中查看全部項目的日誌。這種在控制檯查看日誌的方式很不方便,也不直觀,搜索功能也很弱,不能知足日誌統計分析的需求。下邊來搭建 ELK 日誌統計分析系統,經過 kibana 提供的web頁面來查看日誌。
簡單介紹下 ELK , ELK 是 elasticsearch、 logstash、kibana 的簡稱,這三種工具各司其職,一塊兒協做完成日誌統計分析的功能。web
以前已經把日誌都輸出到 kafka 的 basic-log topic 下,只須要使用 logstash 把 kafka 中的數據導入到 elasticsearch 便可。docker
elasticsearch 容器比較簡單,只須要掛載一個數據卷用來存儲數據便可。bootstrap
運行 docker pull elasticsearch:5.0.1
下載 elasticsearch 目前最新的鏡像文件。
在宿主機上建立掛載目錄 mkdir -p /elasticsearch/data
,用於存儲數據。
運行vim
docker run -d --name elasticsearch \ --volume /etc/localtime:/etc/localtime \ --volume /elasticsearch/data:/usr/share/elasticsearch/data \ --publish 9200:9200 \ --publish 9300:9300 \ elasticsearch:5.0.1
啓動 elasticsearch 容器。
啓動時若是報 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
,修改配置文件 vim /etc/sysctl.conf
,增長 vm.max_map_count=655360
。保存以後運行 sysctl -p
。從新啓動 elasticsearch 容器。架構
logstash 容器須要使用自定義的鏡像,用 CMD 指定加載配置文件,才能在啓動容器的時候使用 -d
參數運行在後臺。直接在 docker run -d
的時候指定配置文件,在容器啓動以後會自動退出,不知道是否是 bug,可是使用自定義鏡像能夠解決這個問題。
運行 docker pull logstash:5.0.1-1
下載 logstash 目前最新的鏡像文件。
在宿主機上建立掛載目錄 mkdir -p /logstash/config-dir
,用於存放 logstash 的配置文件。
在目錄中建立 logstash.conf 配置文件,文件內容:elasticsearch
input { kafka { bootstrap_servers => "kafka:9092" group_id => "logstash" topics => ["basic-log"] } } output { stdout {} elasticsearch { hosts => ["elasticsearch:9200"] } }
配置文件配置了一個 input 數據輸入源,從 kafka 的 basic-log topic 讀取數據。
配置了兩個 output 輸出源:微服務
這裏的 kafka 和 elasticsearch 經過 docker 的 --link
鏈接。
建立 Dockerfile 文件,指定加載 logstash.conf 配置文件,Dockerfile 文件內容:工具
FROM logstash:5.0.1-1 CMD ["-f", "/config-dir/logstash.conf"]
在 Dockerfile 所在的目錄運行 docker build -t my-logstash:5.0.1-1 .
,建立自定義的 logstash 鏡像 my-logstash,使用 my-logstash 鏡像就能夠經過 -d
參數讓容器運行在後臺了。ui
在 elasticsearch 容器已經啓動的狀況下,運行.net
docker run -d --name logstash \ --volume /etc/localtime:/etc/localtime \ --volume /logstash/config-dir:/config-dir \ --link kafka \ --link elasticsearch \ my-logstash:5.0.1-1
由於配置了 stdout 輸出,容器啓動以後,能夠經過 docker logs -f logstash容器ID
查看從 kafka 中讀取的日誌數據。
最後只須要再啓動 kibana 就能夠在web頁面中查看日誌數據了。
kibana 容器只須要鏈接 elasticsearch 便可。
運行 docker pull kibana:5.0.1
下載 kibana 目前最新的鏡像文件。
在 elasticsearch 容器已經啓動的狀況下,運行
docker run -d --name kibana \ --volume /etc/localtime:/etc/localtime \ --link elasticsearch \ --publish 5601:5601
kibana 容器啓動成功以後,就能夠訪問 http://宿主機IP:5601 打開 kibana 的頁面了。
能夠在 kibana 中看到全部的日誌數據。